我一直在寻找表单和其他网站上的最后3天解决方案的问题,当一个复选框没有点击,它不会传递一个值时提交。在发布之前,有很多使用javascript的解决方案来检查该框是否被选中,但我不确定如何使其正确工作。还有很多解决方案使用与复选框相同名称的隐藏文本字段,但是作为其他人在这些帖子中指出的以及我发现的内容,这两个值都已发布,因此在我的情况下它不起作用。PHP复选框,如果您取消选中该框,则不会发布任何内容。可能的解决方案
这是我想出的,我想知道是否有巨大的问题。它可以工作,但是解决方案会以某种方式效率低下。
我也有一个获得$ _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 [“关键字”]数组。我再次知道我必须对此进行消毒。
以下是流程页面的代码。
// 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);
我已经包括数学和不匹配,所以你可以检查代码是否正常工作,它似乎做。我的大问题是:
答:这是一个体面的方式来做到这一点,或者这是一个真正的服务器密集型过程。
和
B.我怎样才能获得$ _POST阵列进行消毒并在in_array()搜索部分使用,你可以看到我试图用已消毒的字符串,但我就不会现在工作,所以我使用$ _POST,我知道这不是一个好主意。
对不起,这是非常长的,但如果这是一个有效的方法来做到这一点,我希望别人有一个很好的解释如何让这个工作。如果没有,我会删除它。
谢谢。
PS
这里是通知消息时,我用的是$ _ POST从消毒字符串。
注意:未定义的变量:email_notice在/usr/local/apache/htdocs/scholarship/rankin/includes/activate_process.php上线77
感谢您的建议,我可以问清楚我的通信是什么意思。其次,我的关键字列表如何在请求和提交之间发生变化,我会认为它必须是是或否,或者这是否适合注入其他信息?我对这个愚蠢的问题表示歉意,但我是一名培训辅导员,这是一种爱好。 – Vincent
指定A =是,B =是,C =否比A =是更明确,B =是+查找关键字= A,B,C。当用户填写表单时,C关键字可能已被别人添加到数据库中。所以他们没有机会选择C,但是数据库保存了C = no,这可能是一个错误的否定。 – Phil
好吧,是的,现在我明白了,这是合乎逻辑的。再次感谢您的帮助和信息。 – Vincent