【问题标题】:Have HTML form with text and checkbox - how do I post checkbox responses to Mysql table有带有文本和复选框的 HTML 表单 - 如何将复选框响应发布到 Mysql 表
【发布时间】:2023-03-19 16:21:02
【问题描述】:

我有一个包含多个不同文本和复选框字段的 HTML 表单。我将文本字段发布到正确的表格,但复选框响应根本没有发布(打算发布到单独的表格)。

这是我的 HTML 表单:

    <!Doctype html>
    <html>
    <?php include 'C:\xampp\htdocs\paxdb\head.php'; 
    include 'config/menu.php';?> 
    <div id="dataentry">
    <!--This section is the demographic text field area-->
    <form method="post" action="dataentered.php">
    First Name:&nbsp;<input type="text" id="First_Name" name="First_Name"/></br>
    </br>
    Last Name:&nbsp;<input type="text" id="Last_Name" name="Last_Name"/></br>
    </br>
    E-mail:&nbsp;<input type="text" id="email" name="email"/></br>
    </br>

    <!--This section is the age range checkbox selection area-->
    <p><u><b>Age Range</b></u></p>
    <input type="checkbox" name="age[]" id="20-25" value="1"/>&nbsp;20-25</br>
    <input type="checkbox" name="age[]" id="26-30" value="1"/>&nbsp;26-30</br>
    <input type="checkbox" name="age[]" id="31-35" value="1"/>&nbsp;31-35</br>
    <input type="checkbox" name="age[]" id="36-40" value="1"/>&nbsp;36-40</br>
    <input type="checkbox" name="age[]" id="41-45" value="1"/>&nbsp;41-45</br>
    </div>

<p><u><b>What City or region would you like to visit in the US or Canada?:</b></u></p>
<textarea name="comment2" rows="4" cols="50"></textarea>

<?php include 'footer.php';?>       
        </div>
    </body>
</html>

这是我正在尝试的 PHP 代码,但只有文本字段可以工作:

<html>
<?php
$host="localhost";
$username="someusername";
$password="somepassword";
$dbname="somedbname";

$dbc = mysql_connect($host, $username, $password, $dbname);
if (!$dbc)
{
    die('Error connecting to MySQL server' . mysql_error());
    }
mysql_select_db($dbname, $dbc);

//send pax data to pax database table
$first_name=$_POST['First_Name'];   
$last_name=$_POST['Last_Name'];
$email=$_POST['email'];

