2017-02-13 51 views
0

每當我嘗試插入使用下面的PHP腳本我收到此錯誤消息出現錯誤:SQLSTATE [42000] :語法錯誤或訪問衝突:1065查詢是空的,foreach循環用於處理多個選擇值。我試圖插入數據到數據庫使用PDO,但每當我嘗試查詢失敗,我正在學習PDO

<?php if(isset($result)) echo $result; ?> 
 
<form class="form-horizontal" action="" method="post" role="form"> 
 
    <div class="form-group"> 
 
<label for="name" class="col-sm-2 control-label">Group Name</label> 
 
    <div class="col-sm-8"> 
 
     <input type="text" class="form-control" name="group_name" placeholder="Group Name" id="name"> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label for="number" class="col-sm-2 control-label">Registration Number</label> 
 
    <div class="col-sm-8"> 
 
     <input type="text" class="form-control" name="group_reg_no" placeholder="Registration Number" id="number"> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label for="leader" class="col-sm-2 control-label">Group Leader Name</label> 
 
    <div class="col-sm-8"> 
 
    <input type="text" class="form-control" name="leader_name" placeholder="Group Leader Name" id="leader"> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label for="contact" class="col-sm-2 control-label">Group Leader Contact</label> 
 
    <div class="col-sm-8"> 
 
    <input type="text" class="form-control" name="leader_contact" placeholder="Group Leader Contact" id="contact"> 
 
    </div> 
 
</div> 
 

 

 
<?php require_once'first.php'; ?> 
 
<div class="form-group"> 
 
<label for="activity" class="col-sm-2 control-label">Group Activity</label> 
 
    <div class="col-sm-3"> 
 
    <select class="form-control" name="activity[]" id="activity" multiple="multiple"> 
 
    <option value="">Select Activity</option> 
 
    </select> 
 
    </div> 
 
</div> 
 
<div class="form-group"> 
 
<label for="category" class="col-sm-2 control-label">Group Category</label> 
 
    <div class="col-sm-3"> 
 
    <select class="form-control" name="category" id="category" onChange="JoinedOrNot()"> 
 
    <option value="">Select Category</option> 
 
    <option value="Men">Men</option> 
 
    <option value="Women">Women</option> 
 
    <option value="Youth">Youth</option> 
 
    <option value="Both">Both</option> 
 
    </select> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label for="name" class="col-sm-2 control-label">Number Of Men</label> 
 
    <div class="col-sm-8"> 
 
    <input type='text' size='5' name="men" id="input1" value="" class='input' disabled></input> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label for="name" class="col-sm-2 control-label">Number Of Women</label> 
 
    <div class="col-sm-8"> 
 
    <input type='text' size='5' name="women" id="input2" value="" class='input' disabled></input> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label for="total" class="col-sm-2 control-label">Total</label> 
 
    <div class="col-sm-2"> 
 
    <input type='text' size='5' id="input4" value="" name="total" disabled></input> 
 
    </div> 
 
</div> 
 

 
<div class="form-group"> 
 
<label class="col-sm-2 control-label"></label> 
 
    <div class="col-sm-8"> 
 
    <input type="submit" value="Register a Group" name="submit" class="btn btn-block btn-danger" id="subject"/> 
 
    </div> 
 
</div> 
 
</form>

<?php 
    require_once("functions/function.php"); 
    require_once("db_connection.php"); 
    require_once("database.php"); 
    if(isset($_POST['group_name'])){ 
     $group_name = $_POST['group_name']; 
     $group_reg_no = $_POST['group_reg_no']; 
     $leader_name = $_POST['leader_name']; 
     $leader_contact = $_POST['leader_contact']; 
     $region = $_POST['region']; 
     $district = $_POST['district']; 
     $division = $_POST['division']; 
     $ward = $_POST['ward']; 
     $village = $_POST['village']; 
     $activity = $_POST['activity']; 
     $category = $_POST['category']; 
     $men = $_POST['men']; 
     $women = $_POST['women']; 
     $total = $_POST['total']; 

     try{ 
      foreach ((array)$_POST['activity'] as $value) { 
       $sqlInsert = "INSERT INTO group_details 
            (group_reg_no, group_name, leader_name, 
            leader_contact, region, district, division, 
            ward, village, activity, 
            category, men, women, 
            total, registred_date) 
          VALUES (:group_reg_no, :group_name, :leader_name, 
            :leader_contact, :region, :district,          :division, 
            :ward, :village, :activity, 
            :category, :men, :women, 
            :total, now())"; 

      } 
      $statement = $db->prepare($sqlInsert); 
      $statement->execute(array(':group_reg_no' => $group_reg_no, ':group_name' => $group_name, ':leader_name' => $leader_name, ':leader_contact' => $leader_contact, ':region' => $region, ':district' => $district, ':division' => $division, ':ward' => $ward, ':village' => $village, ':activity' => $activity, ':category' => $category, ':men' => $men, ':women' => $women, ':total' => $total)); 

      if($statement->rowCount() == 1){ 

       $result = "<p style='padding: 20px; color: green;'> Registration Successful</p>"; 
      } 

      }catch (PDOException $ex){ 

       $result = "<p style='padding: 20px; color: red;'> An error occurred: ".$ex->getMessage()."</p>"; 
      } 
    } 
    ?> 
