• User Attivo

    Modificare campi tabella solo in caso di dati presenti

    Salve a voi tutti..inserisco il codice perchè credo sia piu facile da spiegare..

    Mi recupero questo valori da un form modificadati.php

    [php]
    //recupero i valori dal form
    $cdescrizione = $_POST['descrizione'];
    $ccomune = $_POST['comune'];
    $cnome = $_POST['nome'];

    //query al database

    $strsql="UPDATE iscritti SET descrizione ='$cdescrizione',comune ='$ccomune',nome ='$cnome' WHERE nickname='".$_SESSION['nickname']."'";

    [/php]In questo modo se l utente non compila uno dei campi succede che la query va a sovrascrivere il campo non compilato con un bel campo vuoto....io invece devo fare in modo che se il campo che recupero dl form e vuoto non deve effettuare nessun cambiamento di quel campo nel database..
    Avevo pensato questo controllo allora...
    [php]
    if($_POST['descrizione'] == ''){

    exit;

    }

    else{

    $cdescrizione = $_POST['descrizione'];}

    if($_POST['nome'] == ''){

    exit;

    }

    else{

    $cnome = $_POST['nome'];}

    if($_POST['comune'] == ''){

    exit;

    }

    else{

    $ccomune = $_POST['comune'];}

    //query al database

    $strsql="UPDATE iscritti SET descrizione ='$cdescrizione',comune ='$ccomune',nome ='$cnome' WHERE nickname='".$_SESSION['nickname']."'";

    [/php]Cambiando in questo modo succede che mi funziona solo se io modifico tutti e tre campi...mentre se non compilo uno dei campi la query al database non mi da nessun cambiamento...non effettua nessuna modifica..rimane tutto identico...dove sbaglio?

    Grazie


  • User Attivo

    Non esegue modifiche perchè se non inserisci un dato, la funzione exit; termina l'esecuzione dello script php.
    Prova in questo modo:

    [php]
    $desc = $_POST['descrizione'];
    $com = $_POST['comune'];
    $nome = $_POST['nome'];

    $strsql = "UPDATE iscritti SET ";

    if($desc != ''){
    $strsql .= "descrizione = '$desc'";
    }

    if($com != ''){
    if($desc != '')
    $strsql .= ", comune = '$com'";
    else
    $strsql .= "comune = '$com'";
    }

    if($nome != ''){
    if(($desc != '')||($com != ''))
    $strsql .= ", nome = '$nome'";
    else
    $strsql .= "nome = '$nome'";
    }

    $strsql .= " WHERE nickname='" . $_SESSION['nickname']."'";

    echo $strsql;
    [/php]Ciao!


  • User Attivo

    Grazie..funziona benissimo!;)
    Siccome ho altri campi da controllare mi spiegheresti cortesemente alcuni dei passaggi che hai fatto nello script?Giusto per capire...cosi' vedo se riesco da solo...ho già provato a interpretare ma alcune cose mi sfuggono..

    Grazie


  • User Attivo

    Così come è impostato, lo script compila la query inserendo solo i valori che sono diversi dal vuoto.
    In questo caso la prima informazione, "descrizione", se presente viene inserita subito senza controlli eccessivi.
    Successivamente "comune", per essere inserito, deve controllare se "descrizione" è stato inserito, per poter aggiungere la virgola di separazione dei campi.
    Più campi ci sono, più controlli devi fare.

    Adesso che mi ci fai pensare, lo script può essere semplificato in questo modo, soprattutto per adattarlo alla verifica di molti campi:

    [php]
    $desc = $_POST['descrizione'];
    $com = $_POST['comune'];
    $nome = $_POST['nome'];

    $virgola = false;

    $strsql = "UPDATE iscritti SET ";

    if($desc != ''){
    $strsql .= "descrizione = '$desc'";
    $virgola = true;
    }

    if($com != ''){
    if($virgola)
    $strsql .= ", comune = '$com'";
    else
    {
    $strsql .= "comune = '$com'";
    $virgola = true;
    }
    }

    if($nome != ''){
    if($virgola)
    $strsql .= ", nome = '$nome'";
    else
    {
    $strsql .= "nome = '$nome'";
    $virgola = true;
    }
    }

    $strsql .= " WHERE nickname='" . $_SESSION['nickname']."'";

    echo $strsql;
    [/php]In questo caso la variabile $virgola ha il compito di verificare se il campo precedente è stato inserito e quindi determinare se va aggiunta la virgola di separazione.

    Ciao!