• User Attivo

    Query che non aggiorna

    Salve a tutti,
    premetto che di php capisco poco o niente ma dovrei modificare uno script.
    C'è una query (si chiama così?) che dovrebbe aggiornare dei campi della scheda, solo che non aggiorna. Non dà alcun errore ma neppure aggiorna.

    Credo che la parte di codice sbagliata sia questa

    [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[mi',
    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_db_query($dbname, $query, $link);
    mysql_close($link);

    [/PHP]

    Aiutoooooo :crying:
    Grazie a tutti e spero in un vostro aiuto
    Sara


  • User Newbie

    Hai notato che manca una parentesi quadra??_Non è che è per quello che non va??_Comunque dammi qualche info in più su cosa dovrebbe fare magari posso aiutarti.


  • User Attivo

    [..]

    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.


  • User Attivo

    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]


  • User Attivo

    Purtroppo tutto come prima 😞
    Nessun errore ma non aggiorna.


  • User Attivo

    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]


  • User Attivo

    [..]

    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


  • User Attivo

    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?


  • User Attivo

    [..]

    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?


  • User Attivo

    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


  • ModSenior

    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...


  • User Attivo

    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? :mmm:

    Ps: ovviamente togliendo gli apici dal codice postato ora, quella pagina da appunto errore di sintassi


  • User Attivo

    @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)


  • User Attivo

    @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


  • ModSenior

    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...


  • User Attivo

    @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. :mmm: 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? 🙂


  • ModSenior

    Nell'ultimo mio post ti ho detto come fare la query di update, prova in quel modo 😉


  • User Attivo

    [...]

    Fatto...tutto come prima 😞


  • ModSenior

    [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]


  • User Attivo

    Ce l'ho fatta!!!!! :yuppi:
    anzi..ce l'avete fatta :vai:
    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 :mmm: