首页 > 解决方案 > 如何通过 PHP 和 DB 中的 INSERT 为 HTML 表单中的单个名称传递多个值

问题描述

我正在处理一个简单的购物车页面,它读取购物车表中用户 ID = 用户 ID 的产品列表,并使用产品 ID 获取列出的产品详细信息。

但是,一旦用户单击“结帐”按钮,他就会将产品详细信息提交给 PHP,PHP 会将这些传递的值插入到另一个表中。

我的代码如下:

购物车.php

<form action="final.php" method="post" >
 <?php 
        $sql4 = "SELECT * FROM cart WHERE u_id = '$u_id'";
        $result4 = $conn->query($sql4);
        if ($result4->num_rows > 0) { 
        while($row4 = $result4->fetch_assoc()) { 
            $p_id = $row4["p_id"];
?>
<?php 
        $sql5 = "SELECT * FROM products WHERE id = '$p_id'";
        $result5 = $conn->query($sql5);
        if ($result5->num_rows > 0) { 
        while($row5 = $result5->fetch_assoc()) { 
?>
    <li class="cart-item">
       <div class="product-line-grid">
        <div class="product-line-grid-left col-md-3 col-xs-4">
          <span class="product-image media-middle">
          <img src="img/products/<?php echo $row5["pic"]; ?>" alt="Mammo diablo except obtain">
          </span>
        </div>
        <div class="product-line-grid-body col-md-4 col-xs-8">
        <div class="product-line-info">
        <a class="label" href="indi.php?id=<?php echo $row5["id"]; ?>"><?php echo $row5["name"]; ?></a>
       </div>
        <input type="hidden" name="p_id" value="<?php echo $row5["id"]; ?>" />
       <div class="product-line-info">
        <span class="value" ><input class="form-control" disabled type="text" id="input1<?php echo $row5["id"]; ?>" value="<?php echo $row5["price"]; ?>"/></span>
      </div>
    <input type="hidden" name="price" value="<?php echo $row5["price"]; ?>" />
         <br>
       <div class="product-line-info">
      <span class="label"><strong>Available Stock :  </strong></span>
      <span class="value"><?php echo $row5["stock"]; ?></span>
       </div>
    <div class="product-line-info">
      <span class="label"><strong>Category :  </strong></span>
     <span class="value"><?php echo $row5["cat"]; ?></span>
  </div>
      <div class="product-line-info">
      <span class="label"><strong>Sub Category :  </strong></span>
    <span class="value"><?php echo $row5["subcat"]; ?></span>
   </div>
     <input type="hidden" name="stock" value="<?php echo $row5["stock"]; ?>" />
    </div>
     <div class="product-line-grid-right product-line-actions col-md-5 col-xs-12">
    <div class="row">
      <div class="col-xs-4 hidden-md-up"></div>
      <div class="col-md-10 col-xs-6">
      <div class="row">
      <div class="col-md-6 col-xs-6">
      <div class="">
        <input class="form-control qty5" id="input2<?php echo $row5["id"]; ?>" type="text" value="<?php echo $row4["quantity"]; ?>" name="quantity" min="1" style="display: block; background-color:white;border:1px solid lightblue;">
        </div>
      </div>
      <div class="col-md-6 col-xs-2 price">
      <span class="product-price">
     <strong><input class="form-control qty1" disabled onblur="sum();" value="<?php echo $row5["price"]; ?>" name="eachfinal" type="text" id="output<?php echo $row5["id"]; ?>"  /></strong>
       </span>
      </div>
      </div>
     </div>
     <div class="col-md-2 col-xs-2 text-xs-right">
     <div class="cart-line-product-actions ">
     <a class="remove-from-cart" href="deletecart.php?id=<?php echo $row4["id"]; ?>" >
      =<i class="material-icons pull-xs-left">delete</i>
</a>
   </div>
   </div>
   </div>
   </div>
   <div class="clearfix"></div>
 </div>
 </li>

<?php 
    }
        } else {
         }
    ?>
<?php 
     }
        } else {
  }
?>
<button type="submit" class="btn btn-primary">Checkout</button>
</form>

最终的.php:

<?php

$p_id=$_POST["udf1"];
$price=$_POST["price"];
$stock=$_POST["stock"];

$conn = new mysqli ($servername, $dbusername, $dbpassword, $dbname);
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

$sql = "INSERT INTO final (p_id, price, stock)
        VALUES ('$p_id', '$price', '$stock')";


        if ($conn->query($sql) === TRUE) {
echo 'added successfully';

}
        else {
            echo "ERROR" . $sql . "<br>" . $conn->error;
        }

?>

但是,如果我在购物车中只有一个产品并且我传递了相同的产品值,则此代码可以正常工作,但是,如果我在购物车中有多个产品并且我想传递它们的所有值并插入它们的值,它会失败。

