仅在选中复选框时插入组

时间:2013-08-03 11:46:37

标签: php sql forms

我对此感到有点困惑。我只是在单击“组”复选框时尝试插入项目组。我已经测试了没有复选框的SQL插件,并且SQL完美地工作并插入数据。但是当我添加了复选框和if / else语句时,它开始给我带来麻烦。

例如:
- 如果我选择组1而不是组2 - SQL只能正确插入组1数据
- 如果我选择组2而不是组1 - 插入仍然插入组1数据
- 如果我选择组1和组2 - SQL插入两行组1数据
- 如果我没有选择任何组,那么我得到“警告:为/ home中的foreach()提供的参数无效...” - 我将在稍后解决。

我已标记为“第1组”和“第2组”。如果单击复选框,我需要代码仅插入组,并忽略未单击的复选框组。任何帮助都会很棒。感谢。

我一直在使用以下代码进行测试:

形式:

<form id="Form" method="post" action="/random.php" name="Form">
<input id="itemCurrency" type="hidden" value="2" name="itemCurrency"></input>


<div class="row">
<div class="col-lg-4">
<div class="itemHolder">
<img class="itemImg thumbnail" src="http://images.com/i/images.jpg"></img>
<div class="itemName">swim Shorts Wi...</div><
<div class="itemPrice">$33.33</div>
<div class="itemHref"><a target="_blank" href="http://random.com/product.aspx?id=40"> Visit Item Page </a></div>
</div>
</div>
   //GROUP 1    
     <input id="itemCheckBox[]" type="checkbox" value="checked" name="itemCheckBox[]"></input>
     <input id="itemName[]" type="hidden" value="some random text" name="itemName[]"></input>
     <input id="itemHref[]" type="hidden" value="http://random.com/product.aspx?id=2140" name="itemHref[]"></input>
     <input id="itemImg[]" type="hidden" value="http://images.com/i/image1s.jpg" name="itemImg[]"></input>
     <input id="itemPrice[]" type="hidden" value="$37.33" name="itemPrice[]"></input>
   //END GROUP 1    

<div class="col-lg-4">
<div class="itemHolder">
<img class="itemImg thumbnail" src="http://images.com/i/image_xl.jpg"></img>
<div class="itemName">Bomber Jacket With Fur</div>
<div class="itemPrice"> $88.88</div>
<div class="itemHref"><a target="_blank" href="http://random.com/Bomber-Jacket-With-fur/..">Visit Item Page</a></div>

</div>
</div>
   //GROUP 2
     <input id="itemCheckBox[]" type="checkbox" value="checked" name="itemCheckBox[]"></input>
     <input id="itemName[]" type="hidden" value="Bomber Jacket With Fur" name="itemName[]"></input>
     <input id="itemHref[]" type="hidden" value="http://random.com/Bomber-Jacket-With-fur/.." name="itemHref[]"></input>
     <input id="itemImg[]" type="hidden" value="http://images.com/i/image_xl.jpg" name="itemImg[]"></input>
     <input id="itemPrice[]" type="hidden" value="$88.88" name="itemPrice[]"></input>
   //END GROUP 2


     <input id="site" type="hidden" value="1" name="site"></input>
     <input id="submit_form" type="submit" value="yes" name="submit_form"></input>
</form>

PHP

