2013-01-10 9 views
5

Sto costruendo un sistema di login per un sito web di mine e ho bisogno di un modo per verificare se tutti i campi in un modulo vengono compilati. Sto anche avendo un problema con un messaggio di errore che dice che la mia e-mail non è nel formato corretto.Come controllare se tutti i campi in un modulo sono vuote

<?php 
$con = mysql_connect(localhost, 262096, 9201999); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("262096", $con); 
$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$username = $_POST['username']; 
$password = $_POST['password']; 
$passwordconf = $_POST['passwordconf']; 
$email = $_POST['email']; 
$securityq = $_POST['securityq']; 
$qanswer = $_POST['qanswer']; 

if(empty($firstname) || empty($lastname) || empty($username) || empty($password) || 
    empty($passwordconf) || empty($email) || empty($securityq) || empty($qanswer)) 
{ 
    echo "You did not fill out the required fields."; 
} 

$uname = "SELECT * FROM users WHERE username='{$username}'"; 
$unamequery = mysql_query($uname) or die(mysql_error()); 
if(mysql_num_rows($unamequery) > 0) 
{ 
    echo "The username you entered is already taken"; 
} 

$emailfind = "SELECT * FROM users WHERE email='{$email}'"; 
$emailquery = mysql_query($emailfind) or die(mysql_error()); 
if(mysql_num_rows($emailquery) > 0) 
{ 
    echo "The email you entered is already registered"; 
} 

if($password != $passwordconf) 
{ 
    echo "The passwords you entered do not match"; 
} 

$regex = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]{2,}$/i"; 
if(!preg_match($regex, $email)) 
{ 
    echo "The email you entered is not in [email protected] format"; 
} 
+1

Quale problema - in particolare - si è verificato? –

+0

Hai risolto il tuo primo problema: 'if (vuoto ($ firstname ...)' dovrebbe funzionare. Il tuo secondo problema è a) non descritto dal titolo, e b) non descritto affatto. Crea un nuovo post per questo, con maggiori dettagli questa volta. http://www.catb.org/esr/faqs/smart-questions.html – Amadan

risposta

1

Utilizzare un'istruzione if semplice per verificare se uno dei campi che l'utente ha inviato è vuoto. Ad esempio, per controllare se il campo nome utente è vuoto:

