我一直在尋找表單和其他網站上的最後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