PHP 如果取消选中复选框,则不会发布任何内容。可能的解决方案
PHP Checkbox if you uncheck the box nothing gets posted. Possible solution
最近 3 天我一直在表单和其他网站上寻找解决方案,以解决未单击复选框时提交时不会传递值的问题。有很多解决方案使用 javascript 来检查该框是否被选中,然后再发布,但我不确定如何让它正常工作。还有许多使用与复选框同名的隐藏文本字段的解决方案,但正如这些帖子中的其他人所指出的以及我所发现的那样,这两个值都已发布,因此在我的情况下它不起作用。
这是我想出的,我想知道它是否有很大的问题。它有效,但解决方案是否会以某种方式效率低下。
我在清理 $_POST[] 数组时也遇到了问题,也许有人知道为什么经过清理的值在 in_array() 中不起作用。
所以我就是这样做的。
首先,当我创建表单时,我是动态创建的,并从数据库中为复选框分配了现有值。
include('connect.php');
$sql = "SELECT * FROM scholarships WHERE schools='both' OR schools='Rankin'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr>"."<td>".$row['sch_name']."</td>"."<td>".$row['category']."</td>"."<td>".$row['date']."</td>"."<td>".$row['activate']."</td>"."<td>";
?>
<li><input type="checkbox" name="keywords[]" value="<? echo $row['id']; ?>" title="option1"
<?
// this puts a check in the box if it is in the database
if($row['activate']=="Yes")
{
echo "checked"."="."\"Checked\"";
}
else
{
// allows for not check value
}
?>
/></li><br />
<?
echo "</td>"."</tr>";
}
} else {
echo "0 results";
}
$conn->close();
接下来我将其发布到一个处理页面,我在其中创建了两个循环,一个用于读取数据库中的现有值,另一个用于将其与 $_POST['keywords'] 数组进行比较。我再次知道我必须对此进行消毒。
这是流程页面的代码。
// sanitize the restults from the form
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
// conect to the database
include('connect.php');
// check to see what values were actually check
foreach($_POST['keywords'] as $keyword)
{
echo $keyword."<br>";
}
echo "<hr>";
// get the list of values from database table to compare
$sql = "SELECT * FROM scholarships WHERE schools='both' OR schools='Rankin'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$key=$row['id'];
if (in_array($key, $_POST['keywords'], TRUE))
{
echo $row['id']." "."Match found<br>";
$id = $row['id'];
// update records if a match is found to value Yes
$sql2 = "UPDATE scholarships SET activate='Yes' WHERE id=$id";
if (mysqli_query($conn, $sql2)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
}
else
{
echo $row['id']." "."Match not found<br>";
$id = $row['id'];
$sql2 = "UPDATE scholarships SET activate='0' WHERE id=$id";
if (mysqli_query($conn, $sql2)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
}
}
} else {
echo "0 results";
}
echo "<hr>";
mysqli_close($conn);
我已经包括了一个数学但不匹配所以你可以检查代码是否正常工作,它看起来确实如此。我的大问题是:
一个。这是执行此操作的体面方法,还是这真的是服务器密集型过程。
和
乙。我怎样才能清理 $_POST 数组并在 in_array() 搜索部分中使用你可以看到我尝试使用清理过的字符串,但那是行不通的,所以现在我使用了我知道的 $_POST这不是一个好主意。
抱歉,这真的很长,但如果这是一种有效的方法,我希望其他人能够很好地解释如何让它发挥作用。如果没有我会删除它。
谢谢。
PS
这是我使用经过清理的字符串中的 $_Post 时的通知消息。
注意:未定义变量:email_notice in /usr/local/apache/htdocs/scholarship/rankin/includes/activate_process.php on line 77
问题 A:未选中复选框,通过将复选框上的 disabled
属性设置为未选中,无法发布任何内容,禁用的表单元素在提交表单时不会将其值发送到服务器。
能否提供更多关于问题 B 的调试信息(var_dump $_POST['keywords']
等等)?现在根据您的代码,确定导致问题B的原因非常微妙。
我会专注于让客户端 js 正常工作。避免在选中的复选框上重复发布绝对是可能的,并且可以使您的交流更加明确。
您的代码详细说明了一种方法,该方法暗示对缺失关键字的否定。这两种方法都很好,但如果您的关键字列表在请求表单和提交之间有任何可能发生变化,则不推荐使用隐式方法。
最近 3 天我一直在表单和其他网站上寻找解决方案,以解决未单击复选框时提交时不会传递值的问题。有很多解决方案使用 javascript 来检查该框是否被选中,然后再发布,但我不确定如何让它正常工作。还有许多使用与复选框同名的隐藏文本字段的解决方案,但正如这些帖子中的其他人所指出的以及我所发现的那样,这两个值都已发布,因此在我的情况下它不起作用。
这是我想出的,我想知道它是否有很大的问题。它有效,但解决方案是否会以某种方式效率低下。
我在清理 $_POST[] 数组时也遇到了问题,也许有人知道为什么经过清理的值在 in_array() 中不起作用。
所以我就是这样做的。
首先,当我创建表单时,我是动态创建的,并从数据库中为复选框分配了现有值。
include('connect.php');
$sql = "SELECT * FROM scholarships WHERE schools='both' OR schools='Rankin'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr>"."<td>".$row['sch_name']."</td>"."<td>".$row['category']."</td>"."<td>".$row['date']."</td>"."<td>".$row['activate']."</td>"."<td>";
?>
<li><input type="checkbox" name="keywords[]" value="<? echo $row['id']; ?>" title="option1"
<?
// this puts a check in the box if it is in the database
if($row['activate']=="Yes")
{
echo "checked"."="."\"Checked\"";
}
else
{
// allows for not check value
}
?>
/></li><br />
<?
echo "</td>"."</tr>";
}
} else {
echo "0 results";
}
$conn->close();
接下来我将其发布到一个处理页面,我在其中创建了两个循环,一个用于读取数据库中的现有值,另一个用于将其与 $_POST['keywords'] 数组进行比较。我再次知道我必须对此进行消毒。
这是流程页面的代码。
// sanitize the restults from the form
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
// conect to the database
include('connect.php');
// check to see what values were actually check
foreach($_POST['keywords'] as $keyword)
{
echo $keyword."<br>";
}
echo "<hr>";
// get the list of values from database table to compare
$sql = "SELECT * FROM scholarships WHERE schools='both' OR schools='Rankin'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$key=$row['id'];
if (in_array($key, $_POST['keywords'], TRUE))
{
echo $row['id']." "."Match found<br>";
$id = $row['id'];
// update records if a match is found to value Yes
$sql2 = "UPDATE scholarships SET activate='Yes' WHERE id=$id";
if (mysqli_query($conn, $sql2)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
}
else
{
echo $row['id']." "."Match not found<br>";
$id = $row['id'];
$sql2 = "UPDATE scholarships SET activate='0' WHERE id=$id";
if (mysqli_query($conn, $sql2)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
}
}
} else {
echo "0 results";
}
echo "<hr>";
mysqli_close($conn);
我已经包括了一个数学但不匹配所以你可以检查代码是否正常工作,它看起来确实如此。我的大问题是:
一个。这是执行此操作的体面方法,还是这真的是服务器密集型过程。
和
乙。我怎样才能清理 $_POST 数组并在 in_array() 搜索部分中使用你可以看到我尝试使用清理过的字符串,但那是行不通的,所以现在我使用了我知道的 $_POST这不是一个好主意。
抱歉,这真的很长,但如果这是一种有效的方法,我希望其他人能够很好地解释如何让它发挥作用。如果没有我会删除它。
谢谢。
PS
这是我使用经过清理的字符串中的 $_Post 时的通知消息。
注意:未定义变量:email_notice in /usr/local/apache/htdocs/scholarship/rankin/includes/activate_process.php on line 77
问题 A:未选中复选框,通过将复选框上的 disabled
属性设置为未选中,无法发布任何内容,禁用的表单元素在提交表单时不会将其值发送到服务器。
能否提供更多关于问题 B 的调试信息(var_dump $_POST['keywords']
等等)?现在根据您的代码,确定导致问题B的原因非常微妙。
我会专注于让客户端 js 正常工作。避免在选中的复选框上重复发布绝对是可能的,并且可以使您的交流更加明确。
您的代码详细说明了一种方法,该方法暗示对缺失关键字的否定。这两种方法都很好,但如果您的关键字列表在请求表单和提交之间有任何可能发生变化,则不推荐使用隐式方法。