2012-03-21 10 views
1

Im работает в php-форме, где Im проверяет feilds с регулярным выражением. Проверка работает нормально, но я хочу вставить данные в базу данных после завершения проверки без ошибок. Я не знаю, как это обставить?Вставить данные в базу данных после подтверждения

Im, стоящий перед пролетом, и данные вставляют пустые записи в базу данных каждый раз, когда я нажимаю кнопку submit. Кроме того, я хочу, чтобы после вставки было сделано для перенаправления на страницу «Спасибо».

Я очень ценю вашу помощь и предложение.

вот мой код

<?php 
    $errname  = ""; 
    $errage  = ""; 
    $errmobile = ""; 

    if($_POST["ac"]=="login"){ 
    // Full Name must be letters, dash and spaces only 
     if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST["name"]) === 0) 
     $errname = '<p class="errText">Please enter your full name </p>'; 
    // age must be 2 digits 
    if(preg_match("/^\d{2}$/", $_POST["age"]) === 0) 
     $errage = '<p class="errText">Age must be 2 digits</p>'; 
       // Mobile mask 050-0000000 
    if(preg_match("/^\d{3}-\d{7}$/", $_POST["mobile"]) === 0) 
     $errmobile = '<p class="errText">Mobile must be in this format: 050-0000000</p>'; 


     // contact to database 

$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection."); 

mysql_select_db("career_system"); 

//Get data in local variable 

$v_name=$_POST['name']; 

$v_age=$_POST['age']; 

$v_gender=$_POST['gender']; 

$v_mobile =$_POST['mobile']; 


$query="insert into applicant(name, age, gender, mobile) values ('$v_name', '$v_age', '$v_gender','$v_mobile ')"; 

mysql_query($query) or die(mysql_error()); 
} 
echo "Your information has been received"; 
     } 


    ?> 

</head> 

<body> 
<div align="center"> 
    <p>&nbsp;</p> 
</div> 
<form name="form1" action="<?php echo $PHP_SELF; ?>" method="POST"> 
    <p> 
    <input type="hidden" name="ac" value="login"> 
    </p> 
    <table width="485" border="0"> 
     <tr> 
     <td width="48">Full Name</td> 
     <td width="150"><input name="name" type="text" id="name" value="<?php echo  $_POST["name"]; ?>"></td> 
     <td width="273"><?php if(isset($errname)) echo $errname; ?></td> 
     </tr> 
     <tr> 
     <td>Age</td> 
     <td><input name="age" type="text" id="age" value="<?php echo $_POST["age"]; ?>"></td> 
     <td><?php if(isset($errage)) echo $errage; ?></td> 
     </tr> 
     <tr> 
     <td>Gender</td> 
     <td><input name="gender" type="radio" value="Male" checked> 
      Male 
      <input name="gender" type="radio" value="Female"> 
      Female</td> 
     <td>&nbsp;</td> 
     </tr> 
     <tr> 
     <td>Mobile</td> 
     <td><input name="mobile" type="text" id="mobile" value="<?php echo $_POST["mobile"]; ?>"></td> 
     <td><?php if(isset($errmobile)) echo $errmobile; ?></td> 
     </tr> 
     <tr> 
     <td>&nbsp;</td> 
     <td><input type="submit" name="Submit" value="Submit"> 
     <input name="reset" type="reset" id="reset" value="Reset"></td> 
     <td>&nbsp;</td> 
     </tr> 
    </table> 
</form> 

ответ

2

Вы можете просто использовать $errors массив и проверить его пустоту перед установкой:

$errors = array(); 

if ($_POST["ac"]=="login") { 

    if (!preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST['name'])) 
     $errors['name'] = '<p class="errText">Please enter your full name </p>'; 

    if (!preg_match("/^\d{2}$/", $_POST['age'])) 
     $errors['age'] = '<p class="errText">Age must be 2 digits</p>'; 

    // etc... 

    if (!$errors) { 
     $query = " 
      insert into applicant 
      (name, age, gender, mobile) 
      values 
      (
      '".mysql_real_escape_string($v_name)."', 
      '".mysql_real_escape_string($v_age)."', 
      '".mysql_real_escape_string($v_gender)."', 
      '".mysql_real_escape_string($v_mobile)."' 
      ) 
     "; 

     mysql_query($query); 
    } 

    // etc... 
} 

// Later in your HTML: 

<tr> 
    <td>Mobile</td> 
    <td><input name="mobile" type="text" id="mobile" value="<?php echo $_POST["mobile"]; ?>"></td> 
    <td><?php if(isset($errors['mobile'])) echo $errors['mobile'] ?></td> 
</tr> 

Убедитесь, чтобы избежать данных перед отправкой его в базу данных (а следовательно, mysql_real_escape_string звонки)! Важным советом было бы фактически отказаться от функций mysql_, поскольку они устарели. Вместо этого вы должны использовать PDO. Это намного проще, эффективнее и практически без значительных усилий устраняет значительную угрозу SQL-инъекции:

try { 
    $dbh = new PDO("mysql:host=localhost;dbname=mydb", 'username', 'password'); 
} catch(PDOException $e) { 
    die('Could not connect to database!'); 
} 

$stm = $dbh->prepare('INSERT INTO applicant (name, age, gender, mobile) VALUES (?, ?, ?, ?)'); 
$stm->execute(array($v_name, $v_age, $v_gender, $v_mobile)); 
-1

Как о чем-то вроде:

if($_POST["ac"]=="login"){ 
    // Full Name must be letters, dash and spaces only 
     if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST["name"]) === 0) 
     $errname = '<p class="errText">Please enter your full name </p>'; 
    // age must be 2 digits 
    if(preg_match("/^\d{2}$/", $_POST["age"]) === 0) 
     $errage = '<p class="errText">Age must be 2 digits</p>'; 
       // Mobile mask 050-0000000 
    if(preg_match("/^\d{3}-\d{7}$/", $_POST["mobile"]) === 0) 
     $errmobile = '<p class="errText">Mobile must be in this format: 050-0000000</p>'; 


     // contact to database 

$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection."); 

mysql_select_db("career_system"); 

//Get data in local variable 

$v_name=$_POST['name']; 

$v_age=$_POST['age']; 

$v_gender=$_POST['gender']; 

$v_mobile =$_POST['mobile']; 

if($errname != "" || $errage != "" || $errmobile != "") 
    echo "Error!"; 
else{ 

$query="insert into applicant(name, age, gender, mobile) values ('$v_name', '$v_age', '$v_gender','$v_mobile ')"; 

    mysql_query($query) or die(mysql_error()); 
} 
} 

И только для вашей собственной безопасности, при хранении размещены значений в базу данных, всегда проверяйте, что они не являются каким-то типом (например, SQL-инъекция) с использованием:

mysql_real_escape_string(param); 
+0

Зачем вообще подключаться к базе данных, если есть ошибки в представленных данных? – sikander

+0

@ceejayoz: Я не писал. И код является копией его кода в качестве решения его проблемы. – Araw

+0

Если вы еще не написаны, зачем отправлять? – ceejayoz

1

Добавить место после применения nt - INSERT INTO заявитель (name, age, gender, mobile)

Кроме того, ваш код небезопасен, и ваша база данных теперь уязвима для атак. Удостоверьтесь, что вы избегаете всех своих строк, прежде чем вставлять их в db!

http://phptutorial.info/?mysql-real-escape-string

Смежные вопросы