campi obbligatori PHP

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
vorrei rendere i campi obbligatori ma non riesco in quanto anche se uno non completa tutti i campi viene inviata lo stesso la form e vorrei che questo non accadesse. Ecco il codice

<?php


if(!isset($_POST['sub'])) {
echo '<form method="post" action="#"><br/>
<h1>Dati personali</h1><br/>
Il sottoscritto <input type="text" name="sottoscritto"><br/><br/>
nato a <input type="text" name="dove"><br/><br/>
il <input type="text" name="data"><br/><br/>
Residente a <input type="text" name="residente"><br/><br/>
CAP <input type="text" name="cap"><br/><br/>
Prov <select>
<option value="verona">VR</option>
<option value="venezia">VE</option>
<option value="padova">PD</option>
<option value="belluno">BL</option>
<option value="rovigo">RO</option>
<option value="vicenza">VI</option>
<option value="treviso">TV</option>
</select>
via <input type="text" name="via"><br/><br/>
tel <input type="text" name="tel"><br/><br/>
cell <input type="text" name="tel"><br/><br/>

<input type="submit" value="Registrati" name="sub">
</form>';
}


else {

include 'config.php';
include 'connect.php';

$sottoscritto = $_POST['sottoscritto'];
$dove = $_POST['dove'];
$quando = $_POST['data'];
$query = "INSERT INTO iscrizioni (sottoscritto, dove, data) VALUES ('{$sottoscritto}','{$dove}','{$quando}');";
$result = mysql_query($query, $conn);

if (trim($sottoscritto)=="") {
print "Tutti i campi del form sono obbligatori...Torna indietro e inserisci il tuo nome!";
} elseif (trim($quando)=="") {
print "Tutti i campi del form sono obbligatori...Torna indietro e inserisci la data di nascita!";
} elseif (trim($dove)=="") {
print "Tutti i campi del form sono obbligatori...Torna indietro e inserisci dove sei nato!";
}

if(!$result) {
echo 'errore';

}

}

?>
grazie dell'aiuto
 
Ultima modifica:
Per scrivere codice nel forum ci sono dei codici appositi che facilitano la visualizzazione
inserisci tutto quel codice tra i tag [ PHP ] [ / PHP ] senza spazi.
 
ciao
prova in questo modo
PHP:
<?php
//..............
}else {
	unset($_POST['sub']);//elimini il post dal submit che comunque è pieno
	foreach($_POST as $chiave => $valore){
		if(trim($valore)==""){
			echo "attenzione: tutti i campi sono obbligatori";
			//e ritorni alla pagina pulita dopo 3 secondi (content='3 )
			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		}
	//e qui tutto il resto
}

?>

p.s.
hai usato il tag QUOTE non il PHP sulla stessa riga l'ultima iconcina (nell'ordine QUOTE HTML CODE PHP)
 
grazie mille lo script funziona infatti se i campi non sono compilati mi reinderizza però i dati vengono lo stessi scritti sul database.. perchè?

PHP:
<?php
	
	
	if(!isset($_POST['sub'])) {
		echo '<div id="form-iscrizione">
				<form method="post" action="#"><br/>
		
		Il sottoscritto <input type="text" name="sottoscritto"><br/><br/>
		nato a <input type="text" name="dove"><br/><br/>
		il  <input type="text" name="data"><br/><br/>
		Residente in <input type="text" name="residente">
			Prov <select>
  				<option value="verona">VR</option>
  				<option value="venezia">VE</option>
  				<option value="padova">PD</option>
 				<option value="belluno">BL</option>
				<option value="rovigo">RO</option>
				<option value="vicenza">VI</option>
				<option value="treviso">TV</option>
			 </select>  <br/><br/>
		via <input type="text" name="via"><br/><br/> 
		codice fiscale <input type="text" name="via"><br/><br/>
		
		in qualità rappresentante dell <br/><br/>  <input type="text" size="60" name="via"><br/><br/>
		con sede in <input type="text" size="35" name="via">
		Prov <select>
  				<option value="verona">VR</option>
  				<option value="venezia">VE</option>
  				<option value="padova">PD</option>
 				<option value="belluno">BL</option>
				<option value="rovigo">RO</option>
				<option value="vicenza">VI</option>
				<option value="treviso">TV</option>
			 </select>  <br/><br/>
			 via <input type="text" size="45" name="via">
			 N. <input type="text" size="5" name="via"><br/><br/> 
			 P.IVA <input type="text" size="45" name="via"><br/><br/>
			
			<p>CHIEDE</p> <p>a codesto spettabile Consiglio di Amministrazione di essere ammesso a far parte del Consorzio Autoscuole Bus-Car
			con sede in Verona Via Selenia 12, in qualità di socio.</p> <br/>
			<p>Dichiara di aver preso visione dello Statuto della Società e si impegna ad osservarne il contenuto; si impegna altresì ad osservare
			le deliberazioni degli organi sociali</p><br/>
		
		<input type="submit" value="Registrati" name="sub">
		</form></div>' ;
	}
		else {
	unset($_POST['sub']);
	foreach($_POST as $chiave => $valore){ 
		 if(trim($valore)==""){ 
		 	echo "<div id='centrale'> attenzione: il campo '$chiave' è obbligatoro</div>"; 
			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
		 }
	}
	include 'config.php';
	include 'connect.php';
	
	$sottoscritto = $_POST['sottoscritto'];
	$dove = $_POST['dove'];
	$quando = $_POST['data'];
	$query = "INSERT INTO iscrizioni (sottoscritto, dove, data) VALUES ('{$sottoscritto}','{$dove}','{$quando}');";
	$result = mysql_query($query, $conn);
	
	
 
	if(!$result) {		
		echo 'errore';			
	} 
	else {
		'<p>grazie per esserti registrato </p>';	
	}
		
}
	
