2013-05-17 53 views
-1

得到了这种工作,我想如何,但我可以做些什么更新,使其更好?将验证添加到PDO

代码:----------------------------------------

$odb = new PDO('mysql:host=localhost;dbname=db371885849', $user, $pass); 
    $odb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


     if(isset($_POST['firstname'])) { 
       $firstname = $_POST['firstname']; 
       $lastname = $_POST['lastname']; 
       $email = $_POST['email']; 

         $q = "INSERT INTO jobform(firstname, lastname, email) VALUES (:firstname, :lastname, :email);"; 
         $query = $odb->prepare($q); 
         $results = $query->execute(array(
         ":firstname" => $firstname, 
         ":lastname" => $lastname, 
         ":email" => $email 
       )); 
       } 

++++++++++++++++++++++++更新工作+++++++++++++++++++++ +++++

$odb = new PDO('mysql:host=localhost;dbname=db371885849', $user, $pass); 
    $odb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     if(isset($_POST['firstname'])) { 
       $firstname = $_POST['firstname']; 
       $lastname = $_POST['lastname']; 
       $email = $_POST['email']; 
if (!empty($firstname)) 
{ 

         $q = "INSERT INTO jobform(firstname, lastname, email) VALUES (:firstname, :lastname, :email);"; 
         $query = $odb->prepare($q); 
         $results = $query->execute(array(
         ":firstname" => $firstname, 
         ":lastname" => $lastname, 
         ":email" => $email 
       )); 
       } else { 
      echo "not today"; 
     } 
       } 
+0

尝试使用'empty(trim($ _ POST ...' – hjpotter92

+0

)为什么你认为它与PDO有关? –

+0

http://stackoverflow.com/questions/5152223/divide-php-errors-and-application-错误 –

回答

1
if(!empty($_POST['firstname']) && !empty($_POST['lastname']) && filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) { 
      $firstname = $_POST['firstname']; 
      $lastname = $_POST['lastname']; 
      $email = $_POST['email']; 

        $q = "INSERT INTO jobform(firstname, lastname, email) VALUES (:firstname, :lastname, :email);"; 
        $query = $odb->prepare($q); 
        $results = $query->execute(array(
        ":firstname" => $firstname, 
        ":lastname" => $lastname, 
        ":email" => $email 
      )); 
     }else echo 'make an error'; 
+3

为什么-1?自己解释 – Sam

+0

我正要问我同样的问题o_O +1。 – mingos

+0

如果我没有弄错,在这个小片段中,'firstname'单词出现了7次。你不觉得它有点太过分了吗? –

0

PDO用于与数据库进行通信,而不是验证值(除了引用安全插入)。你将不得不执行验证你与PDO启动您的SQL查询之前:

<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (
     // your empty() checks 
    ) { 
     // your query 
    } 
} 
+0

好,所以这个代码应该建立在查询连接之前,设置了对变量的验证? – Switchfire

+0

您可以更早地连接,连接不成问题。我想说的是,你应该手动验证你的字段,一旦你确定他们全部验证,你可以继续启动一个INSERT查询。为了使事情变得更容易,你也可以考虑使用一些PHP框架,或者至少它的验证器组件。 Zend Framework有一套体面的,相当完整的验证器,您可以单独使用。 – mingos

1

看来你不需要任何验证可言。 所以,我怎么会做的,基于从标签维基代码

<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $allowed = array('firstname', 'lastname', 'email'); 
    $sql = "INSERT INTO jobform SET ".pdoSet($fields,$values); 
    $stm = $dbh->prepare($sql); 
    $stm->execute($values); 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
} 

但是,如果你想验证用户输入,你会酬劳更复杂的代码:

<? 
$allowed = array('firstname', 'lastname', 'email'); 
if ($_SERVER['REQUEST_METHOD']=='POST') { 

    $err = array(); 
    //performing all validations and raising corresponding errors 
    if (empty($_POST['firstname']) $err[] = "Firstname is required"; 
    if (empty($_POST['lastname']) $err[] = "Lastname is required"; 
    if (!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL) { 
    $err[] = "Wrong email format"; 
    } 

    if (!$err) { 
    $sql = "INSERT INTO jobform SET ".pdoSet($fields,$values); 
    $stm = $dbh->prepare($sql); 
    $stm->execute($values); 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
    } else { 
    // all field values should be escaped according to HTML standard 
    foreach ($_POST as $key => $val) { 
     $form[$key] = htmlspecialchars($val); 
    } 
} else { 
    foreach ($allowed as => $val) { 
     $form[$val] = ''; 
    } 
} 
include 'form.tpl.php'; 
+0

感谢您的帮助,pdoSet对我来说是新的,Il看看我是否可以将其发展为我的脚本,再次感谢。 – Switchfire