Команда обновления MySQL не работает в PHP - PullRequest
0 голосов
/ 06 мая 2018

Это моя первая очень простая обучающая php-программа, я подключил свой PHP к MySQL Server и Insert, Delete работает отлично, но у Update есть некоторые проблемы. Когда я нажимаю кнопку обновления ничего не происходит. Имя моей базы данных - ddb3, имя таблицы - student1. Сервер Apache, который я использую, размещается через Xampp. mysql_error(); не показывает ошибок, а также ошибок в лог-файле apache

<?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("ddb3");

    if(isset($_POST['submit'])) {
        $name = $_POST['name'];
        $age = $_POST['age'];
        mysql_query("INSERT INTO student1(name, age) VALUES ('$name', '$age');");
    }
    if(isset($_POST['delete'])) {
        $name = $_POST['name'];
        mysql_query("DELETE FROM student1 WHERE name = '$name';");
    }
    if(isset($_POST['update'])) {
        $name = $_POST['name'];
        $age = $_POST['age'];
        mysql_query("UPDATE student1 SET name = '$name' WHERE age = '$age';");
    }
?>
<html>
    <body>
        <center>
            <form name='f1' action='prog3.php' method='post'>
                <b>Name:<b><input type="text" name="name" size="20"><br>
                <b>Age:<b><input type="text" name="age" size="5"><br>
                <input type="submit" name="submit" value="Insert to Table"/>
                <input type="submit" name="delete" value="Delete from Table"/>
                <input type="submit" name="update" value="Update Row"/>
            </form>
        </center>
        <?php
            echo "<table align='center' name='t1' border='1' width=500px>
                  <tr><th>NAME</th><th>AGE</th></tr>";
            $select = mysql_query("SELECT * FROM student1");
            while($colmn = mysql_fetch_array($select)) {
                echo "<tr><td>$colmn[0]</td><td>$colmn[1]</td></tr>";
            }
            echo "<table>";
        ?>
    </body>
</html>

1 Ответ

0 голосов
/ 06 мая 2018

Описание наблюдаемого поведения как «не работающего» или «ничего не происходит» дает очень мало полезной информации при определении что является реальной проблемой.

(Как вы определяете, что «ничего не происходит» или «не работает»?)

Я предлагаю добавить некоторые выходные данные отладки (например, echo или var_dump) в определенных точках кода, чтобы определить, какой путь в коде берется. (Установлено $_POST['update']? Условие if оценивается как ИСТИНА?)

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/

Замечу, что очень странно, что мы изменили бы name из student на основе age. Например, это утверждение будет пытаться присвоить одно и то же имя каждому ученику определенного возраста ...

UPDATE student1
   SET name = 'Ted'
  WHERE age = '19'

Было бы очень странно сделать это. SQL действителен. Странно то, что , какие строки изменяются (все строки, имеющие возраст = 19), и применяемое изменение (изменение имени всех строк на одно и то же значение.)

Не имеет значения, если ученика зовут Джек, или Джилл, или что-то еще. Каждая строка в таблице со значением возраста 19 будет изменена.


Обычно мы не храним «возраст» в виде столбца, а вместо этого сохраняем дату рождения (доб). DOB не изменится. Но возраст изменится; age - это разница между DOB и текущей (или некоторой указанной датой «по состоянию») датой. Возраст в годах? Возраст в месяцах или днях?


Если мы настаиваем на сохранении возраста, то гораздо вероятнее, что столбец age изменит столбец имени.

Чтобы определить , какая строка должна быть обновлена ​​... name уникальна? Могут ли быть две или более строки с одинаковыми name?

Возможно, нам нужен какой-то уникальный идентификатор учащегося, и мы используем его в обновлении UPDATE.

UPDATE student1 s 
   SET s.some_col = 'new_value'
 WHERE s.id = 'unique_identifier'

Do not использовать устаревший интерфейс mysql_ для новой разработки. Используйте PDO. (Или используйте mysqli _).

Также используйте подготовленные операторы с заполнителями связывания для смягчения уязвимостей SQL-инъекций. Если по какой-то непостижимой причине мы не можем этого сделать, то как минимум любые потенциально небезопасные значения, включенные в текст SQL , должны быть должным образом экранированы.

Маленькие столики Бобби https://xkcd.com/327/

OWASP Project SQL Injection https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...