将多个选中复选框的值插入数据库
inserting values from multipe selected checkboxes into database
所以整个场景如下:
我的网站上有一个表单,其中包含多个复选框值。例如,"price" 有四个复选框。用户可以 select 从 none 到所有四个复选框的任何位置。
我无法将 "SELECTED" 复选框值插入到数据库的 table 中。我已经尝试了所有可以在 Google 和 Whosebug 上找到的方法。
我对PHP比较陌生,所以对它知之甚少。但是为了解决这个问题,我查阅了各种文档,实际上很多。
不管怎样,这就是我现在正在做的,而且很管用。但这是一个糟糕的方法,我知道会有更有效的方法。
<div class="panel-body">
<label class="checkbox-inline"><input type="checkbox" name="price1" value="Less than 10,000, "> Less than 10,000</label>
<label class="checkbox-inline"><input type="checkbox" name="price2" value="10,001 to 15000, "> 10,001 - 15000</label>
<label class="checkbox-inline"><input type="checkbox" name="price3" value="15,001 to 25000, "> 15,001 - 25000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price4" value="25,001 to 35000, "> 25,001 - 35000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price5" value="35,001 and more, "> 35,001 and more </label>
</div>
所以基本上每个价格复选框都有自己独立的名称。
对应的PHP如下
<?php
session_start();
$_SESSION["f1"]=$_REQUEST["price1"];
$_SESSION["f2"]=$_REQUEST["price2"];
$_SESSION["f3"]=$_REQUEST["price3"];
$_SESSION["f4"]=$_REQUEST["price4"];
$_SESSION["f5"]=$_REQUEST["price5"];
$_SESSION["f"]=$_SESSION["f1"].$_SESSION["f2"].$_SESSION["f3"].$_SESSION["f4"].$_SESSION["f5"];
$z6=$_SESSION["f"];
require_once('ConnectDB.php');
$conn=mysql_connect(SERVER,USER,PASSWORD);
mysql_select_db(DATABASE,$conn);
query="insert into mobile_frm values('".$z6."')";
mysql_query($query) or die(mysql_error());
echo"Thanks for using us";
header('Location: gadget.html');
mysql_close($conn);
?>
这是在数据库中写入表单值的 PHP 脚本。为了简单明了,我只包含了其中的一部分。
这里我只是取所有的单独值并从中生成一个字符串。
请给我一些方向。
您可以发送一组表单元素,只需将您的标记更改为:
<input type="checkbox" name="prices[]" value="Less than 10,000, ">
<input type="checkbox" name="prices[]" value="10,001 to 15000, ">
// etc...
然后,PHP方:
$prices = $_POST['prices']; // this is now an array, work on it
在复选框名称后使用方括号 ([])。
<label class="checkbox-inline"><input type="checkbox" name="price1[]" value="Less than 10,000, "> Less than 10,000</label>
在PHP中你可以使用
$price1 = $_POST['price1'];
首先,您使用的是已弃用的库 mysql。应该切换到 Mysqli 或更好的 PDO。
那你这里打错了:
query="insert into mobile_frm values('".$z6."')";
这应该是:
$query="insert into mobile_frm values('$z6')";
假设您的 table 只有一列。
然后,正如其他人所说,每个复选框都应该具有相同的名称 prices[] (即数组表示法)。在价格数组中,您将只有选中的复选框。
旁注: 您正在使用 $_REQUEST
数组,但您应该使用 $_POST or $_GET
取决于您在表单中定义的方法。我还假设您需要使用 $_SESSION
来存储发布的值(以便在其他地方使用它们)。在任何其他情况下,您的代码应该修改为不使用 $_SESSION
只是将存储的值分配给变量。
下面的代码显示了如何在 PHP 中使用多个复选框字段。
首先将复选框名称更改为价格[]。
<div class="panel-body">
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="Less than 10,000, "> Less than 10,000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="10,001 to 15000, "> 10,001 - 15000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="15,001 to 25000, "> 15,001 - 25000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="25,001 to 35000, "> 25,001 - 35000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="35,001 and more, "> 35,001 and more </label>
</div>
如何取值PHP?
Ans: 你可以直接取值: $prices = $_POST['prices'];
这种情况下你可以把你的值作为一个数组来取。如果您想要定界符,请使用 $price = implode(', ', $_POST['price']);
.
<div class="panel-body">
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="Less than 10,000, "> Less than 10,000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="10,001 to 15000, "> 10,001 - 15000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="15,001 to 25000, "> 15,001 - 25000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="25,001 to 35000, "> 25,001 - 35000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="35,001 and more, "> 35,001 and more </label>
</div>
<?php
$price = $_REQUEST['price'];
//for single cell value separte by ,
$p = implode(',',$price);
// for each value
for($i = 0;count($price)<$i;$i++){
// put insert query and value of selected price
$p = $price[$i];
}
?>
所以整个场景如下:
我的网站上有一个表单,其中包含多个复选框值。例如,"price" 有四个复选框。用户可以 select 从 none 到所有四个复选框的任何位置。
我无法将 "SELECTED" 复选框值插入到数据库的 table 中。我已经尝试了所有可以在 Google 和 Whosebug 上找到的方法。
我对PHP比较陌生,所以对它知之甚少。但是为了解决这个问题,我查阅了各种文档,实际上很多。
不管怎样,这就是我现在正在做的,而且很管用。但这是一个糟糕的方法,我知道会有更有效的方法。
<div class="panel-body">
<label class="checkbox-inline"><input type="checkbox" name="price1" value="Less than 10,000, "> Less than 10,000</label>
<label class="checkbox-inline"><input type="checkbox" name="price2" value="10,001 to 15000, "> 10,001 - 15000</label>
<label class="checkbox-inline"><input type="checkbox" name="price3" value="15,001 to 25000, "> 15,001 - 25000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price4" value="25,001 to 35000, "> 25,001 - 35000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price5" value="35,001 and more, "> 35,001 and more </label>
</div>
所以基本上每个价格复选框都有自己独立的名称。
对应的PHP如下
<?php
session_start();
$_SESSION["f1"]=$_REQUEST["price1"];
$_SESSION["f2"]=$_REQUEST["price2"];
$_SESSION["f3"]=$_REQUEST["price3"];
$_SESSION["f4"]=$_REQUEST["price4"];
$_SESSION["f5"]=$_REQUEST["price5"];
$_SESSION["f"]=$_SESSION["f1"].$_SESSION["f2"].$_SESSION["f3"].$_SESSION["f4"].$_SESSION["f5"];
$z6=$_SESSION["f"];
require_once('ConnectDB.php');
$conn=mysql_connect(SERVER,USER,PASSWORD);
mysql_select_db(DATABASE,$conn);
query="insert into mobile_frm values('".$z6."')";
mysql_query($query) or die(mysql_error());
echo"Thanks for using us";
header('Location: gadget.html');
mysql_close($conn);
?>
这是在数据库中写入表单值的 PHP 脚本。为了简单明了,我只包含了其中的一部分。
这里我只是取所有的单独值并从中生成一个字符串。
请给我一些方向。
您可以发送一组表单元素,只需将您的标记更改为:
<input type="checkbox" name="prices[]" value="Less than 10,000, ">
<input type="checkbox" name="prices[]" value="10,001 to 15000, ">
// etc...
然后,PHP方:
$prices = $_POST['prices']; // this is now an array, work on it
在复选框名称后使用方括号 ([])。
<label class="checkbox-inline"><input type="checkbox" name="price1[]" value="Less than 10,000, "> Less than 10,000</label>
在PHP中你可以使用
$price1 = $_POST['price1'];
首先,您使用的是已弃用的库 mysql。应该切换到 Mysqli 或更好的 PDO。 那你这里打错了:
query="insert into mobile_frm values('".$z6."')";
这应该是:
$query="insert into mobile_frm values('$z6')";
假设您的 table 只有一列。
然后,正如其他人所说,每个复选框都应该具有相同的名称 prices[] (即数组表示法)。在价格数组中,您将只有选中的复选框。
旁注: 您正在使用 $_REQUEST
数组,但您应该使用 $_POST or $_GET
取决于您在表单中定义的方法。我还假设您需要使用 $_SESSION
来存储发布的值(以便在其他地方使用它们)。在任何其他情况下,您的代码应该修改为不使用 $_SESSION
只是将存储的值分配给变量。
下面的代码显示了如何在 PHP 中使用多个复选框字段。
首先将复选框名称更改为价格[]。
<div class="panel-body">
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="Less than 10,000, "> Less than 10,000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="10,001 to 15000, "> 10,001 - 15000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="15,001 to 25000, "> 15,001 - 25000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="25,001 to 35000, "> 25,001 - 35000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="35,001 and more, "> 35,001 and more </label>
</div>
如何取值PHP?
Ans: 你可以直接取值: $prices = $_POST['prices'];
这种情况下你可以把你的值作为一个数组来取。如果您想要定界符,请使用 $price = implode(', ', $_POST['price']);
.
<div class="panel-body">
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="Less than 10,000, "> Less than 10,000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="10,001 to 15000, "> 10,001 - 15000</label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="15,001 to 25000, "> 15,001 - 25000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="25,001 to 35000, "> 25,001 - 35000 </label>
<label class="checkbox-inline"><input type="checkbox" name="price[]" value="35,001 and more, "> 35,001 and more </label>
</div>
<?php
$price = $_REQUEST['price'];
//for single cell value separte by ,
$p = implode(',',$price);
// for each value
for($i = 0;count($price)<$i;$i++){
// put insert query and value of selected price
$p = $price[$i];
}
?>