+0

你可以做foreach($ _ POST爲$ key => $ val){$ _POST [$ key] = strval($ val);}之前你分配你的變量,看看是否有東西被修復? – Dimi

+0

我已經嘗試了你的建議,但仍然是相同的錯誤 – punji

+0

你真的需要學習如何使用類 – Option

回答

2

你不需要從我所看到的

<?php 
    require_once("functions/function.php"); 
    require_once("db_connection.php"); 
    require_once("database.php"); 
    if(isset($_POST['group_name'])){ 

     try{ 
      $sql = "INSERT INTO group_details 
           (group_reg_no, group_name, leader_name, 
           leader_contact, region, district, division, 
           ward, village, activity, 
           category, men, women, 
           total, registred_date) 
         VALUES (:group_reg_no, :group_name, :leader_name, 
           :leader_contact, :region, :district, 
           :division, :ward, :village, :activity, 
           :category, :men, :women, 
           :total, now())"; 

      $statement = $db->prepare($sql); 

      $params = array(':group_reg_no' => $_POST['group_reg_no'], 
          ':group_name' => $_POST['group_name'], 
          ':leader_name' => $_POST['leader_name'], 
          ':leader_contact' => $_POST['leader_contact'], 
          ':region' => $_POST['region'], 
          ':district' => $_POST['district'], 
          ':division' => $_POST['division'], 
          ':ward' => $_POST['ward'], 
          ':village' => $_POST['village'], 
          ':activity' => $activity, 
          ':category' => $_POST['category'], 
          ':men' => $_POST['men'], 
          ':women' => $_POST['women'], 
          ':total' => $_POST['total']) 

      foreach ($_POST['activity'] as $activity) { 
       $params[':activity'] = $activity; 

       $statement->execute();     
      } // endforeach 
      $result = "<p style='padding: 20px; color: green;'> Registration Successful</p>"; 
     } 
     catch (PDOException $ex){ 
      $result = "<p style='padding: 20px; color: red;'> An error occurred: ".$ex->getMessage()."</p>"; 
     } 
    } 
?> 

當然,在所有foreach'ing你可以刪除部分代碼,並把如果您想刪除一些不必要的代碼,可直接將$_POST值存入$params陣列。

在執行INSERT之前,或者至少使用默認值初始化標量變量,您也可能想要確保所有這些$_POST值爲isset()。只是爲了完全安全。

+0

如果我刪除foreach循環如何處理多個選擇值,以防用戶選擇多個活動? – punji

+0

你實際上並沒有在你的原始代碼中這樣做。所以你最好向我們展示這個正在處理的表單,以便我可以仔細看看可能會進入該腳本的輸入 – RiggsFolly

+0

你的foreach只是在執行'$ sqlInsert =「....」'代碼行多次,沒有多次插入插入 – RiggsFolly

2

所以以下我的關於類評論這裏是我的簡化的答案:

在網頁表單上增加以下內容:

<?php 
require_once("functions/function.php"); 
require_once("db_connection.php"); 
require_once("database.php"); 
require_once('class.handleit.php'); 

$handle = new HandleIt(); 

if (isset($_POST['group_name'])) 
{ 
    $handle->handleIt($_POST['group_name'], $_POST['group_reg_no'], $_POST['leader_name'], $_POST['leader_contact'], $_POST['region'], $_POST['district'], $_POST['division'], 
        $_POST['ward'], $_POST['village'], $_POST['activity'], $_POST['category'], $_POST['men'], $_POST['women'], $_POST['total']); 
} 
?> 

爲了使您的生活更輕鬆。讓class.handleit.php並添加:

<?php class HandleIt 
{ 
    public function handleIt($group, $reg, $leader, $contact, $region, $district, $division, $ward, $village, $activity, $category, $men, $women, $total) 
    { 
     $stmt = $this->prepare("INSERT INTO `group_details`(group_reg_no, group_name, leader_name, 
            leader_contact, region, district, division, 
            ward, village, activity, 
            category, men, women, 
            total, registred_date) 
           VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?, NOW())"); 
     $stmt->execute([$group, $reg, $leader, $contact, $region, $district, $division, $ward, $village, $activity, $category, $men, $women, $total]); 

     echo "Success!"; 
    } 

    public function fetchIt() 
    { 
     $stmt = "SELECT * FROM `group_details`"; 
     $res = $this->prepare($stmt); 
     $res->execute(); 

     while ($row = $res) 
     { 
      $rows[] = $row; 
     } 

     return $rows; 
    } 
} 

你會看到有2類..插入和取出(插入說明其自我和獲取的,所以你可以期望的頁面上運行您的foreach)。

這裏是在foreach例如:

<?php 

$getForeach = $handle->fetchIt(); 

foreach ($getForeach as $row) 
{ 
    echo "<div>$row->group_name</div>"; 
    /* and so on.. you get the idea.. */ 
} 

?> 

請記住,在foreach需要進入這需要你的類和類名的頁面。

相關問題