- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query che non aggiorna
-
[..]
Sì sì scusa, ho copiato male...
intendi dove c'è "mi".Lo script recupera una scheda creata in precedenza e dà la possibilità di modificarla. In effetti la recupera, visualizza i dati inseriti prima, li modifico, clicco su "aggiorna" ma in realtà non li ha aggiornati.
-
Prova così:
[php]$time = time();
$link = mysql_connect($dbhost, $dbuser, $dbpass);
$query = "UPDATE $dbvin SET
updated='$time',
st='" . $_POST . "',
vin='" . $_POST[vin] . "',
ye='" . $_POST . "',
ma='" . $_POST[ma] . "',
mo='" . $_POST[mo] . "',
co='" . $_POST[co] . "',
mi='" . $_POST* . "',
pr='" . $_POST . "',
ex='" . $_POST[ex] . "',
in='" . $_POST . "',
bo='" . $_POST[bo] . "',
do='" . $_POST[do] . "',
en='" . $_POST . "',
fu='" . $_POST* . "',
tr='" . $_POST . "',
st='" . $_POST . "',
com='" . $_POST[com] . "'
WHERE ccode='$ccode'";
mysql_query($query, $link);
mysql_close($link);[/php]
-
Purtroppo tutto come prima
Nessun errore ma non aggiorna.
-
E allora...
[php]foreach($_POST as $postvars){
if(empty($postvars)) {die ("Hai lasciato un campo vuoto!");}
}
$time = time();
$link = mysql_connect($dbhost, $dbuser, $dbpass);
$query = "UPDATE ".$dbvin ." SET
updated='".$time."',
st='" . $_POST['st'] . "',
vin='" . $_POST['vin'] . "',
ye='" . $_POST['ye'] . "',
ma='" . $_POST['ma'] . "',
mo='" . $_POST['mo'] . "',
co='" . $_POST['co'] . "',
mi='" . $_POST['mi'] . "',
pr='" . $_POST['pr'] . "',
ex='" . $_POST['ex'] . "',
in='" . $_POST['in'] . "',
bo='" . $_POST['bo'] . "',
do='" . $_POST['do'] . "',
en='" . $_POST['en'] . "',
fu='" . $_POST['fu'] . "',
tr='" . $_POST['tr'] . "',
st='" . $_POST['st'] . "',
com='" . $_POST['com'] . "'
WHERE ccode='".$ccode."'";
mysql_query($query, $link)or die("ERRORE:".mysql_error());
echo "Operazione eseguita con successo!";
mysql_close($link);[/php]
-
[..]
Grazie!
Abbiamo fatto un bel passo avanti.
Ora ricevo il seguente errore:[php]ERRORE:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'co='Dop', mi='270', pri='65', ex='Ssi' at line 8[/php]E se dalla query elimino le righe che riguardano co,mi,pri,ex tutto funziona, ovviamente senza aggiornare quelle voci che sono state escluse eliminando le righe.
Devo capire perchè non digerisce la sintassi di quelle righe... sono uguali alle altre!!! Grrrrrr
-
Uhm...potrebbe essere un problema dei privilegi dei campi....
Ad esempio, puoi aver messo un limite ad un campo di 2 cifre che magari ne richiede 3...
Se puoi,puoi esportare la parte di tabella interessata in modo che noi possiamo capire meglio?
-
[..]
Ehm..dopo ci provo
Ma scusa, se quando creo una scheda nuova va tutto liscio, non dovrebbe andare liscio anche un update considerando che lavora sulle stesse tabelle/campi?
-
Ho controllato...spero le cose giuste...
Per esempio il campo "co" : nella pagina php ho "maxlength=7" e il campo è un var(char)7.
Boh..aiutoooooooo
-
Ciao Sara1985,
Provando a fare:
[php]
echo "UPDATE ".$dbvin ." SET
updated='".$time."',
st='" . $_POST['st'] . "',
vin='" . $_POST['vin'] . "',
ye='" . $_POST['ye'] . "',
ma='" . $_POST['ma'] . "',
mo='" . $_POST['mo'] . "',
co='" . $_POST['co'] . "',
mi='" . $_POST['mi'] . "',
pr='" . $_POST['pr'] . "',
ex='" . $_POST['ex'] . "',
in='" . $_POST['in'] . "',
bo='" . $_POST['bo'] . "',
do='" . $_POST['do'] . "',
en='" . $_POST['en'] . "',
fu='" . $_POST['fu'] . "',
tr='" . $_POST['tr'] . "',
st='" . $_POST['st'] . "',
com='" . $_POST['com'] . "'
WHERE ccode='".$ccode."'";
[/php]
La condizione WHERE ccode stampata è corretta?@Sara1985 said:
il campo è un var(char)7
E' char o varchar? sono due cose differenti, poichè char deve essre obbligatoriamente 7 caratteri, varchar massimo 7 caratteri. Ma non credo il problema sia questo altrimenti dovrebbe generare un errore...
-
Guardando un'altra pagina php dello stesso script noto questo:
[PHP]
$query = "SELECT ccode, vi, st, vin, ye, ma, mo, 'co', 'mi', 'pr', 'ex', st FROM $dbvin ORDER BY $sort $order";
[/PHP]e cioè che gli "incriminati" sono con gli apici, gli altri no; quindi per non so quale stranissima ragione hanno bisogno di una sintassi diversa.
Tornando alla parte di codice che ho postato prima... come potrebbe essere modificata la sintassi dei 4 campi incriminati alla luce della loro diversa sintassi trovata in un'altra pagina dello stesso script?Ps: ovviamente togliendo gli apici dal codice postato ora, quella pagina da appunto errore di sintassi
-
@Thedarkita said:
E' char o varchar? sono due cose differenti, poichè char deve essre obbligatoriamente 7 caratteri, varchar massimo 7 caratteri. Ma non credo il problema sia questo altrimenti dovrebbe generare un errore...
Ho scritto male io è varchar(7)
-
@Thedarkita said:
Ciao Sara1985,
Provando a fare:
[php]
echo "UPDATE ".$dbvin ." SET
updated='".$time."',
st='" . $_POST['st'] . "',
vin='" . $_POST['vin'] . "',
ye='" . $_POST['ye'] . "',
ma='" . $_POST['ma'] . "',
mo='" . $_POST['mo'] . "',
co='" . $_POST['co'] . "',
mi='" . $_POST['mi'] . "',
pr='" . $_POST['pr'] . "',
ex='" . $_POST['ex'] . "',
in='" . $_POST['in'] . "',
bo='" . $_POST['bo'] . "',
do='" . $_POST['do'] . "',
en='" . $_POST['en'] . "',
fu='" . $_POST['fu'] . "',
tr='" . $_POST['tr'] . "',
st='" . $_POST['st'] . "',
com='" . $_POST['com'] . "'
WHERE ccode='".$ccode."'";
[/php]
La condizione WHERE ccode stampata è corretta?Provando dalla finestra SQL del Phpmyadmin ottengo questo:
Messaggio di MySQL:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'echo "UPDATE ".$dbvin ." SET
updated='".$time."',
st='" . $_POST['st'] . "',' at line 1
-
Ciao Sara1985,
Ciò dipende dal fatto che quelle parole vengono interpretate come funzioni, solitamente si usa ` e non l'apice normale in modo da non incorerre in questi errori.
Prova ad usarlo anche nella query di update e vedi se risolvi, ma è strano che non ti generi l'errore avendo messo mysql_error()...EDIT quel codice devi lanciarlo da php, non dal phpmyadmin direttamente...
-
@Thedarkita said:
Ciao Sara1985,
EDIT quel codice devi lanciarlo da php, non dal phpmyadmin direttamente...
Fatto, mi scrive qualcosa ,ma scompare subito, ho visto con un printscreen cosa dice.
Lista tutte gli update fatti, non dà alcun errore e dice che è stato tutto eseguito con successo.. ma poi se guardo la scheda invece è tutto come prima
L'unico modo per far realmente aggiornare la scheda è togliere le 4 righe incriminate. Ma così ovviamente non mi aggiorna i capi che ho escluso.
Ma non credo sia un caso che nell'altra pagina proprio quei 4 campi abbiano una sintassi differente. Non basterebbe trovare quella corretta anche in questo pezzo di codice?
-
Nell'ultimo mio post ti ho detto come fare la query di update, prova in quel modo
-
[...]
Fatto...tutto come prima
-
[php]
foreach($_POST as $postvars){
if(empty($postvars)) {die ("Hai lasciato un campo vuoto!");}
}
$time = time();
$link = mysql_connect($dbhost, $dbuser, $dbpass);
$query = "UPDATE ".$dbvin ." SET
updated
='".$time."',
st
='" . $_POST['st'] . "',
vin
='" . $_POST['vin'] . "',
ye
='" . $_POST['ye'] . "',
ma
='" . $_POST['ma'] . "',
mo
='" . $_POST['mo'] . "',
co
='" . $_POST['co'] . "',
mi
='" . $_POST['mi'] . "',
pr
='" . $_POST['pr'] . "',
ex
='" . $_POST['ex'] . "',
in
='" . $_POST['in'] . "',
bo
='" . $_POST['bo'] . "',
do
='" . $_POST['do'] . "',
en
='" . $_POST['en'] . "',
fu
='" . $_POST['fu'] . "',
tr
='" . $_POST['tr'] . "',
st
='" . $_POST['st'] . "',
com
='" . $_POST['com'] . "'
WHERE ccode='".$ccode."'";
mysql_query($query, $link)or die("ERRORE:".mysql_error());
echo "Operazione eseguita con successo!";
mysql_close($link);
[/php]
-
Ce l'ho fatta!!!!!
anzi..ce l'avete fatta
Dopo un po' di prove, e vedendo che l'errore era sulla riga 8 della query e quindi sul quel campo "co"... ho messo "`" come suggerito da voi e tutto funziona.
Ho modificato solo questa riga così[PHP]
co
='" . $_POST['co'] . "',
[/PHP]Lasciando il resto invariato... Grazie!
Ora mi piacerebbe capire perchè il campo "co" sia qui che nell'altra pagina vuole una sintassi differente dagli altri nonostante sia un campo uguale agli altri
-
E' un parola riservata... e quindi non veniva interpretato come nome di campo...
-
@Thedarkita said:
E' un parola riservata... e quindi non veniva interpretato come nome di campo...
Grazie!
Ora ho imparato una cosa nuova!
Baci