2017-02-13 15 views
0

次のPHPスクリプトを使用して挿入しようとすると、 :構文エラーまたはアクセス違反:1065クエリが空であり、foreachループが複数の選択値を処理するために使用されています。あなたは、コードの一部を削除して置くことができる私はもちろんPDOを使用してデータベースにデータを挿入しようとしていますが、クエリが失敗するとPDOを学習しています

<?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する必要はいけない

<?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

不要なコードを削除したい場合は$params配列に直接値を入力してください。$_POST

$_POSTの値がisset()であることを確認してから、INSERTを実行するか、少なくともデフォルト値でスカラー変数を初期化することもできます。ただ完全に安全です。

+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のは、あなたのクラスとクラス名が必要ですページに移動する必要があります。

関連する問題