Member 14861771 Ответов: 2

Обновление в PHP get an eror


ну, я новичок в php... на данный момент я изучаю базу данных на php и создаю форму, в которую я могу ввести имя пользователя и пароль, выбрать идентификатор, и когда я нажму кнопку Отправить, он обновит мою таблицу в моей базе данных

это та ошибка, которую я получаю:
Запрос не удался у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом " в строке 1


когда я пытаюсь отладить, я понимаю, что проблема заключается в том, что идентификатор верифицируется, он ничего не получает от элемента select

Что я уже пробовал:

<?php
include "db.php";
include "functions.php";
if(isset($_POST['submit'])){
    $username= $_POST['username'];
    $password= $_POST['password'];
    $id= $_POST['id'];
    $query="UPDATE users SET password='$password',username='$username' WHERE id= $id ";
    $result=mysqli_query($connection,$query);//this function return true or false!
    if(!$result){
        die("Query failed".mysqli_error($connection));
    }
}
?>


<!DOCTYPE html>
<html>
<head>
    <title>Doctype</title>
</head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
<body>
<div class="container">
    <div class="col-sm-6">
        <form action="Page1.php" method="post">
            <div class="form-group">
                <label for="username">Username</label>
                <input type="text" class="form-control" name="username">
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" class="form-control" name="password">
            </div>
            <div  class="form-group">
                <select name="id" id="" >
                    <?php
                    global $connection;
                    $query="SELECT * FROM users";
                    $result=mysqli_query($connection,$query);
                    if(!$result){
                        die('Query failed'. mysqli_error());
                    }
                    while ($row = mysqli_fetch_assoc($result)) {
                        $id = $row['id'];
                        echo "<option value=''>$id</option>";
                    }
                    ?>
                </select>
            </div>
            <input class="btn btn-primary" type="submit" name="submit" value="Update" >
        </form>
    </div>
</div>

</body>
</html>

2 Ответов

Рейтинг:
2

Patrice T

$query="UPDATE users SET password='$password',username='$username' WHERE id= $id ";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
0

OriginalGriff

PASSWORD это зарезервированное слово MySQL, и его не следует использовать в качестве имени столбца, если вы это сделаете, то его нужно экранировать с помощью обратных меток:

$query="UPDATE users SET `password`='$password',username='$username' WHERE id= $id ";

Но... никогда не храните пароли в открытом виде - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^] - код на C#, но он довольно очевиден, и вы найдете аналогичный код хэширования для php в интернете.

И помните: если это веб-сайт и у вас есть какие-либо пользователи из Европейского союза, то применяется GDPR, а это означает, что вы должны обрабатывать пароли как конфиденциальные данные и хранить их безопасным и безопасным способом. Текст-это ни то, ни другое, и штрафы могут быть ... ГМ ... выдающийся. В декабре 2018 года немецкая компания получила относительно низкий штраф в размере 20 000 евро именно за это.