campi obbligatori PHP

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:

Komix

Nuovo Utente
18 Mar 2012
8
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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)
 

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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;
}
?>
 

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
Grazie mille ragazzi funziona tutto!! Ale potresti spiegrami quando puoi come funziona l'EOF?
 

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
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 } ?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
il secondo con il return TRUE perchè l'exit non funzionava neanche con tutti i campi compilati
 
Discussioni simili
Autore Titolo Forum Risposte Data
L Campi obbligatori form php PHP 0
X [PHP] campi obbligatori multiupload non funziona PHP 6
E [PHP] mail inviata anche con campi obbligatori non compilati PHP 9
S Come impostare campi non obbligatori php PHP 5
R [Javascript] Togliere Campi obbligatori Javascript 7
S Form con campi obbligatori PHP 41
M Form:convalidare campi obbligatori.... PHP 7
L Form - Tutti i campi obbligatori Javascript 10
T Campi obbligatori e chiavi primarie PHP 11
D campi obbligatori Classic ASP 0
I Campi obbligatori in un form in flash Flash 6
E Window.print() solo se campi obbligatori compilati Javascript 6
sbobby Campi obbligatori! PHP 1
M Campi obbligatori nel form mail PHP 1
S rendere campi form obbligatori Javascript 1
O campi obbligatori in un modulo HTML e CSS 4
G Disposizione campi HTML e CSS 6
L Ripetere Campi disabilitando input in riferimento ad un valore della select jQuery 0
G Campi multivalore Database 0
M Memorizzare i dati nei campi prima dell'invio al db PHP 4
D Stampa a video solo campi compilati MySQL 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
M Array associativi php su 2 campi mysql PHP 10
D popolare campi tra th alla select PHP 36
G VBA OpenForm con WhereCondition + LIKE su campi differenti MS Access 5
B Stringa sql per ricerca su più campi Database 1
F Leggere e aggiornare dati di campi <input text> su file di test PHP 0
M Compilazione automatica campi in input stessa pagina PHP 0
MarcoGrazia Gestire lista campi vuoti in fase di autenticazione jQuery 1
M Aggiornare simultaneamente i campi di due tabelle collegate con id PHP 4
L aggiornare 2 campi di una tabella insieme PHP 6
L Estrazione valori max su più campi MySQL 4
T Campi static del Controller generico si azzerano ad ogni richiesta PHP 3
elpirata Popolare campi tabella con totali estratti da database PHP 24
A [Javascript] Scrittura su più campi contemporaneamente Javascript 18
D Salvare in diversi campi mysql con diversi ID PHP 0
R [WordPress] Inserire campi aggiuntivi ad un Submit Form già dato dal template (front-end) WordPress 0
Domenico_Falco1 [Javascript] [HTML] Campi form con sfondo imposto dal browser Javascript 5
M [PHP] Query UPDATE che non mi aggiorna campi seconda tabella PHP 3
L [Javascript] Select option in campi input Javascript 4
D [ASP] Autocomplete cerca su 2 campi del db Classic ASP 1
elpirata [Javascript] Controllo campi required non effettuato Javascript 2
L [PHP] Form da select compilare campi automaticamente PHP 1
E Validazione campi form passati da link Programmazione 0
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
S [PHP] Selezionare i campi non in comune con le altre colonne della tabella PHP 4
A [MS Access] Somma Campi se in altro campo presente un determinato testo MS Access 1
M [PHP] Compilare campi in automatico con dati presi dal DB PHP 25
C [MySQL] Copiare campi di un record in un nuovo record MySQL 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0

Discussioni simili