Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17

    controllo checkbox e campo testo

    Ciao ragazzi, ho un dubbio su come fare un controllo, mi spiego meglio:
    ho un form con vari campi, il mio problema riguarda però un campo checkbox e un campo testo.
    Io vorrei che se il campo checkbox è selezionato e il campo testo è pieno la query venga inviata, mentre se il campo checkbox è selezionato e il campo testo no mi venga stampato un echo di errore, se invece lascio tutto vuoto vorrei che la query venisse eseguita per il resto dei campi di testo.
    spero di non aver fatto confusione, comunque vi posto il mio codice

    form.php
    Codice PHP:

    </br>
    <
    form action="form_insert.php" method="POST"
    [
    b]In prestito [/b]<INPUT type="CHECKBOX" name="prestito" value="Si" > &nbsp a &nbsp <INPUT type="TEXT" name="a" maxlength="30" size="20" value="">

    </
    br
    insert.php
    Codice PHP:
    <?php
    include ("connetti.php");

    //Esempio di Recupero di dati usando protezione contro sql_injection
    $titolo mysql_real_escape_string (htmlentities($_POST["titolo"]));
    $prestito mysql_real_escape_string (htmlentities(isset($_POST["prestito"]))); 
    $a mysql_real_escape_string (htmlentities($_POST["a"]));
     
    //Effettua la query sql INSERT INTO
    $query "INSERT INTO  `test` ( `titolo`, `prestito`, `a`) VALUES ( '$titolo', '$prestito', '$a')";
    //Eseguo un controllo su alcune caselle, se sono vuote mostro un errore
    if ($_POST['titolo'] == NULL /*|| $_POST['regia'] == NULL || $_POST['note'] == NULL*/) {
                    echo 
    "Dati mancanti";
                } else {
    if (isset(
    $_POST['prestito'])) {if(empty($_POST['a'])) {echo "[b]Errore: Riempi il campo a[/b]";
    header"refresh: 3; url=form_insert.php" );}}}

    //Esegue la query
    $result=mysql_query($query)
    or die(
    "Query non eseguita, è possibile che uno o più dati siano già stati inseriti nel database");

    //Stampa a video i dati inseriti e da conferma dell'inserimento
    echo "<h1>Riepilogo dei dati inseriti</h1>";
    echo 
    "I dati sono stati inseriti correttamente.
    "
    ;
    header"refresh: 3; url=leggi.php" );
    mysql_close();

    ?>
    il codice che ho scritto fino ad ora non funziona bene perchè quando mi stampa a video l'echo "Errore: Riempi il campo a" non dovrebbe essere eseguita nessuna operazione a parte il redirect dopo 3 secondi alla pagina form_insert.php ma in realtà quello che avviene è la stampa a video dell'errore e sotto la conferma dell'inserimento dei record nel database.
    spero di essermi spiegato bene.
    Grazie in anticipo a tutti quelli che avranno voglia di capire con me come risolvere il problema!

  2. #2
    Il primo errore che vedo è che richiami la variabile $_POST['titolo'] che nel form che hai postato non è settata, ma è settata la variabile 'a'.
    Secondo, se anche il testo fosse vuoto non verrebbe ritornato NULL bensì "".
    Per sicurezza stampa a video le variabili che ti interessano. Stampa la variabile $_POST['titolo'] e vedi cosa ti da. Se non ricevi quello che dovresti ricevere allora il problema sta' lì.
    Nei problemi con l'invio di dati tramite post (e non solo) consiglio sempre di stampare a video i dati ricevuti per avere una prova tangibile di non aver sbagliato a scrivere o magari cercare di recuperare una variabile inesistente.
    Ce l'ho fatta! - ItalianPixel -

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    ciao portapipe e grazie per la risposta, dunque, l'errore che hai notato nel forum fortunatamente è solo un errore di copia incolla, siccome il form.php originale ha molti campi testo volevo alleggerirlo prima di postarlo ma poi ho dimenticato di rimettere il form titolo.
    per quanto riguarda il consiglio di stampare a video i dati ho provato usando echo "$prestito $a"; e ho ricevuto la conferma dei dati inseriti, poi ho ripetuto l'operazione selezionando solo la checkbox prestito e lasciando vuoto il campo a, in questo caso ho ricevuto "si" (che poi è il value del form prestito) più la conferma dei dati inseriti, la terza volta ho provato cliccando la checkbox e scrivendo ciao nel form a, il risultato è stato "si ciao" più la conferma dei dati inseriti.
    quindi teoricamente dovrebbe andare tutto bene, però continua a stamparmi la conferma dei dati inseriti anche nel secondo caso, quando vorrei che stampasse solo l'errore "Errore: Riempi il campo a". secondo te cosa sbaglio?

    Comunque ho controllato il discorso del NULL, e quindi ho fatto varie prove, ho scoperto con dispiacere che lasciando il form testo vuoto il messaggio di errore Dati mancanti compare, però anche in questo caso mi ritorna il messaggio di conferma dati inseriti e se vado a verificare nel database ho effettivamente il campo testo vuoto, quindi a questo punto immagino di dover riaffrontare la questione daccapo perchè mi pare di aver sbagliato un pò troppe cose.

    Il dubbio che mi è venuto ora però è, nidificare gli if come ho fatto è corretto o ci sono altri metodi che non conosco e non vale la pena perderci la testa? se ci sono altri metodi potete farmi un esempio?
    per ora grazie a portapipe per le dritte

  4. #4
    Nidificare gli if non è problematico ma può portare confusione.
    Sarebbe sempre meglio non nidificarli se non necessario.
    Codice PHP:
    //Eseguo un controllo su alcune caselle, se sono vuote mostro un errore 
    if ($_POST['titolo'] == "" /*|| $_POST['regia'] == NULL || $_POST['note'] == NULL*/) { 
       echo 
    "Dati mancanti"
    }else{ 
       if (isset(
    $_POST['prestito'])) {
          if(
    $_POST['a']=="") {
             echo 
    "[b]Errore: Riempi il campo a[/b]"
             
    header"refresh: 3; url=form_insert.php" );
          }
       }

    Ricapitolando:
    1. se POST titolo è uguale a "" ritorna errore altrimenti
    2. se è settato POST prestito esegui:
    3. se a è uguale a "" mostra messaggio errore e redirect

    Qui però non vedo una cosa: come fa a sapere il sistema se ci sono stati errori o meno?
    Il codice continuerà e sarà inevitabile che scriva a video ciò che è scritto di seguito, tra cui anche:
    Codice PHP:
    //Stampa a video i dati inseriti e da conferma dell'inserimento 
    echo "<h1>Riepilogo dei dati inseriti</h1>"
    echo 
    "I dati sono stati inseriti correttamente.
    "

    Dovresti fare un controllo. Se, ad esempio, la variabile i è uguale a 1 ci saranno degli errori, se uguale a 0 è tutto ok.
    Esempio:

    Codice PHP:
    //Settiamo la variabile i uguale a 0 perché non ci sono errori fino ad ora
    $i=0;
    //Eseguo un controllo su alcune caselle, se sono vuote mostro un errore 
    if ($_POST['titolo'] == "" /*|| $_POST['regia'] == NULL || $_POST['note'] == NULL*/) { 
       echo 
    "Dati mancanti"
       
    $i=1;
    }else{ 
       if (isset(
    $_POST['prestito'])) {
          if(
    $_POST['a']=="") {
             echo 
    "[b]Errore: Riempi il campo a[/b]"
             
    header"refresh: 3; url=form_insert.php" );
             
    $i=1;
             
    //Qui potresti mettere un exit(); perché fai un redirect
          
    }
       }
    }

    //Dopodiché se non ci saranno errori scriveremo a video:
    if($i==0){
       echo 
    "<h1>Riepilogo dei dati inseriti</h1>"
       echo 
    "I dati sono stati inseriti correttamente.
    "
    ;

    Capito il ragionamento?

    Consiglio: vai a capo correttamente, il codice ti sarà più facile da leggere.
    PHP non legge gli accapi e i tab quindi crea il codice più leggibile e ordinato possibile e diminuiranno gli errori (o comunque saranno visualizzabili meglio).
    Ce l'ho fatta! - ItalianPixel -

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    nel frattempo ci ho lavorato e forse ho risolto:
    Codice PHP:
    //Effettua la query sql INSERT INTO
    $query "INSERT INTO  `testradio` ( `titolo`, `regia`, `produzione`, `durata`, `supporto`, `prestito`, `a`, `radio`, `giudizio`, `barcode`, `note`) VALUES ( '$titolo', '$regia', '$produzione', '$durata', '$supporto', '$prestito', '$a', '$radio', '$giudizio', '$barcode', '$note')";
    //Eseguo un controllo su alcune caselle, se sono vuote mostro un errore
    if ($_POST["titolo"]== "") echo ("Non hai inserito il titolo!!!");
    elseif ((isset(
    $_POST["prestito"])) &&  ($_POST["a"]=="")) echo ("Fermo, inserisci il campo a!");
    //else{
    else {
    //Esegue la query
    $result=mysql_query($query)
    or die(
    "Query non eseguita, è possibile che uno o più dati siano già stati inseriti nel database");
    //Stampa a video i dati inseriti e da conferma dell'inserimento
    echo "<h1>Riepilogo dei dati inseriti</h1>";
    echo 
    "I dati sono stati inseriti correttamente.
    "
    ;
    //redirect opzionale php con secondi
    header"refresh: 3; url=leggi.php" );
       
    mysql_close();

    ma poi mi sono accorto che hai postato una soluzione, quindi ora leggo meglio perchè il dis

  6. #6
    Com'è andata?
    Ce l'ho fatta! - ItalianPixel -

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    ciao, scusa l'assenza ma la mia chiavetta non voleva più saperne di connettersi... comunque, alla fine ho optato per il tuo metodo perchè mi piaceva di più il discorso del controllo con la variabile $i rispetto a quello che avevo fatto io, quindi, grazie a portapipe!

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    Provo a postare il file insert.php

    [PHP]
    <?php
    include ("connect.php");
    $titolo = mysql_real_escape_string (htmlentities($_POST["titolo"]));
    $prestito = mysql_real_escape_string (htmlentities(isset($_POST["prestito"]))) ? $_POST["prestito"] : '';
    $a = mysql_real_escape_string (htmlentities($_POST["a"]));

    //Effettua la query sql INSERT INTO
    $query = "INSERT INTO `test` ( `titolo`, `prestito`, `a`) VALUES ( '$titolo','$prestito', '$a' )";
    //Settiamo la variabile i uguale a 0 perché non ci sono errori fino ad ora
    $i=0;
    //Eseguo un controllo su alcune caselle, se sono vuote mostro un errore
    if ($_POST['titolo'] == "") {
    echo "Dati mancanti";
    $i=1;
    }else{
    if (isset($_POST['prestito'])) {
    if($_POST['a']=="") {
    echo "Errore: Riempi il campo a";
    header( "refresh: 3; url=form_insert.php" );
    $i=1;
    exit();
    //Qui potresti mettere un exit(); perché fai un redirect
    }
    }
    }
    //Dopodiché se non ci saranno errori scriveremo a video:
    if($i==0){
    //Esegue la query
    $result=mysql_query($query)
    or die("Query non eseguita, è possibile che uno o pi

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    niente da fare, oggi proprio non riesco ad avere una buona connessione, comunque tutto quello che serve è già nei post precedenti.
    ciao a tutti!

  10. #10
    Sono contento che hai risolto.
    Buona continuazione per il tuo lavoro
    Ce l'ho fatta! - ItalianPixel -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.