Я искал последние 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 в /usr/local/apache/htdocs/scholarship/rankin/includes/activate_process.php в строке 77
Я бы сосредоточился на том, чтобы заставить клиентскую часть работать правильно. Избегать двойной публикации на проверенном флажке, безусловно, возможно и делает ваши связи более явными.
В вашем коде подробно описан подход, который подразумевает отсутствие пропущенных ключевых слов. Оба метода хороши, но ваш неявный метод не рекомендуется, если есть вероятность, что ваш список ключевых слов может измениться между запросом формы и отправкой.
Проблема A: флажок снят и ничто не опубликовано, можно установить disabled
Если флажок атрибут не установлен, отключенный элемент формы не будет отправлять свое значение на сервер при отправке формы.
Можете ли вы предоставить больше отладочной информации по проблеме B (var_dump $_POST['keywords']
и так далее )? По вашим кодам сейчас очень трудно определить причину проблемы B.