• User Newbie

    Select con IF

    Ciao a Tutti,
    Ho un problema per quanto riguarda la SELECT in sql.
    Vorrei sapere come fare delle select con dentro una scelta tra 2 possibili valori.
    Mi spiego meglio.
    Io tramite html mi importo i valori dei vari form e ne faccio una select come segue:

    [PHP]mysql_select_db("biblioteca") or exit ("Errore nell'apertura del database");
    $mate=$_POST['materia'];
    $classe=$_POST['class'];
    $codice=$_POST['codisbn'];
    $titolo=$_POST['titolo'];
    $autori=$_POST['autori'];
    $editore=$_POST['editore'];

    $sqlcmd="SELECT * FROM libro WHERE ((Materia_Disciplina LIKE '%$mate%') and (Classe_Sezione LIKE '%$classe%') and (codice_volume LIKE '%$codice%') and (Titolo_Sottotitolo LIKE '%$titolo%') and (Autore1_Autore2_Autore3 LIKE '%$autori%') and (Editore LIKE '%$editore%'))";

    $risultato=mysql_query($sqlcmd) or die (mysql_error());
    if (! $risultato) exit ("Erorre nel comando SELECT");

    $riga=mysql_fetch_array($risultato);
    while ($riga)
    {
    $id=$riga['IDLibro'];
    $mate=$riga['Materia_Disciplina'];
    $classe=$riga['Classe_Sezione'];
    $codice=$riga['codice_volume'];
    $titolo=$riga['Titolo_Sottotitolo'];
    $autori=$riga['Autore1_Autore2_Autore3'];
    $editore=$riga['Editore'];
    $volume=$riga['Volume'];
    $prezzo=$riga['Prezzo'];

    echo "$id, $classe, $mate, $codice, $autori ,$titolo, $volume, $editore, $prezzo <br>";
    echo "<br>";

    $riga = mysql_fetch_array($risultato);
    }

    ?>[/PHP]
    Nella stessa pagina creo un altra tabella dove inserire i NUOVI dati---
    [HTML]<P><CENTER>INSERIRE L'ID LIBRO E I RELATIVI NUOVI CAMPI</CENTER></P>
    <FORM ACTION=PERCORSO.php METHOD=POST>

    <TABLE BORDER=3>
    <tr>
    <td>MATERIA </td><td COLSPAN=1><INPUT TYPE=text NAME="materia" MAXLENGTH=20 SIZE=21></td>
    <td>CLASSE E SEZIONE </td><td COLSPAN=1><INPUT TYPE=text NAME="class" MAXLENGTH=20 SIZE=21></td>
    <TR>
    <td>CODICE ISBN </td><td><INPUT TYPE=text NAME="codisbn" MAXLENGTH=13 SIZE=14></td>
    <td>TITOLO </td><td><INPUT TYPE=text NAME="titolo" MAXLENGTH=50 SIZE=21></td>
    <tr>
    <TD>AUTORI </td><TD><INPUT TYPE=text NAME="autori" MAXLENGTH=250 SIZE=51></td>
    <td>PREZZO UNITARIO</td><td><INPUT TYPE=text NAME="prezzoun" MAXLEGHT=4 SIZE=5></td>
    <tr>
    <td>EDITORE </td><td><INPUT TYPE=text NAME="editore" MAXLENGTH=20 SIZE=21></td>
    <td>NUMERO DI COPIE </td><td><INPUT TYPE=text NAME="dispon" MAXLENGTH=2 SIZE=3></td>
    <TR>
    <td>VOLUME </td><td><INPUT TYPE=text NAME="volu" MAXLENGTH=1 SIZE=1></td>
    <td>IDLIBRO (obbligatorio) </td><td COLSPAN=1><INPUT TYPE=text NAME="id" MAXLENGTH=3 SIZE=3></td>
    <TD COLSPAN=4>
    <CENTER>
    <INPUT TYPE=submit VALUE="modifica"> <INPUT type="reset">
    </CENTER>[/HTML]

    Con questo creo un form dove inserito l'id della chiave primaria e i vari campi, si connette al DB e va a MODIFICARE i campi tramite questo codice:

    [PHP]$id=$_POST['id'];
    $mate=$_POST['materia'];
    $classe=$_POST['class'];
    $codice=$_POST['codisbn'];
    $titolo=$_POST['titolo'];
    $autori=$_POST['autori'];
    $editore=$_POST['editore'];

    $sqlcmd="UPDATE libro SET ((Classe_Sezione = '$classe') (Materia_Disciplina = '$mate') WHERE id = '$id')";

    $risultato=mysql_query($sqlcmd) or die (mysql_error());

    if (! $risultato) exit ("Erorre nel comando SELECT");[/PHP]

    Il problema è che se NON tutti i campi sono pieni mi va a inserire nel DB spazi vuoti, per questo nel comando UPDATE vorrei mettere una condizione dove: nel caso l'utente ha lasciato un campo vuoto, non modifica quel campo nel DB!
    :arrabbiato:

    Spero che qualcuno possa aiutarmi in fretta.
    Grazie a Tutti 😄


  • User Attivo

    Puoi provare semplicemente così:
    [php]
    foreach($_POST as $postvars){
    if(empty($postvars)) {die ("Hai lasciato un campo vuoto!");}
    }
    [/php]
    Questa soluzione è scomoda perchè, nel caso non vuoi rendere tutti i campi obbligatori, ti darà lo stesso errore...
    Ti propongo quindi un'altra soluzione, che ho tratto da un mio script:
    [php]
    $error = "";//$error, variabile vuota se non si verificano errori
    #######################################
    #####GESTIONE DEGLI ERRORI#############
    #######################################
    /*
    Sfrutta $error[] per riempire l'array
    */
    if(isset($_POST['submit'])) {
    if(empty($_POST['u_user'])) { $error[] = "Non hai riempito il campo <b>Username</b>!"; }
    if(empty($_POST['u_pass'])) { $error[] = "Non hai riempito il campo <b>Password</b>!"; }
    if(empty($_POST['gg'])) { $error[] = "Non hai riempito il campo <b>Giorno di nascita</b>!"; }
    if(empty($_POST['mm'])) { $error[] = "Non hai riempito il campo <b>Mese di nascita</b>!"; }
    if(empty($_POST['aaaa'])) { $error[] = "Non hai riempito il campo <b>Anno di nascita</b>!"; }
    if(empty($_POST['u_nome'])) { $error[] = "Non hai riempito il campo <b>Nome!</b>"; }
    if(empty($_POST['u_cognome'])) { $error[] = "Non hai riempito il campo <b>Cognome</b>!"; }
    if(empty($_POST['s_mail'])) { $error[] = "Non hai riempito il campo <b>E-Mail</b>!"; }
    if(empty($_POST['stato'])) { $error[] = "Non hai riempito il campo <b>Stato</b>!"; }
    if((!empty($_POST['s_url'])) AND (substr($_POST['s_url'],0,6) == "http://")){
    if(!checkurl($_POST['s_url'])) { $error[] = "L ' <b>URL</b> da te inserito non è valido!"; }
    }else{
    }
    if(!checkmail($_POST['s_mail'])){ $error[] = "La <b>E-Mail</b> da te inserita non è valida!";}
    if(!checkuser($_POST['u_user'])){ $error[] = "L '<b>UserName</b> da te inserito contiene caratteri non validi!";}
    if(!checkuser($_POST['u_pass'])){ $error[] = "La <b>Password</b> da te inserita contiene caratteri non validi!";}
    if(!(strlen($_POST['u_pass']) != 4)){$error[] = "La <b>Password</b> deve essere composta da almeno 4 caratteri!";}
    if(!checkuser($_POST['u_nome'])){ $error[] = "Il <b>Nome</b> da te inserito contiene caratteri non validi!";}
    if(!checkuser($_POST['u_cognome'])){$error[] = "Il <b>Cognome</b> da te inserito contiene caratteri non validi!";}
    if(!is_numeric($_POST['mm'])) { $error[] = "Il campo <b>Giorno</b> deve essere numerico!"; }//Controllo pressapoco inutile, ma nel caso si manomettessero i dati mandati via post, può rivelarsi utile..
    if(!is_numeric($_POST['gg'])) { $error[] = "Il campo <b>Mese</b> deve essere numerico!"; }
    if(!is_numeric($_POST['aaaa'])) { $error[] = "Il campo <b>Anno</b> deve essere numerico!"; }
    if(!empty($error)){
    echo "<font color="red">ATTENZIONE!</font><br>\nSono stati riscontrati i seguenti errori: \n<br>\n";

    foreach($error as $err){
    echo "<font color="red">".$err."</font><br>\n";//Fa un echo di ogni errore
    }

    } else {
    ecc....
    }
    [/php]

    Praticamente, ad ogni errore riscontrato, riempe un array e, tramite foreach, fa un echo di ogni errore....


  • User Newbie

    Si, a me però servirebbe che dopo aver inviato i dati nel form in cui NESSUN dato è obbligatorio, si debba fare un UPLOAD nella tabella modificando SOLO i dati inseriti e lasciando intatti i campi in cui nn è stato inserito nulla.

    Forse il tuo script è giusto, ma se lo è io non ho capito nulla 😄