mysql_query("INSERT INTO pax (First_Name, Last_Name, email)
VALUES('$first_name','$last_name','$email')"); 

//send age checkbox data to age database table
$age = $_POST['age'];
foreach($age as $range) mysql_query("INSERT INTO age ($age) VALUES ('$range')") or die (mysql_error());


mysql_close($dbc);

感谢任何帮助。

编辑澄清一下: mysql 表 'age' 具有以下字段: age_id(键), pax_id(表单开头的文本字段数据的索引), 20-25 26-30 以此类推。

【问题讨论】:

  • 你有一个 SQL 注入漏洞。
  • 您的输入毫无意义 - ID 不会在 httpd 请求中发送,因此您将得到的只是一系列 1 值,而不是 20-25 类型的值。例如如果选中任何复选框,则您发送的值意味着所有复选框都已选中。

标签: php mysql html checkbox


【解决方案1】:

在您尝试实际运行 mysql 查询之前,您应该进行测试以确保您正在构建的查询中包含正确的信息。

你可以这样做来快速检查:

foreach($age as $range) {
    print "INSERT INTO age ($age) VALUES ('$range')";
}

此外,您不应该将$_POST 数据直接粘贴到您的查询中,有人可以轻松地将 SQL 代码写入字段并删除您的数据库。查找“mysql输入卫生”的话题

【讨论】:

  • 谢谢 - 将记住打印代码。我不那么担心 sql 注入……它将在一个几乎不知道 excel 的人的办公室中保持本地主机,更不用说 sql。
  • 没有经验的计算机用户和 hacky 的人可能会产生类似的效果 - 他们最终会通过使用会破坏表单的字符来破坏您的文本字段
【解决方案2】:

我已经为你编辑了代码

<!Doctype html>
<html>
<?php include 'C:\xampp\htdocs\paxdb\head.php'; 
include 'config/menu.php';?> 
<div id="dataentry">
<!--This section is the demographic text field area-->
<form method="post" action="dataentered.php">
First Name:&nbsp;<input type="text" id="First_Name" name="First_Name"/></br>
</br>
Last Name:&nbsp;<input type="text" id="Last_Name" name="Last_Name"/></br>
</br>
E-mail:&nbsp;<input type="text" id="email" name="email"/></br>
</br>

<!--This section is the age range checkbox selection area-->
<p><u><b>Age Range</b></u></p>
<!-- Change your checkbox value -->
<input type="checkbox" name="age[]" id="20-25" value="20-25"/>&nbsp;20-25</br>
<input type="checkbox" name="age[]" id="26-30" value="26-30"/>&nbsp;26-30</br>
<input type="checkbox" name="age[]" id="31-35" value="31-35"/>&nbsp;31-35</br>
<input type="checkbox" name="age[]" id="36-40" value="36-40"/>&nbsp;36-40</br>
<input type="checkbox" name="age[]" id="41-45" value="41-45"/>&nbsp;41-45</br>
</div>

<p><u><b>What City or region would you like to visit in the US or Canada?:</b></u></p>
<textarea name="comment2" rows="4" cols="50"></textarea><br/>
<input type="submit" name="submit" value="Submit"/>
<?php include 'footer.php';?>       
</div>
</body>
</html>

您不能像在 INSERT 语句中所做的那样将数组($age)直接插入数据库...我所做的解决方案之一是将数组转换为字符串,然后将其插入数据库,如图所示...

<?php
$host="localhost";
$username="someusername";
$password="somepassword";
$dbname="somedbname";

$dbc = mysql_connect($host, $username, $password, $dbname);
if (!$dbc)
{
    die('Error connecting to MySQL server' . mysql_error());
}
mysql_select_db($dbname, $dbc);

//send pax data to pax database table
$first_name=$_POST['First_Name'];   
$last_name=$_POST['Last_Name'];
$email=$_POST['email'];

mysql_query("INSERT INTO pax (First_Name, Last_Name, email)
VALUES('$first_name','$last_name','$email')"); 

//send age checkbox data to age database table
$age = $_POST['age'];
$my_range = "";
foreach($age as $range)
$my_range = $my_range . $range . " ";
//You have written this query wrong
mysql_query("INSERT INTO age(age) VALUES ('$my_range')") or die (mysql_error());

mysql_close($dbc);

在从数据库中检索它时,您可以使用 expode() 来获取每个年龄范围...这里是示例代码

$range_string = "20-25 26-30 31-35";
$range_array = explode(" ", $range_string);
echo $range_array [0]; // 20-25
echo $range_array [1]; // 26-30
echo $range_array [2]; // 31-35

您可能还想查看http://www.html-form-guide.com/php-form/php-form-checkbox.html 以获取有关复选框的一些信息...

希望对你有帮助

【讨论】:

  • 感谢您的帮助和附加链接(我想我在谷歌上搜索了三天,之前没有遇到过该网站)。我按照建议输入了您的编码并收到以下错误消息:“字段列表”中的未知列“年龄” mysql表是“年龄”(不带引号);所以,我不知道为什么它无法理解 html 编码 name="age[]"。
  • 我应该为列表中的每个都取出 id="20-25" 等,因为这是由值控制的吗?澄清一下:表'age'有以下字段...age_id,pax_id(这是表格开头的文本字段数据的索引),然后年龄范围作为单独的字段... 20-25, 26-30 以此类推。
  • 我只是想让代码在复选框表单中选择的年龄范围内放置一个“1”。
  • 是的!就是这样,表格不应该包含每个年龄范围的字段,然后只需勾选每个范围,因为它被选中,但让复选框将选定的年龄范围插入到与用户 ID 关联的表格中。非常感谢 Riten 对代码的帮助并引导我正确的方向。现在可以了!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多