if($submitForm == "yes" && $site == "1") {

foreach($_POST['itemCheckBox'] as $key => $val)
          {
   $fields[] = array(
      'itemCheckBox'=>$_POST['itemCheckBox'] [$key],
      'itemName' =>$_POST['itemName'] [$key],
      'itemHref' =>$_POST['itemHref'] [$key],
      'itemImg' =>$_POST['itemImg'] [$key],
      'itemPrice' =>$_POST['itemPrice'][$key] );

      //Remove non numaric characters from price(leave commas).
      $itemPrice = preg_replace('/[^0-9,.]/s', '', $itemPrice);

    //Data fields not in form
       $userId = "username";
       $userIp = $_SERVER['REMOTE_ADDR'];
       $itemType = "ADD LATER";
       $itemOutFit = "ADD LATER";
       $site = "1";
       $itemSale = "1";

      //Only insert if checkbox is clicked --NOT WORKING, ????
     if (isset($_POST['itemCheckBox'])){
            echo "CHECKED";
            echo "<br>";
    /*** INSERT data ***/
     $sql = "INSERT INTO items (userId,itemHref,itemImg,itemPrice,itemName,userIp,itemSite,itemType,itemCurrency,itemOutFit,itemSale) VALUES (:userId,:itemHref,:itemImg,:itemPrice,:itemName,:userIp,:itemSite,:itemType,:itemCurrency,:itemOutFit,:itemSale)";
      $q = $conn->prepare($sql);
            $q->execute(array(':userId'=>$userId, 
                ':itemHref'=>$itemHref[$key], 
                ':itemImg'=>$itemImg[$key], 
                ':itemPrice'=>$itemPrice[$key], 
                ':itemName'=>$itemName[$key], 
                ':userIp'=>$userIp, 
                ':itemSite'=>$itemSite, 
                ':itemType'=>$itemType,
                ':itemCurrency'=>$itemCurrency,
                ':itemOutFit'=>$itemOutFit,
                ':itemSale'=>$itemSale));   

                               } else  {
                               echo "NOT CHECKED";
                               echo "<br>";

                               }

/*  
echo $conn->errorCode();
echo "<br>"; ('SET CHARACTER SET utf8')
echo $conn->errorInfo();
echo "<br>";
//die(print_r($q->errorInfo(), true));
 */                
                         }

UPDATE 试图将php剥离为基本代码,仍然没有运气。同样的事情......任何人都知道如何解决这个问题。

            foreach($_POST['itemCheckBox'] as $key => $val)
                       {
                       $i = 0;
            $itemCheckBox = $_POST['itemCheckBox'];
            $itemName = $_POST['itemName'];
            $itemHref = $_POST['itemHref'];
            $itemImg = $_POST['itemImg'];
            $itemPrice = $_POST['itemPrice'];

  echo $i;
  echo "<br>";     
  $i = $i +1;

                     if (isset($_POST['itemCheckBox'])){
                                                 echo "<br>";
                                                         echo "CHECKED";
                                                         echo "<br>";
                echo "<br>";
                echo $itemCheckBox[$i];     
                echo "<br>";
        echo $itemName[$i];    
            echo "<br>";
        echo $itemHref[$i];  
            echo "<br>";
        echo $itemImg[$i];  
            echo "<br>";
                echo $itemPrice[$i];   

                         } else  {
                       echo "NOT CHECKED";
                       echo "<br>";
                       $i = $i +1;

                       }

               }

1 个答案:

答案 0 :(得分:0)

我发现了一些可能导致问题的事情:

  1. 在你的PHP中,你有一行包含:

    //Remove non numaric characters from price(leave commas).
    $itemPrice = preg_replace('/[^0-9,.]/s', '', $itemPrice);
    

    我没有看到$ itemPrice定义在哪里,应该是:

    $itemPrice = preg_replace('/[^0-9,.]/s', '', $fields['itemPrice']);
    
  2. 你可以通过检查以确保它存在并且是一个数组beforelooping来解决你的“警告:为/ home ...中的foreach()提供的无效参数”的问题。您可以使用!empty()和is_array()来检查。

    if(!empty($ _ POST ['itemCheckBox'])和is_array($ _ POST ['itemCheckBox'])){}

  3. 问题: 您输入的ID都是相同的,“itemCheckBox []”,“itemName []”等等都是用于所有输入的ID。如果您想正确使用javascript或css,这可能会在将来导致问题。

    修改 在你修改过的例子中,问题是每次循环进入循环时它设置$ i = 0,因为你在foreach的顶部声明了它。如果你回到使用$ key作为索引它应该工作。见下文:

    //GROUP 1 checkbox
         <input id="itemCheckBox[]" type="checkbox" value="0" name="itemCheckBox[]"></input>
    
    //GROUP 2 checkbox
         <input id="itemCheckBox[]" type="checkbox" value="1" name="itemCheckBox[]"></input>
    

    我还可能会建议您调整HTML项目以匹配您传递的密钥:

    <input id="itemName[1]" type="hidden" value="Bomber Jacket With Fur" name="itemName[]"></input>
         <input id="itemHref[1]" type="hidden" value="http://random.com/Bomber-Jacket-With-fur/.." name="itemHref[]"></input>
         <input id="itemImg[1]" type="hidden" value="http://images.com/i/image_xl.jpg" name="itemImg[]"></input>
         <input id="itemPrice[1]" type="hidden" value="$88.88" name="itemPrice[]"></input>
    


    foreach($_POST['itemCheckBox'] as $key => $val) {
      $itemCheckBox = $_POST['itemCheckBox'];
      $itemName = $_POST['itemName'];
      $itemHref = $_POST['itemHref'];
      $itemImg = $_POST['itemImg'];
      $itemPrice = $_POST['itemPrice'];
    
    
      if (isset($_POST['itemCheckBox'])){
          echo "<br>";
          echo "CHECKED";
          echo $itemCheckBox[$key];
          echo "<br>";
          echo "<br>";
          echo $itemCheckBox[$itemCheckBox[$key]];     
          echo "<br>";
          echo $itemName[$itemCheckBox[$key]];    
          echo "<br>";
          echo $itemHref[$itemCheckBox[$key]];  
          echo "<br>";
          echo $itemImg[$itemCheckBox[$key]];  
          echo "<br>";
          echo $itemPrice[$itemCheckBox[$key]];   
    
        } else  {
          echo "NOT CHECKED";
          echo "<br>";
        }
    
    }