2014-11-25 2 views
0

Я пытаюсь создать контактную форму в php, где детали, которые будут храниться в базе данных. Если я не буду вводить какие-либо значения, она отображает сообщение об ошибке msg, но оно будет храниться в базе данных. Как я могу проверить форму, когда отображается сообщение об ошибке, данные не должны вводиться в базу данных. Вот кодЗначения вставляются в базу данных без ввода данных

<?php 
$username = "root"; 
$password = ""; 
$hostname = "localhost"; 
$db = "abc"; 

//connection to the database 
$name=""; 
$email=""; 
$batch=""; 
$mobile=""; 

    if (isset($_POST['submit'])) { 
    $error = ""; 

    if (!empty($_POST['name'])) { 
    $name = $_POST['name']; 
    } else { 
    $error .= "You didn't type in your name. <br />"; 
    } 

    if (!empty($_POST['email'])) { 
    $email = $_POST['email']; 
     if (!preg_match("/^[_a-z0-9]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
     $error .= "The e-mail address you entered is not valid. <br/>"; 
     } 
    } else { 
    $error .= "You didn't type in an e-mail address. <br />"; 
    } 
if (!empty($_POST['batch'])) { 
    $batch = $_POST['batch']; 
    } else { 
    $error .= "You didn't type batch. <br />"; 
    } 
    if(($_POST['code']) == $_SESSION['code']) { 
    $code = $_POST['code']; 
    } else { 
    $error .= "The captcha code you entered does not match. Please try again. <br />";  
    } 



    if (!empty($_POST['mobile'])) { 
    $mobile = $_POST['mobile']; 
    } else { 
    $error .= "You didn't type your Mobile Number. <br />"; 
    } 







    if (empty($error)) { 





$success = "<b>Thank you! Your message has been sent!</b>"; 


    } 
    } 
    ?> 

       <div id="contactForm"> 



       <?php 
     if (!empty($error)) { 
     $dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL"); 
mysql_select_db($db,$dbhandle) or die('cannot select db'); 

mysql_query("INSERT INTO contact (name,batch,email,mobile) 
       VALUES('$name','$batch','$email','$mobile') ") or die(mysql_error()); 
     echo '<p class="error"><strong>Your message was NOT sent<br/> The following error(s) returned:</strong><br/>' . $error . '</p>'; 
     } elseif (!empty($success)) { 
     echo $success; 
     } 
    ?> 

ответ

0

Это противоположно тому, что она должна быть

if (!empty($error)) { 
    ^
    // your database stuff here 
} 

Вы должны запустить этот запрос, когда ошибка пустой, а не тогда, когда его не пусто.

if (empty($error)) { 
     // now save to database  
} 

идут также через How can I prevent SQL injection in PHP?

0

Проверьте состояние, на котором вы вставляете данные в базе данных. Вы проверяете, есть ли (!empty($error)), который должен означать, что есть ошибка. Кроме того, поскольку $error является строка, я бы порекомендовал вам проверить значения как if(trim($error) != ""), а не с помощью empty()

0
// also correct !empty() 
mysql_query(" INSERT INTO contact (`name`,`batch`,`email`,`mobile`) 
      VALUES('".$name."','".$batch."','".$email."','".$mobile."'); 

Вам нужно сцепить строки. Если вы ставите $email в кавычки, это будет считаться строкой, а не переменной.

0

вы должны использовать else if проверить каждое условие ..

if(isset($POST['submit'])){ 
if(empty($_POST['email'])){ 
$error[] = "email is required"; 
} 
elseif(empty($_POST['name'])){ 
$error[]= "name is required;"; 
} 
... 
else{ 
$email = $_POST['email']; 
$name = $_POST['name']; 
// do all the stuff here 
} 
} 
Смежные вопросы