Написание одностраничного средства ведения журнала на php

#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']) . " ;");