?>
 
Ultima modifica:
ciao
alla tua prima domanda
E se invece di rendere tutti i campi obbligatori vorrei farne solo uno così potrebbe andare?
no
quando fai un foreach come quello che ti ho postato ricavi la chiave dell'array ed il suo valore (sia questa un array normale o superglobale)

quindi non devi leggere il valore (valore dell'elemento array con una data chiave) ma la chiave

quindi il tuo scrpt per rendere obbligatorio solo il campo data deve essere
PHP:
<?php
//....
}else {
    unset($_POST['sub']);//elimini il post dal submit che comunque è pieno
    foreach($_POST as $chiave => $valore){
        if(trim($valore)=="" && $chiave ="data"){//verifico che $_POST['data'] non abbia valore vuoto
            echo "attenzione: il campo $chiave è obbligatorio";//in questo caso  'data'
            //e ritorni alla pagina pulita dopo 3 secondi (content='3 )
            echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
        }
    //e qui tutto il resto
}
//...
?>
per il secondo do un occhio poi ti so dire
 
ciao
stavo guardando un po' il tuo script.
da quello che capisco tu salvi in una tabella del db i cami da input.
guarda che inseriti così brutalmente è abbastanza rischioso soprattutto quelli che inputa l'utente, o comunque possono darti notevoli fastidi.
ti faccio un esempio
<input type="text" name="sottoscritto">
se l'utente (anche se onesto e non vuole crearti danni, si chiama De' Sanctis, quando vai ad inserire nel db quell'apostrofo ti provoca il caos
altro, chiedi la data di nascita
<input type="text" name="data">
lo stesso utente può scrivere 10.01.1999 o 10/1/99 o 10 gennaio 1999 o in altra qualsiasi maniera con cui si può scrivere un data
e questo considerando un utente che non ti vuole male.
secondo me è da rivedere un po' tutto.
se hai pazienza in settimana prossima cominciamo a darci un occhio meglio
 
Qualche tempo fa (quando ancora non usavo framework e librerie varie) avrei fatto così:
PHP:
<?php
function processErrors(array $errors)
{
    if (!empty($errors)) {
        echo <<<'EOF'
<p>Si sono verificati i seguenti errori:</p>
<ul>
EOF;

        foreach ($errors as $err) {
            echo <<<EOF
    <li>{$err}</li>
EOF;
        }

        echo <<<EOF
</ul>
<p><a href="{$_SERVER['REQUEST_URI']}">Torna indietro</a></p>
EOF;
    }
}

// metti qui la connessione al database
// ...

if ('POST' === $_SERVER['REQUEST_METHOD']) {
    $errors = array();

    $sottoscritto = isset($_POST['sottoscritto']) ? trim($_POST['sottoscritto']) : '';
    $dove         = isset($_POST['dove'])         ? trim($_POST['dove'])         : '';
    $quando       = isset($_POST['quando'])       ? trim($_POST['quando'])       : '';

    if ($sottoscritto == '') {
        $errors[] = 'Non hai inserito il tuo nome.';
    }

    if ($dove == '') {
        $errors[] = 'Non hai inserito il tuo luogo di nascita.';
    }

    if ($quando == '') {
        $errors[] = 'Non hai inserito la tua data di nascita.';
    }

    processErrors($errors);

    $sql = "INSERT INTO iscrizioni (sottoscritto, dove, data) VALUES('%s', '%s', '%s')";
    $sql = sprintf($sql, addslashes($sottoscritto), addslashes($dove), addslashes($quando));

    $query = mysql_query($sql) or die(mysql_error());
} else {
    echo <<<EOF
<form method="post" action="#">
    <h1>Dati personali</h1>
    Il sottoscritto <input type="text" name="sottoscritto"><br><br>
    nato a <input type="text" name="dove"><br><br>
    il <input type="text" name="data"><br><br>
    Residente a <input type="text" name="residente"><br><br>
    CAP <input type="text" name="cap"><br><br>
    Prov <select>
        <option value="verona">VR</option>
        <option value="venezia">VE</option>
        <option value="padova">PD</option>
        <option value="belluno">BL</option>
        <option value="rovigo">RO</option>
        <option value="vicenza">VI</option>
        <option value="treviso">TV</option>
    </select>
    via <input type="text" name="via"><br/><br/>
    tel <input type="text" name="tel"><br/><br/>
    cell <input type="text" name="tel"><br/><br/>

    <input type="submit" value="Registrati">
</form>
EOF;
}
?>
 
Grazie mille ragazzi funziona tutto!! Ale potresti spiegrami quando puoi come funziona l'EOF?
 
pensavo di aver risolto e invece no.. Se non complio i campi richiesti si vede correttamente il messaggio di errore però i dati venogono lo stesso scritti sul DB. Come posso fare?

PHP:
 <?php

function processErrors(array $errors)
{
    if (!empty($errors)) {
  
     ?>
    <br/>
      <p>Si sono verificati i seguenti errori:</p>
      <ul>
        <?php

        foreach ($errors as $err) {
          ?>
        <li> <?php echo $err ?> </li>
        <?php 
        }

      ?>
      </ul>
   
    <?php 
echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    }
}



// metti qui la connessione al database
// ...
include 'config.php';
include 'connect.php';
?>
<div id="centrale">
<?php 
if ('POST' === $_SERVER['REQUEST_METHOD']) {
    $errors = array();

    $sottoscritto = isset($_POST['sottoscritto']) ? trim($_POST['sottoscritto']) : '';
    $dove         = isset($_POST['dove'])         ? trim($_POST['dove'])         : '';
    $quando       = isset($_POST['quando'])       ? trim($_POST['quando'])       : '';

    if ($sottoscritto == '') {
        $errors[] = 'Non hai inserito il tuo nome.';
    }

    if ($dove == '') {
        $errors[] = 'Non hai inserito il tuo luogo di nascita.';
    }

    if ($quando == '') {
        $errors[] = 'Non hai inserito la tua data di nascita.';
    }

    processErrors($errors);

    $sql = "INSERT INTO iscrizioni (sottoscritto, dove, data) VALUES('%s', '%s', '%s')";
    $sql = sprintf($sql, addslashes($sottoscritto), addslashes($dove), addslashes($quando));

    $query = mysql_query($sql) or die(mysql_error());
	?>
   
    <?php
} else {
   ?>
   <div id="form-iscrizione">
      <form method="post" action="#">
        <br/>
        Il sottoscritto
        <input type="text" name="sottoscritto">
        <br/>
        <br/>
        nato a
        <input type="text" name="dove">
        <br/>
        <br/>
        il
        <input type="text" name="data" value="gg" size="3">
        <input type="text" name="data" value="mm" size="3">
        <input type="text" name="data" value="aa" size="5">
        <br/>
        <br/>
        Residente in
        <input type="text" name="residente">
        Prov
        <select>
          <option value="verona">VR</option>
          <option value="venezia">VE</option>
          <option value="padova">PD</option>
          <option value="belluno">BL</option>
          <option value="rovigo">RO</option>
          <option value="vicenza">VI</option>
          <option value="treviso">TV</option>
        </select>
        <br/>
        <br/>
        via
        <input type="text" name="via">
        <br/>
        <br/>
        codice fiscale
        <input type="text" name="via">
        <br/>
        <br/>
        in qualità rappresentante dell <br/>
        <br/>
        <input type="text" size="60" name="via">
        <br/>
        <br/>
        con sede in
        <input type="text" size="35" name="via">
        Prov
        <select>
          <option value="verona">VR</option>
          <option value="venezia">VE</option>
          <option value="padova">PD</option>
          <option value="belluno">BL</option>
          <option value="rovigo">RO</option>
          <option value="vicenza">VI</option>
          <option value="treviso">TV</option>
        </select>
        <br/>
        <br/>
        via
        <input type="text" size="45" name="via">
        N.
        <input type="text" size="5" name="via">
        <br/>
        <br/>
        P.IVA
        <input type="text" size="45" name="via">
        <br/>
        <br/>
        <p>CHIEDE</p>
        <p>a codesto spettabile Consiglio di Amministrazione di essere ammesso a far parte del Consorzio Autoscuole Bus-Car
          con sede in Verona Via Selenia 12, in qualità di socio.</p>
        <br/>
        <p>Dichiara di aver preso visione dello Statuto della Società e si impegna ad osservarne il contenuto; si impegna altresì ad osservare
          le deliberazioni degli organi sociali</p>
        <br/>
        <input type="submit" value="Registrati" name="sub">
      </form>
   </div>
    <?php } ?>
 
ciao
prova a mettere exit()

PHP:
<?php
function processErrors(array $errors)
{
    if (!empty($errors)) {
    echo "<br/><p>Si sono verificati i seguenti errori:</p><ul>";
    foreach ($errors as $err) {
		echo "<li> $err </li>";> 
     }
	echo "</ul>";
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	exit();//qui
    }
}
//ecc....
poi ci do un occhio meglio e spero di saperti dire
 
ciao
ti passo un'altra soluzione se l'exit non funzia
PHP:
<?php
function processErrors(array $errors){
    if (!empty($errors)) {
    echo "<br/><p>Si sono verificati i seguenti errori:</p><ul>";
    	foreach ($errors as $err) {
			echo "<li> $err </li>";> 
     	}
		echo "</ul>";
		return FALSE;
    }else{
		return TRUE;
	}
}
// metti qui la connessione al database
// ...
include 'config.php';
include 'connect.php';
echo "<div id=\"centrale\">";
if ('POST' === $_SERVER['REQUEST_METHOD']) {
    $errors = array();
    $sottoscritto = isset($_POST['sottoscritto']) ? trim($_POST['sottoscritto']) : '';
    $dove         = isset($_POST['dove'])         ? trim($_POST['dove'])         : '';
    $quando       = isset($_POST['quando'])       ? trim($_POST['quando'])       : '';
    if ($sottoscritto == '') {$errors[] = 'Non hai inserito il tuo nome.';}
    if ($dove == '') {$errors[] = 'Non hai inserito il tuo luogo di nascita.';}
    if ($quando == '') {$errors[] = 'Non hai inserito la tua data di nascita.';}
    if(processErrors($errors)){//per true
    	$sql = "INSERT INTO iscrizioni (sottoscritto, dove, data) VALUES('%s', '%s', '%s')";
    	$sql = sprintf($sql, addslashes($sottoscritto), addslashes($dove), addslashes($quando));
    	$query = mysql_query($sql) or die(mysql_error());
	}else{//per false
		 echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
	}
} else {
echo <<< EOD
   <div id="form-iscrizione">
      <form method="post" action="#">
        <br/>
        Il sottoscritto
        <input type="text" name="sottoscritto">
        <br/>
        <br/>
        nato a
        <input type="text" name="dove">
        <br/>
        <br/>
        il
        <input type="text" name="data" value="gg" size="3">
        <input type="text" name="data" value="mm" size="3">
        <input type="text" name="data" value="aa" size="5">
        <br/>
        <br/>
        Residente in
        <input type="text" name="residente">
        Prov
        <select>
          <option value="verona">VR</option>
          <option value="venezia">VE</option>
          <option value="padova">PD</option>
          <option value="belluno">BL</option>
          <option value="rovigo">RO</option>
          <option value="vicenza">VI</option>
          <option value="treviso">TV</option>
        </select>
        <br/>
        <br/>
        via
        <input type="text" name="via">
        <br/>
        <br/>
        codice fiscale
        <input type="text" name="via">
        <br/>
        <br/>
        in qualità rappresentante dell <br/>
        <br/>
        <input type="text" size="60" name="via">
        <br/>
        <br/>
        con sede in
        <input type="text" size="35" name="via">
        Prov
        <select>
          <option value="verona">VR</option>
          <option value="venezia">VE</option>
          <option value="padova">PD</option>
          <option value="belluno">BL</option>
          <option value="rovigo">RO</option>
          <option value="vicenza">VI</option>
          <option value="treviso">TV</option>
        </select>
        <br/>
        <br/>
        via
        <input type="text" size="45" name="via">
        N.
        <input type="text" size="5" name="via">
        <br/>
        <br/>
        P.IVA
        <input type="text" size="45" name="via">
        <br/>
        <br/>
        <p>CHIEDE</p>
        <p>a codesto spettabile Consiglio di Amministrazione di essere ammesso a far parte del Consorzio Autoscuole Bus-Car
          con sede in Verona Via Selenia 12, in qualità di socio.</p>
        <br/>
        <p>Dichiara di aver preso visione dello Statuto della Società e si impegna ad osservarne il contenuto; si impegna altresì ad osservare
          le deliberazioni degli organi sociali</p>
        <br/>
        <input type="submit" value="Registrati" name="sub">
      </form>
   </div>
EOD;
}
?>
p.s.
cerca di non entrare uscire da php tante volte, lo script viene più pulito
 
il secondo con il return TRUE perchè l'exit non funzionava neanche con tutti i campi compilati
 

Discussioni simili