Невозможно обновить таблицу SQL через php - PullRequest
0 голосов
/ 23 апреля 2019

Это код, который я использую, чтобы попытаться обновить запись. Я не вижу никаких проблем, но это не выдает ошибку и заявляет, что она прошла успешно. Я пробовал пару других методов, которые делают то же самое, он просто не обновляет строку в таблице MSSQL. База данных / таблица является локальной на моей машине под управлением Windows 10 и IIS (я знаю !!).

<?php

/**
 * Use an HTML form to edit an entry in the
 * users table.
 *
 */

 require "C:\inetpub\wwwroot\Remediation\config.php";
 require "C:\inetpub\wwwroot\Remediation\common.php";

 if (isset($_POST['submit'])) {
   if (!hash_equals($_SESSION['csrf'], $_POST['csrf'])) die();

   try {
     $connection = new PDO($dsn, $username, $password);

     $user =[
       "id"        => $_POST['id'],
       "firstname" => $_POST['firstname'],
       "lastname"  => $_POST['lastname'],
       "email"     => $_POST['email'],
       "age"       => $_POST['age'],
       "location"  => $_POST['location'],
       "date"      => $_POST['date']
     ];

     $sql = "UPDATE users
             SET id = :id,
               firstname = :firstname,
               lastname = :lastname,
               email = :email,
               age = :age,
               location = :location,
               date = :date
             WHERE id = :id";

   $statement = $connection->prepare($sql);
   $statement->execute($user);
   } catch(PDOException $error) {
       echo $sql . "<br>" . $error->getMessage();
   }
 }

 if (isset($_GET['id'])) {
   try {
     $connection = new PDO($dsn, $username, $password);
     $id = $_GET['id'];
     $sql = "SELECT * FROM users WHERE id = :id";
     $statement = $connection->prepare($sql);
     $statement->bindValue(':id', $id);
     $statement->execute();

     $user = $statement->fetch(PDO::FETCH_ASSOC);
   } catch(PDOException $error) {
       echo $sql . "<br>" . $error->getMessage();
   }
 } else {
     echo "Something went wrong!";
     exit;
 }
 ?>    

 <?php if (isset($_POST['submit']) && $statement) : ?>
    <blockquote><?php echo escape($_POST['firstname']); ?> successfully 
 updated.</blockquote>
 <?php endif; ?>

 <h2>Edit a user</h2>

 <form method="post">
     <input name="csrf" type="hidden" value="<?php echo 
   escape($_SESSION['csrf']); ?>">
     <?php foreach ($user as $key => $value) : ?>
       <label for="<?php echo $key; ?>"><?php echo ucfirst($key); ?></label>
        <input type="text" name="<?php echo $key; ?>" id="<?php echo $key; ?>" value="<?php echo escape($value); ?>" <?php echo ($key === 'id' ? 'readonly' : null); ?>>
     <?php endforeach; ?>
     <input type="submit" name="submit" value="Submit">
 </form>

Где именно я иду не так? Я могу подключиться, delte и создать просто отлично. Нужно ли настроить $ USER или запрос?

Ответы [ 3 ]

0 голосов
/ 23 апреля 2019

Я не вижу INSERT. Вместо этого вы используете только UPDATE, что означает, что существующая запись изменяется только. Вы этого хотите?

 $sql = "UPDATE users
         SET id = :id,
           firstname = :firstname,
           lastname = :lastname,
           email = :email,
           age = :age,
           location = :location,
           date = :date
         WHERE id = :id";

Здесь вы выбираете (все) записи с помощью id = :id, а здесь SET id = :id вы устанавливаете id на уже установленное значение. Это не нарушает что-то, но это намек на то, что в вашей логике что-то не так.

Кстати, вы разрешаете каждому клиенту изменять записи. Не SQL-инъекция, но, скорее всего, очень плохо.

0 голосов
/ 23 апреля 2019

Я сделал ошибку новичка, я пытался обновить столбцы идентификаторов и меток времени в MSSQL, что недопустимо.Я изменил свой код для этого, и он работал прекрасно:

   $user =[
     "id"        => $_POST['id'],
     "firstname" => $_POST['firstname'],
     "lastname"  => $_POST['lastname'],
     "email"     => $_POST['email'],
     "age"       => $_POST['age'],
     "location"  => $_POST['location'],
           ];

   $sql = "UPDATE users
           SET firstname = :firstname,
             lastname = :lastname,
             email = :email,
             age = :age,
            location = :location
           WHERE id = :id";
0 голосов
/ 23 апреля 2019

Пробовал ли вы этот запрос непосредственно в студии управления MSSQL?

После этого, и вы видите, что он работает нормально, попробуйте "повторить" ваши переменные POST, чтобы проверить, правильно ли вы их получаете.

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