• User Attivo

    update - ma non delle variabili vuote

    Ciao a tutti e sempre grazie alla gentilezza e coretsia che dimostrate verso chi , come me , è neofita e spesso fa domande un pò stupide :?... come quella che stò per fare , per l' appunto !!

    Dunque , io ho una tabella in un db nel quale devo fare un update per poter modificare alcuni valori , di tanto in tanto ..

    Ma non è detto che tutti i campi debbano essere cambiati . In particolare ci sono nella stessa riga 5 diversi campi immagine che non è detto che ogni volta siano da uploadare di nuovo .. forse 1 , forse 2 , forse nessuna , ecc..

    Come faccio a fare un upload solo dei campi che voglio io ?

    Cioè : come posso dire di non uploadare le variabili che restano vuote ???

    Grazie ragazzi !!

    Siete di aiuto pazzesco !!!!!!!

    tanaka


  • ModSenior

    Ciao tanaka,
    ti faccio un esempio della soluzione che mi sembra più veloce:
    [php]
    // I nostri input
    $a = $_POST['a'];
    $b = $_POST['b'];
    $c = $_POST['c'];

    // Se $a non è vuota, allora controllo se la variabile $q è definita, se è definita aggiungo questo campo alla query, altrimenti definisco la variabile e faccio modificare il campo
    if($a != '')
    $q = ((isset($q)) ? $q.",a='$a'" : "a='$a'");
    // Se $b non è vuota, allora controllo se la variabile $q è definita, se è definita aggiungo questo campo alla query, altrimenti definisco la variabile e faccio modificare il campo
    if($b != '')
    $q = ((isset($q)) ? $q.",b='$b'" : "b='$b'");
    // Se $c non è vuota, allora controllo se la variabile $q è definita, se è definita aggiungo questo campo alla query, altrimenti definisco la variabile e faccio modificare il campo
    if($c != '')
    $q = ((isset($q)) ? $q.",c='$c'" : "c='$c'");

    // UPDATE
    if(isset($q))
    mysql_query("UPDATE tabella SET $q WHERE ......");
    [/php]

    Se hai domande, chiedi pure.


  • User Attivo

    Grazie infinite Thedarkita , sempre gentilissimo e diponibilissimo .

    Ammetto però che nella mi ignoranza non ho capito ..

    Perchè verifichi un altra variabile ? e chi stabilisce se è settata o no ?

    Inoltre , perchè la usi nella query di update ?

    Insomma ... non ho davvero capito niente .

    Comprendo la difficoltà a spiegare i tuoi ragionamenti a chi di quella cosa non ne sà granchè , ma se potessi spiegarmi ad un livello elementare ( al quale io sono ) , te ne sarei grato .

    Un saluto

    Tanaka


  • User Attivo

    Ciao Tanaka,
    lo script postato da Thedarkita è corretto.

    Cos'è 'q'?
    q è il completamento della query di update:

    [php]update tab1 set campo1='1', campo2='2' ....... where ...... [/php]q viene testata per capire se è il primo campo e quindi non serve la virgola
    metre per tutti gli altri campi successivi devono essere preceduti da virgola per completare correttamente l'elenco delle colonne da aggiornare.

    Siccome hai specificato che a priori che non sai quali campi della tabella devono ogni volta essere aggiornati, Thedarkita ti ha mostrato una tecnica per creare dinamicamente le query SQL.

    Ciao


  • User Attivo

    Grazie moltissimo Mirko ,

    purtroppo però devo dire che non mi è chairo nemmeno questa volta .:gtsad:

    Noto che chi è più avanti di me fa cose non solo che non conosco , ma di cui non riesco a seguire il filo logico .:surprised: E' solo questione di esperienza ?

    Mi piacerebbe tanto imparare , anzichè ritrovarmi con degli script incomprensibili .:crying:

    Riuscite mica a rendere facile facile davvero basilare, magari commentando le varie righe , lo script di Thedarkita ?? Ci terrei così tanto a capire quali meccanismi utilizzate per fare queste cose .... :gtsad:

    Grazie davvero a tutti voi !! :gthi:


  • ModSenior

    C'è qualche parte in particolare che non hai capito?


  • User Attivo

    Perdonami Thedarkita , ma non capisco praticamente nulla : i meccanisimi che utilizzi e come li metti in pratica .

    Riusciresti molto gentilmente a spiegarmi come ad un bambino ?

    Perchè richiami una nuova variabile e come verifichi il suo settaggio ? chi la dovrebbe avere o meno settata ? come la usi poi per l' update ?

    Insomma , hai presente un dummies ? eccomi qua , presente .:D

    grazie infinite !

    tanaka


  • ModSenior

    Allora questo:
    [php]
    if($b != '')
    $q = ((isset($q)) ? $q.",b='$b'" : "b='$b'");
    [/php]

    Controlla la variabile $b se è diversa da '' dobbiamo modificare quel campo del database. Controlliamo che a $q non sia stato già dato un valore precedentemente (Cioè al controllo di $a) se a questa variabile non è stato dato un valore prima, significa che è il primo campo a dover essere modificato pertanto non serve la virgola, se invece $a doveva essere modificato la query doveva essere del tipo campo1='$a',campo2='$b' e quindi serviva una virgola per separare i campi da modificare.
    Adesso supponendo che $a e $b siano diversi da '' e quindi abbiano al loro interno una stringa, $q dopo questi controlli avrà come valore:
    campo1='testo',campo2='miotesto'
    La query è stata quindi generata in modo dinamico a seconda di come serve, e non farà gli update inutili.

    Spero che hai capito, perchè in modo più semplice non saprei come spiegarti.


  • User Newbie

    Interessante, anche dopo così tanto tempo.
    Mi sto scontrando col medesimo problema, ho molte più variabili ma sembra non funzionare. Sarebbe possibile avere qualche aiuto?
    Posto la parte di codice che mi serve come base, naturalmente limito il numero delle variabili per comodità:

    [PHP]
    $dtt = date("z");
    $giorno = $dtt + 1;
    $stazione = $_POST['stazione'];
    $fascia1 = $_POST['fascia1'];
    if($fascia1 != '')
    $q = ((isset($q)) ? $q.",fascia1='$fascia1'" : "fascia1='$fascia1'");

    $fascia2 = $_POST['fascia2'];
    if($fascia2 != '')
    $q = ((isset($q)) ? $q.",fascia2='$fascia2'" : "fascia2='$fascia2'");

    $fascia3 = $_POST['fascia3'];
    if($fascia3 != '')
    $q = ((isset($q)) ? $q.",fascia3='$fascia3'" : "fascia3='$fascia3'");

    $fascia4 = $_POST['fascia4'];
    if($fascia4 != '')
    $q = ((isset($q)) ? $q.",fascia4='$fascia4'" : "fascia4='$fascia4'");

    $sql1 = "UPDATE servizi SET $q WHERE stazione = '$stazione' AND giorno = '$giorno'";
    $sql2 = "UPDATE soste SET $s WHERE stazione = '$stazione' AND giorno = '$giorno'";

    [/PHP]