- Home
- Categorie
- Coding e Sistemistica
- Coding
- La tabella non si aggiorna
-
update rubrica set promotore='', nome_azienda='', settore='',
città
='', indirizzo='', nome_contatto='', telefono='', email='', sede_estero='', azioni='', progressione='', risultato_finale='', note='' where id='7'1Errore:Query was emptyQuery was empty
-
Query was empty?
Puoi postare il codice completo, non vorrei che abbiamo fatto un pò di confusione con questi aggiungi qua e là.
La query stampata se la lanci dal phpmyadmin dice record modificati 0?
-
Ecco il codice completo
[php]<?
include ("config.inc.php");
include ("top_foot.inc.php");
//intestazione
top();
?>
<html><head>
<title>Modifica di un record</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>
<body>
<?php
$host = 'localhost' ;
$user = 'user' ;
$password = 'password' ;
$db_name = 'database';
$confirm=$_REQUEST['confirm'];
$id=$_REQUEST['id'];
$db = mysql_connect($host, $user, $password)
or die ("Impossibile connettersi al server $host");
mysql_select_db($db_name, $db)
or die ("Impossibile connettersi al database $db_name");
if (!$confirm)
{
$query = "select * from rubrica where id=$id";
$dbResult = mysql_query($query, $db);
$AffectedRows = mysql_affected_rows($db);
if ($AffectedRows==0)
{
print("<h3>Non esistono record con i criteri selezionati</h3>");
}
else
{
mysql_data_seek($dbResult,0);
$row=mysql_fetch_row($dbResult);
print("<table>");
print("<form method="post"action="{$_SERVER['PHP_SELF']}">");
foreach ($row as $k => $v)
{
$myfield = mysql_fetch_field($dbResult,$k);
print("<tr><td>$myfield->name</td>");
print("<td><input type="text" value="" . $v . "" name="" . $myfield->name . "" size="100" maxlenght="100"></td></tr>");
}
print("<tr><td colspan="2"><input type="submit" value="Conferma modifiche"></td></tr> ");
print("<input type="hidden" name="confirm" value="1">");
print("</form>");
print("</table>");
mysql_free_result($dbResult);
mysql_close($db);
}
}
else
{
$promotore=$_REQUEST['promotore'];
$nome_azienda=$_REQUEST['nome_azienda'];
$settore=$_REQUEST['settore'];
$città=$_REQUEST['città'];
$indirizzo=$_REQUEST['indirizzo'];
$nome_contatto=$_REQUEST['nome_contatto'];
$telefono=$_REQUEST['telefono'];
$email=$_REQUEST['email'];
$sede_estero=$_REQUEST['sede_estero'];
$azioni=$_REQUEST['azioni'];
$progressione=$_REQUEST['progressione'];
$risultato_finale=$_REQUEST['risultato_finale'];
$note=$_REQUEST['note'];echo "update rubrica set promotore='$promotore', nome_azienda='$nome_azienda', settore='$settore',
città
='$città', indirizzo='$indirizzo', nome_contatto='$nome_contatto', telefono='$telefono', email='$email', sede_estero='$sede_estero', azioni='$azioni', progressione='$progressione', risultato_finale='$risultato_finale', note='$note' where id='$id'";echo mysql_num_rows(mysql_query("SELECT id FROM rubrica where id='$id'"));
if(mysql_query($query)== true)
{
echo "Modificati: ",mysql_affected_rows(), " records";
}
else
{
echo "Errore:" . mysql_error();
}
$dbResult = mysql_query($query, $db) or die(mysql_error());
$AffectedRows = mysql_affected_rows($db);if ($AffectedRows!=1)
{
print("<h3>Il record è stato aggiornato</h3>");
print("<a href="query.php"><img src="http://www.giorgiotave.it/forum/images/vedi.jpg" border="0"></a><br><br><br>");
print("<a href="logout.php"><img src="http://www.giorgiotave.it/forum/images/logout.jpg" border="0"></a>");
}
mysql_close($db);
}
?>
</body>
</html>
[/php]e scusa la mia beata ignoranza
ma come si fa a lanciare da PHPMyAdmin?
-
Apri il phpmyadmin, selezioni il database da sinistra, al centro in alto trovi SQL, li incolli quella query e fai esegui.
EDIT:
Non ho controllato tutto ciò che c'è prima, visto che la query la stampa si spera corretta, se hai provato a mettere ovunque i campi vuoti.
Ti sei perso una variabile durante le modifiche fai cosi:
[php]
<?
include ("config.inc.php");
include ("top_foot.inc.php");
//intestazione
top();
?>
<html><head>
<title>Modifica di un record</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>
<body>
<?php
$host = 'localhost' ;
$user = 'user' ;
$password = 'password' ;
$db_name = 'database';
$confirm=$_REQUEST['confirm'];
$id=$_REQUEST['id'];
$db = mysql_connect($host, $user, $password)
or die ("Impossibile connettersi al server $host");
mysql_select_db($db_name, $db)
or die ("Impossibile connettersi al database $db_name");
if (!$confirm)
{
$query = "select * from rubrica where id=$id";
$dbResult = mysql_query($query, $db);
$AffectedRows = mysql_affected_rows($db);
if ($AffectedRows==0)
{
print("<h3>Non esistono record con i criteri selezionati</h3>");
}
else
{
mysql_data_seek($dbResult,0);
$row=mysql_fetch_row($dbResult);
print("<table>");
print("<form method="post"action="{$_SERVER['PHP_SELF']}">");
foreach ($row as $k => $v)
{
$myfield = mysql_fetch_field($dbResult,$k);
print("<tr><td>$myfield->name</td>");
print("<td><input type="text" value="" . $v . "" name="" . $myfield->name . "" size="100" maxlenght="100"></td></tr>");
}
print("<tr><td colspan="2"><input type="submit" value="Conferma modifiche"></td></tr> ");
print("<input type="hidden" name="confirm" value="1">");
print("</form>");
print("</table>");
mysql_free_result($dbResult);
mysql_close($db);
}
}
else
{
$promotore=$_REQUEST['promotore'];
$nome_azienda=$_REQUEST['nome_azienda'];
$settore=$_REQUEST['settore'];
$città=$_REQUEST['città'];
$indirizzo=$_REQUEST['indirizzo'];
$nome_contatto=$_REQUEST['nome_contatto'];
$telefono=$_REQUEST['telefono'];
$email=$_REQUEST['email'];
$sede_estero=$_REQUEST['sede_estero'];
$azioni=$_REQUEST['azioni'];
$progressione=$_REQUEST['progressione'];
$risultato_finale=$_REQUEST['risultato_finale'];
$note=$_REQUEST['note'];echo "update rubrica set promotore='$promotore', nome_azienda='$nome_azienda', settore='$settore',
città
='$città', indirizzo='$indirizzo', nome_contatto='$nome_contatto', telefono='$telefono', email='$email', sede_estero='$sede_estero', azioni='$azioni', progressione='$progressione', risultato_finale='$risultato_finale', note='$note' where id='$id'";echo mysql_num_rows(mysql_query("SELECT id FROM rubrica where id='$id'"));
$query = "update rubrica set promotore='$promotore', nome_azienda='$nome_azienda', settore='$settore',città
='$città', indirizzo='$indirizzo', nome_contatto='$nome_contatto', telefono='$telefono', email='$email', sede_estero='$sede_estero', azioni='$azioni', progressione='$progressione', risultato_finale='$risultato_finale', note='$note' where id='$id'";if(mysql_query($query)== true)
{
echo "Modificati: ",mysql_affected_rows(), " records";
}
else
{
echo "Errore:" . mysql_error();
}
$dbResult = mysql_query($query, $db) or die(mysql_error());
$AffectedRows = mysql_affected_rows($db);if ($AffectedRows!=1)
{
print("<h3>Il record è stato aggiornato</h3>");
print("<a href="query.php"><img src="http://www.giorgiotave.it/forum/images/vedi.jpg" border="0"></a><br><br><br>");
print("<a href="logout.php"><img src="http://www.giorgiotave.it/forum/images/logout.jpg" border="0"></a>");
}
mysql_close($db);
}
?>
</body>
</html>
[/php]
-
update rubrica set promotore='', nome_azienda='', settore='',
città
='', indirizzo='', nome_contatto='', telefono='', email='', sede_estero='', azioni='', progressione='', risultato_finale='', note='' where id='7'1Modificati: 0 recordsIo non ce la faccio più ... e tu credo anche
sto seriamente meditando di picchiare la testa su uno spigolo ...
-
Anche lanciando dal phpmyadmin non modifica nulla?
Prova a lanciare questa query dal phpmyadmin:
[php]
update rubrica set promotore='' where id='7'
[/php]
E vedi se cosi modifica.
-
Righe interessate: 0 (La query ha impiegato 0.0002 sec)
-
:bho:
Lanciando dal phpmyadmin:
[php]
SELECT * FROM rubrica where id='7'
[/php]
Prima lo abbiamo fatto da php e trovava il record con id 7, ma se non modifica l'unica cosa è che non c'è un record con id 7.
-
Visualizzazione record 0 - 0 (1 Totali, La query ha impiegato 0.0003 sec)
eppure io lo vedo in PHPMyAdmin
-
Non saprei dare una spiegazione a ciò.
-
Beh, senti... in ogni caso sei stato più che gentilissimo e ti ringrazio molto per tutto il tempo che mi hai dedicato! Sei un grande
-
Ciao,
non ho riletto tutti i post, sto guardando solo gli ultimi... vediamo se riassumo beneHai eseguito la query:
update rubrica set promotore='' where id='7'
ed il risultato è stato:
Righe interessate: 0 (La query ha impiegato 0.0002 sec)Hai eseguito la query:
SELECT * FROM rubrica where id='7' ```ed il risultato è stato: Visualizzazione record 0 - 0 (1 Totali, La query ha impiegato 0.0003 sec) Quindi, ricapitolando, il record con ID 7 è presente nel database e viene trovato, ma la query di aggiornamento non sembra aggiornarlo. Domanda: Che valore ha il campo "promotore" per il record con ID=7 ? Perchè mysql_affected_rows() ti segnala il numero di record effettivamente modificati. Ovvero, se modifici un record inserendo per i campi valori che ha già, nessuna riga viene modificata e il risultato è appunto 0. Alessandro
-
Grazie Magicale per il tuo interessamento.
Purtroppo esiste questo problema.
Se tutti i campi del form vengono riempiti, l'inserimento dei dati nel database funziona benissimo.
Il problema si ha quando si tenta di modificare uno qualsiasi dei dati che hai visto.
A quel punto il risultato è che non viene modificato quel campo da te digitato nuovamente (cioè per esempio voglio cambiare il nome dell'azienda perchè ha cambiato ragione sociale) ma tutti i valori presenti in quella riga (cioè in quel ID) vengono cancellati .... tranne il numero di ID.Quindi se tenti di inserire nuovamente i dati, anche parzialmente, non si ottiene alcun aggiornamento.
Pertanto, per rispondere alla tua domanda, non c'è alcun valore nel campo "promotore" .... ma neanche in tutti gli altri.
-
Ciao,
ho creato sul mio db locale una tabella con gli stessi campi. Ho creato una pagina copiando l'ultima versione del codice che ti ha postato Thedarkita e l'ho testata. L'unica cosa che posso dirti è che accade quanto presumevo: funziona tutto correttamente.Non so che altro dirti. L'unico controllo che mi viene di suggerirti è fare un
[php]var_dump($_REQUEST);[/php]
subito prima o dopo dell'echo della query. Giusto per verificare che i dati arrivino correttamente alla pagina.Alessandro
-
Alessandro,
grazie per il tuo aiuto.
Non riesco a capire perchè a me non funziona.
Ho aggiunto la riga di codice che hai suggerito e questo è il risultato:update rubrica set promotore='', nome_azienda='', settore='',
città
='', indirizzo='', nome_contatto='', telefono='', email='', sede_estero='', azioni='', progressione='', risultato_finale='', note='' where id='8'1array(16) { ["id"]=> string(1) "8" ["Promotore"]=> string(5) "pippo" ["Nome_azienda"]=> string(5) "Apple" ["Settore"]=> string(11) "Informatica" ["Città"]=> string(9) "Cupertino" ["Indirizzo"]=> string(15) "1 Infinite Loop" ["Nome_contatto"]=> string(10) "Steve Jobs" ["Telefono"]=> string(16) "001 212 555 4433" ["Email"]=> string(15) "[email protected]" ["Sede_estero"]=> string(14) "California USA" ["Azioni"]=> string(8) "azione 1" ["Progressione"]=> string(8) "azione 2" ["Risultato_finale"]=> string(8) "azione 3" ["Note"]=> string(4) "note" ["confirm"]=> string(1) "1" ["PHPSESSID"]=> string(32) "a7157b78fcd4e275f0c13751de9ca0fa" } Modificati: 0 recordsCome vedi i dati che ho messo nel form ci sono ma nell'output non si vede nulla e comunque ciò che ho postato appena qui spra è un errore ....
guardate, io vi ringrazio ancora per la pazienza ma a questo punto mi affido alla vostra clemenza ....
-
Beh... direi che almeno ora il problema è diventato evidente
L'inghippo è nei nomi dei campi della tabella.
Li hai scritti con l'iniziale maiuscola e quando li recuperi con mysql_fetch_field() vengono letti esattamente come li hai scritti, ovvero con, appunto, l'iniziale maiuscola.
Di conseguenza il name dei campi input ha l'iniziale maiuscola e quando li recuperi facendo ad esempio:
[PHP]
$promotore=$_REQUEST['promotore'];
[/PHP]
non viene letto alcun dato, perchè in realtà esso si trova in
[PHP]
$promotore=$_REQUEST['Promotore'];
[/PHP]Hai due possibili modi per correggere:
- sul database: editare tutti i nomi dei campi della tabella togliendo l'iniziale maiuscola (è quello che ti consiglio di fare)
- sul codice php: modificare la lettura dei dati mettendo l'iniziale maiuscola alle chiavi dell'array $_REQUEST
Alessandro
-
FANTASTICO ALESSANDRO !!!
Hai ragione!
Ho sostituito le iniziali maiuscole con le minuscole nel database e funziona!
Inoltre ho rimossovar_dump($_REQUEST);
perchè altrimenti mi dava una risposta strana e finalemnte la tabella si aggiorna !!!
YAHOOO!!!!!
Se posso approfittare della tua cortesia adesso vorrei risolvere gli ultimi due problemi e poi il risultato è perfetto:
-
Alla pagina dove viene mostrata la tabella ci si arriva tramite una pagina di login dove bisogna inserire username e password.
Purtroppo ci si accede anche digitando direttamente l'url di quella pagina, by-passando così la pagina di login.
Domanda:
è possibile fare in modo che se si digita direttamente l'url della pagina contenente la tabella, si abbia una risposta del tipo "Non sei autorizzato ad accedere direttamente a questa pagina. Clicca qui per fare il login" e rimandare l'utente obbligatoriamente alla pagina di login?
Naturalmente se ci si arriva "una volta che hai già fatto il login" quella risposta non deve esserci... -
le caselle della tabella hanno una larghezza determinata dalla lunghezza del titolo.
Per esempio, "nome_azienda" ha una casella più larga di "indirizzo" però l'indirizzo è solitamente più lungo di un nome di azienda.
Ovviamente se al posto di "indirizzo" ci metto "indirizzo_della_azienda" la casella mi si allarga ma questo comporterebbe rifare il codice di parecchie pagine.
Domanda:
c'è modo di allargare le dimensione della casella senza dovere mettere mano al nome della casella stessa?
Grazie ancora e confido ancora una volta nel tuo preziosissimo aiuto
-
-
Ciao,
-
Sì. Puoi ad esempio memorizzare in una variabile di sessione il dato Loggato/NonLoggato e controll'arlo nelle pagine a cui puoi accedere solo dopo il login. Se in una di quelle pagine risulta non loggato fai u redirect alla pag di login.
-
Non ho capito a cosa ti riferisci con "casella"
-
-
Grazie per la tua risposta Alessandro e scusa per il ritardo nella mia replica ma ero in ferie (ora sono purtroppo finite, sigh!).
Ho provato a rispondere tramite il mio iPhone ma non funziona.In ogni caso:
-
hai ragione... detta così ha un senso logico e a parole è semplice ma, come ho già premesso, non sono un mago del PHP ed è già tanto se sono arrivato a fare il codice di cui abbiamo parlato finora.
Qualche suggerimento pratico? (ovvero ... ti sto chiedendo in modo spudorato se mi potresti dare il pezzo di codice adatto ...) -
per casella intendo quella che insieme alle altre formano la griglia dell'output, dove sono contenuti tutti i dati inseriti tramite il form.
Ho notato che, a parte quella relativa all'indirizzo e-amil del cliente, per tutte le altre colonne della griglia la larghezza è determinata dalla lunghezza del titolo.
Sarebbe invece possibile determinare la larghezza indipendentemente dalla lunghezza del titolo?
-
-
Alessandro,
ancora in vacanza?
Non credo ..... hai qualche risposta per me, per favre?