在这里使用数组很重要,我在这里寻求您的帮助来解释它是如何完成的。

注意:请忽略 SQL 注入,因为我是初学者,我想正常尝试,然后选择它。

标签: phparrays

解决方案


使用数组,如:

购物车.php

<form action="final.php" method="post" >
 <?php 
        $sql4 = "SELECT * FROM cart WHERE u_id = '$u_id'";
        $result4 = $conn->query($sql4);
        if ($result4->num_rows > 0) { 
        while($row4 = $result4->fetch_assoc()) { 
            $p_id = $row4["p_id"];
?>
<?php 
        $sql5 = "SELECT * FROM products WHERE id = '$p_id'";
        $result5 = $conn->query($sql5);
        if ($result5->num_rows > 0) { 
        while($row5 = $result5->fetch_assoc()) { 
?>
    <li class="cart-item">
       <div class="product-line-grid">
        <div class="product-line-grid-left col-md-3 col-xs-4">
          <span class="product-image media-middle">
          <img src="img/products/<?php echo $row5["pic"]; ?>" alt="Mammo diablo except obtain">
          </span>
        </div>
        <div class="product-line-grid-body col-md-4 col-xs-8">
        <div class="product-line-info">
        <a class="label" href="indi.php?id=<?php echo $row5["id"]; ?>"><?php echo $row5["name"]; ?></a>
       </div>
        <input type="hidden" name="p_id[<?php echo $row5["id"]; ?>]" value="<?php echo $row5["id"]; ?>" />
       <div class="product-line-info">
        <span class="value" ><input class="form-control" disabled type="text" id="input1<?php echo $row5["id"]; ?>" value="<?php echo $row5["price"]; ?>"/></span>
      </div>
    <input type="hidden" name="price[<?php echo $row5["id"]; ?>]" value="<?php echo $row5["price"]; ?>" />
         <br>
       <div class="product-line-info">
      <span class="label"><strong>Available Stock :  </strong></span>
      <span class="value"><?php echo $row5["stock"]; ?></span>
       </div>
    <div class="product-line-info">
      <span class="label"><strong>Category :  </strong></span>
     <span class="value"><?php echo $row5["cat"]; ?></span>
  </div>
      <div class="product-line-info">
      <span class="label"><strong>Sub Category :  </strong></span>
    <span class="value"><?php echo $row5["subcat"]; ?></span>
   </div>
     <input type="hidden" name="stock[<?php echo $row5["id"]; ?>]" value="<?php echo $row5["stock"]; ?>" />
    </div>
     <div class="product-line-grid-right product-line-actions col-md-5 col-xs-12">
    <div class="row">
      <div class="col-xs-4 hidden-md-up"></div>
      <div class="col-md-10 col-xs-6">
      <div class="row">
      <div class="col-md-6 col-xs-6">
      <div class="">
        <input class="form-control qty5" id="input2<?php echo $row5["id"]; ?>" type="text" value="<?php echo $row4["quantity"]; ?>" name="quantity[<?php echo $row5["id"]; ?>]" min="1" style="display: block; background-color:white;border:1px solid lightblue;">
        </div>
      </div>
      <div class="col-md-6 col-xs-2 price">
      <span class="product-price">
     <strong><input class="form-control qty1" disabled onblur="sum();" value="<?php echo $row5["price"]; ?>" name="eachfinal" type="text" id="output<?php echo $row5["id"]; ?>"  /></strong>
       </span>
      </div>
      </div>
     </div>
     <div class="col-md-2 col-xs-2 text-xs-right">
     <div class="cart-line-product-actions ">
     <a class="remove-from-cart" href="deletecart.php?id=<?php echo $row4["id"]; ?>" >
      =<i class="material-icons pull-xs-left">delete</i>
</a>
   </div>
   </div>
   </div>
   </div>
   <div class="clearfix"></div>
 </div>
 </li>

<?php 
    }
        } else {
         }
    ?>
<?php 
     }
        } else {
  }
?>
<button type="submit" class="btn btn-primary">Checkout</button>
</form>

最终的.php:

<?php

$prices=$_POST["price"];
$stocks=$_POST["stock"];

$conn = new mysqli ($servername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

foreach ($prices as $p_id => price) {
  $stock = $stocks[$p_id];
  $sql = "INSERT INTO final (p_id, price, stock)
          VALUES ('$p_id', '$price', '$stock')";


  if ($conn->query($sql) === TRUE) {
    echo 'added successfully';
  } else {
      echo "ERROR" . $sql . "<br>" . $conn->error;
  }
}
?>

最重要的部分是在 html 标签“输入”中。


推荐阅读