$username = $_POST['username']; 
if ($username == "") { 
echo "Username field is empty! <a href='page.php'>Go Back</a> 
{ 
else { 
echo "The username field has text in it. It is not empty."; 
} 
+0

Questo produrrà anche un errore quando manca un campo (chiave dell'array). Utilizzare isset in aggiunta e produrre un messaggio di feedback user friendly –

1

Non ci sono più problemi con questo codice:

  1. non è sicuro.
  2. si visualizzano i messaggi di errore, ma ancora il codice continua l'esecuzione, in modo che eseguirà la vostra query di selezione, anche quando il nome utente è vuoto.
  3. A causa di ragionare a due, quasi tutte le vostre domande qui sotto può fallire.

Quindi, si deve fermare qui

if(empty($firstname) || empty($lastname) || empty($username) || empty($password) || empty($passwordconf) || empty($email) || empty($securityq) || empty($qanswer)) 
    { 
    echo "You did not fill out the required fields."; 
    die(); // Note this 
    } 
+0

in modo che l'uso della funzione die fermerà il codice dall'esecuzione se l'errore è vero? –

+0

@TravisNabbefeld Sì, è corretto. Puoi anche inserire tutto il codice dopo quello nel tuo blocco "else" come un'altra opzione –

+0

Sì, penso che Hanky ​​usi questo come esempio per uccidere lo script. I sistemi comuni utilizzano un modo leggermente diverso di controllare i campi modulo –

2

Guardando il codice sembra che si sta utilizzando la validazione lato server per le convalide di base.

perché non provare la validazione lato client utilizzando jQuery

http://docs.jquery.com/Plugins/Validation#Options_for_the_validate.28.29_method

+1

La convalida di CLientside non viene salvata per l'applicazione. Raccomando di iniziare a proteggere le cose usando php e POI usare le lingue clientide per il comfort dell'utente –

+0

Grazie! Lo esaminerò –

+0

@ChrisVisser il mio suggerimento è solo per le convalide e non per la sicurezza dell'applicazione. Sicuramente per la sicurezza sono necessarie convalide lato server, ma per la convalida di una casella di testo vuota o di un modello di convalida dell'ID di posta elettronica è sufficiente una convalida del lato client. – muffy

0

U potrebbe desiderare di utilizzare la funzione di vuoto() isset() e

//! means NOT so: exists and NOT empty 
if(isset($_POST['firstname']) && !empty($_POST['firstname'])) { 
    $firstname = $_POST['firstname']; 

    //Do something with $firstname 
} 

Tenete a mente che il il codice sopra è solo un esempio. È bello iniziare, ma in tempo reale dovrai fare molto di più sulla sicurezza. Inoltre, assicurarsi di lasciare che il codice di uccidere o saltare le query quando la validazione fallisce

+0

è il && diverso da ||? Anche quando dici sicurezza, cosa vuoi dire, perché questo non è tutto il codice. La parte in cui è inserita nel database lo salda e lo salda usando un sale casuale. Quindi c'è qualcos'altro che potrei fare? –

+0

&& significa qualcosa come: "questo deve restituire true" E "questo deve restituire true". || significa OR: "questo deve restituire true" OPPURE "questo deve restituire true". La sicurezza ha un sacco di cose come l'iniezione di SQL, l'iniezione di script, ecc. Raccomando di esaminare questi argomenti. D'altra parte controlla solo se la struttura dei dati è conforme al fieldtype (e-mail in formato e-mail, solo numeri interi, date solo date ecc.) –

+0

Oh sì. Ho sentito parlare di SQL injection. Volevo solo ottenere qualcosa che funzionasse e inserire i dati nel database prima di iniziare ad aggiungere altre cose. –

11

Quando si utilizzano grandi forme si raccomanda di creare un array con i campi del modulo:

$fields = array('firstname', 'lastname', 'username', 'password', 'passwordconf', 'email', 'securityq', 'qanswer'); 

$error = false; //No errors yet 
foreach($fields AS $fieldname) { //Loop trough each field 
    if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) { 
    echo 'Field '.$fieldname.' misses!<br />'; //Display error with field 
    $error = true; //Yup there are errors 
    } 
} 

if(!$error) { //Only create queries when no error occurs 
    //Create queries.... 
} 
1

se si sta facendo qualcosa con un database si dovrebbe sanitizza i tuoi input. Per quanto riguarda la verifica dei valori POST. Se avete bisogno di tutte le messaggi su quella pagina da completare, si potrebbe provare a loop attraverso il $ _POST e controllando ciascuno. Dovresti anche interrompere l'esecuzione se stai facendo eco all'errore. E per favore non ascoltare la gente dicendo utilizzare javascript per questo, è necessario forte validazione lato server prima di preoccuparsi di javascript!

foreach($_POST as $key => $value) { 
    if(empty($value)) { 
    echo "Error, not all values given."; 
    die; 
    } 
} 

Ma ti consiglio di controllare anche i singoli post in modo più approfondito. Assicurati che il loro nome utente e password abbiano i caratteri giusti .. e usi mysql_escape_string($str) se lo stai interrogando al database.

2

Prima di tutto mysql_real_escape_string uso() per evitare MYSQL iniezioni:

... 
$firstname = mysqli_real_escape_string($con, $_POST['firstname']); 
$lastname = mysqli_real_escape_string($con, $_POST['lastname']); 
... 

E per verificare se un campo è vuoto, al fine di restituire un errore o un messaggio solo fare questo (breve esempio):

if (!(empty($_POST['firstname']))){ 
    execute some code.... 
} 
else { 
    execute some code... 
} 

Speranza che aiuta

0
 if(in_array("",$_POST)){ 
     //this will check the whole post data if any field is empty. 
      echo 'form is empty'; 
      echo 'some error message'; 
      exit; 
     }else{ 
      echo "form is not empty"; 
      //some code 
     } 
Problemi correlati