Обновление поля столбца Mysql из таблицы на основе идентификатора пользователя - PullRequest
2 голосов
/ 06 апреля 2019

Я новичок в PHP и SQL, на данный момент я просто учусь и экспериментирую, не беспокоясь о безопасности.Я пытаюсь обновить имя пользователя и адрес электронной почты на основе идентификатора пользователя.Моя таблица называется users, а столбцы в этой таблице: «id, username, email, password».

Теперь запрос не выполняется, это то, что я делал до сих пор.

<?php
include("db_connect.php");
error_reporting(0);
$email = $_POST['email'];
$username= $_POST['username'];
$id = $_POST['id'];
$sql= "UPDATE users SET username= '.$username.' , email= '.$email.' WHERE id='.$id.' ";
if($_POST['submit']){
     if (mysqli_query($connection, $sql)) {
          echo "<h3><center>User information Updated successfully</center></h3>";
     } 
     else {
          echo " Something went wrong ";
     }
}
?>
<html>
<head>
<title>Add Data</title>
</head>
<body>   
    <form action="update.php" method="POST" style="font-size: 24px; margin-left: 50px;">
        <h4> update user info</h4>
        Username: <input type="text" name="username"  required><br><br>
        Email: <input type="email" name="email"  required><br><br>
        <input style="background:#2CDC10; font-size:18px;" type="submit" name="submit" value="update data"/>
</form>
</html>

1 Ответ

2 голосов
/ 06 апреля 2019

Ваша главная проблема заключается в том, что вы используете синтаксис PHP в вашей строке SQL.Это делает все ваши значения неверными, и поэтому ваше предложение id in where не соответствует ни одной записи, поэтому никакие записи не обновляются.Ваш запрос должен быть

$sql= "UPDATE users SET username= '$username' , email= '$email' WHERE id='$id' ";

или

$sql= "UPDATE users SET username= '" .$username. "' , email= '" . $email . "' WHERE id='" .$id. "' ";

. Это может быть выполнено, но открыто для SQL-инъекций.Вы должны использовать подготовленные операторы, параметризировать их и использовать отчеты об ошибках:

error_reporting(1);
if(isset($_POST['submit']){
     $email = $_POST['email'];
     $username= $_POST['username'];
     $id = $_POST['id'];
     $sql= "UPDATE users SET username=?, email=? WHERE id=?";
     $stmt = mysqli_prepare($connection, $sql)) {
     mysqli_stmt_bind_param($stmt, "ssi", $username, $email, $id);//third i assumes "id" is an integer
     $result = mysqli_stmt_execute($stmt);
     if(!empty($result)) {
          echo "<h3><center>User information Updated successfully</center></h3>";
     } else {
          printf("Error: %s.\n", mysqli_stmt_error($stmt));
     }
}

Это грубый непроверенный ответ.Более подробную информацию о подготовленных заявлениях можно найти здесь, http://php.net/manual/en/mysqli.quickstart.prepared-statements.php.

...