#php #mysql
#php #mysql
Вопрос:
Я создаю небольшую веб-страницу php, которую я планирую использовать для отслеживания того, по каким темам служба поддержки получает вызовы. В моей базе данных есть 3 важных поля: id, имя и сумма для каждого субъекта.
На моей странице у меня есть форма с выпадающим списком, в котором вы выбираете тип вызова и нажимаете отправить. Идея заключается в том, что каждый раз, когда вы нажимаете отправить, страница перезагружается, и количество в базе данных для выбранного идентификатора увеличивается на 1.
Форма дает мне идентификатор и имя для каждого вызова:
<form method="post" action="index.php">
<select class="select" id="calltype" name="calltype">
<?php
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<option value=".$row["ID"].">".$row["NAAM"]."</option>".PHP_EOL;
}
}
?>
</select></br>
<input class="input" type="submit" name="Submit" value="Submit">
</form>
Эта часть работает, если я повторяю $_POST[‘calltype’], я получаю правильный идентификатор. То, что я не могу заставить работать, — это оператор update, который я хочу увеличить счетчик, например:
if(isset($_POST['calltype']{
mysqli_query("UPDATE calls SET amount=(amount 1), WHERE id = $_POST['calltype']");
}
Как бы я это сделал? Я пробовал несколько методов, но не могу заставить его работать
Комментарии:
1. Есть ли какие-либо ошибки в вашем журнале ошибок?
2. Во-первых, ваш код широко открыт для внедрения SQL. Итак, мы не знаем, что вы на самом деле пытаетесь выполнить с базой данных. Кроме того, вы не проверяете наличие ошибок в базе данных. Если
mysqli_query()
возвращаетсяfalse
, вам нужно выяснить, в чем ошибка. Вероятно, база данных пытается сообщить вам, что не так.3. (Подсказка: у вас неправильная запятая в вашем SQL-операторе. Похоже на опечатку.)
4. Если вы изучаете PHP и доступ к базе данных, я предлагаю использовать PDO, а не mysqli. Почему? Он скрывает множество низкоуровневых «гаек и болтов», которые вам нужно использовать с mysqli. Например, все ORM построены поверх него. Я рекомендую: руководство по PDO для правильного понимания и использования PDO.
Ответ №1:
помимо дополнительной запятой, интерполяция с помощью массива POST, подобного этому, является рискованной. может быть, попробовать:
mysqli_query("UPDATE calls SET amount=(amount 1) WHERE id = " . mysqli_real_escape_string($link, $_POST['calltype']) . " ;");