• User

    Update di più campi

    Salve a tutti,
    avrei un problemino con update in mysql...

    Ho un form la cui 'action' mi manda a un file.php che dovrebbe aggiornarmi 3 campi della mia tabella contemporaneamente.

    Per fare questo ho provato più strade, ma nessuna di queste sembra funzionare come voglio...

    Strada 1:
    eseguire tante query quanti sono i campi da aggiornare:

    [php]
    $sql_upd1 = "UPDATE contenuti SET ordine = '$ordine' WHERE ordine = '$upd'";
    @mysql_query("$sql_upd1",$link) or die("Errore query database: " . mysql_error());
    $sql_upd2 = "UPDATE contenuti SET link = '$newLink' WHERE ordine = '$upd'";
    @mysql_query("$sql_upd2",$link) or die("Errore query database: " . mysql_error());
    $sql_upd3 = "UPDATE contenuti SET descrizione = '$descrizione' WHERE ordine = '$upd'";
    @mysql_query("$sql_upd3",$link) or die("Errore query database: " . mysql_error());
    [/php]Il risultato di questo è un po' strano, nel senso che questo codice mi esegue solo la prima query, le altre 2 sembrano passare inosservate.
    Se commento la prima query ($sql_upd1) le altre due funzionano entrambe contemporaneamente.

    Strada 2:
    In questo caso ho provato a fare qualcosa di più complesso ma più snello, ma così non mi aggiorna proprio nulla, quindi ci dev'essere qualche errore.

    [php]
    $field = array('ordine' => '$ordine','link' => '$newLink','descrizione' => '$descrizione');
    foreach ($field as $k => $v) {
    @mysql_query($sql_upd = "UPDATE contenuti SET $k = '$v' WHERE ordine = '$upd'",$link) or die("Errore query database: " . mysql_error());
    }
    [/php]Qualcuno mi sa dare qualche suggerimento, pls? :smile5:


  • User Attivo

    Ti stai complicando la vita inutilmente!
    Aggiorna i 3 campi con un'unica query.


  • ModSenior

    Ciao supadema,
    ti consiglierei oltre ad utilizzare un'unica query come ti ha già detto tigrone, di non nascondere gli errori, proprio perchè non puoi sistemarli in tempi brevi.


  • User

    @tigrone
    In una sola query? Cioè una cosa così:
    $sql_upd = "UPDATE contenuti SET ordine = '$ordine',link = '$newLink',descrizione = '$descrizione' WHERE ordine = '$upd'";
    Era la prima cosa che avevo provato, ma non funzionava e poi facendo un po' di ricerche mi era sembrato di capire non si potesse fare...

    @Thedarkita
    non ho capito, cosa vuol dire non nascondere gli errori?


  • User Attivo

    Esatto.
    Se metti davanti alle funzioni il simbolo '@', non fai visualizzare gli errori.


  • User

    aah è vero, mi ero dimenticato di questo!


  • User

    Ho risolto, adesso funziona:

    [PHP]
    $field = array('link' => $newLink, 'descrizione' => $descrizione,'ordine' => $ordine);
    foreach ($field as $k => $v) {
    mysql_query($sql_upd = "UPDATE contenuti SET $k = '$v' WHERE ordine = '$upd'",$link) or die("Errore query database: " . mysql_error());
    }
    [/PHP]

    L'errore stava nell'array, doveva essere $newLink e non '$newLink', $ordine e non '$ordine', ecc.


  • ModSenior

    Stai facendo molte query, quando potevi fare la stessa cosa con una query ed ottenere un utilizzo di risorse inferiore.