2015-04-01 63 views
1

试图建立一个表单来添加项目到数据库,但每次我点击'提交'它会引发一个错误,并即时无法找到问题。 ''));'');'';'');'我试图改变它,没有运气。任何帮助/指导将不胜感激。在我的PHP代码中有参数问题,参数没有定义

错误消息 '警告:PDOStatement对象::执行():SQLSTATE [HY093]:无效参数号:未定义的参数'

<?php 

if(isset($_POST['submit'])){ 

    // Field validation 
    if(strlen($_POST['groupname']) == ''){ 
     $error[] = 'Please enter group/individual name'; 
    } 

    if(strlen($_POST['address1']) == ''){ 
     $error[] = 'Please enter first line of address'; 
    } 

    if(strlen($_POST['city']) < 2){ 
     $error[] = 'City field too short.'; 
    } 
    if(strlen($_POST['postcode']) < 7){ 
     $error[] = 'Please enter valid postcode.'; 
    } 
    if(strlen($_POST['phone']) < 11){ 
     $error[] = 'Please enter valid contact number.'; 
    } 
    if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ 
     $error[] = 'Please enter a valid email address'; 
    } else { 
     $stmt = $con->prepare('SELECT email FROM groups WHERE email = :email'); 
     $stmt->execute(array(':email' => $_POST['email'])); 
     $row = $stmt->fetch(PDO::FETCH_ASSOC); 

     if(!empty($row['email'])){ 
      $error[] = 'Email provided is already in use.'; 
     } 


     //If no errors - proceed 
     if(!isset($error)){ 

      try { 

       //insert into database with a prepared statement 
       $stmt = $con->prepare('INSERT INTO groups (groupName,address1,address2,city,postcode,phoneNumber,email,coOrdinator) 
           VALUES (:groupname, :address1, :address2, :city, :postcode, :phone, :email, :co-ordinator)'); 
       $stmt->execute(array(
            ':groupname' => $_POST['groupname'], 
            ':address1' => $_POST['address1'], 
            ':address2' => $_POST['address2'], 
            ':city' => $_POST['city'], 
            ':postcode' => $_POST['postcode'], 
            ':phone' => $_POST['phone'], 
            ':email' => $_POST['email'], 
            ':co-ordinator' => $_POST['co-ordinator'] 
            )); 

       if ($stmt){ 
        echo "<p>Kit has been added successfully!</p>"; 
       } else { 
        echo "<p>Sorry, there has been a problem adding the item.</p>"; 
       } 


       exit(); 

       //else catch the exception and show the error. 
      } catch(PDOException $e) { 
       $error[] = $e->getMessage(); 
      } 
     } 
    } 

回答

3

占位符不能在他们连字符,它们具有相同的语法作为SQL标识符(前缀:除外)。将:co-ordinator更改为:coordinator

+0

非常感谢!将来肯定不会忘记!您可以使用下划线 – user3487430 2015-04-02 00:02:17

+0

。您使用哪种参数命名策略试图确保其唯一唯一的参数和全局使用,它会轻松读取代码。它适用于所有属性,方法等,您不必遵循编码标准。它不推荐,但只要你是一致的,你可以制定自己的标准。 – Chris 2015-04-02 00:12:53