Все в базе данных обновляется вместо одной строки - PullRequest
0 голосов
/ 04 сентября 2018

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

У меня есть этот код

    include 'db.php';
session_start();
session_regenerate_id();
if (!$_SESSION['logged_in'] == true) {
    $_SESSION['message'] = "You must be logged in to use this section";
    header("location: error.php");
}
if (isset($_POST['uupdate'])) {
    $username = $_POST['uusername'];
    $email = $_POST['uemail'];
    if (isset($_POST['uusername'])) {
        try {


$query = $connect->prepare("UPDATE users SET username='$username' WHERE id = '$id'");
        $check = $query->fetch();
    $id = $check['id'];
        $query->execute(array($username));
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
        if (isset($_POST['uemail'])) {
        try {
        $query = $connect->prepare("UPDATE users SET email='$email' LIMIT 1");
        $query->execute(array($email));
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}
}

Я понятия не имею, как обновить пользователя, используя идентификатор. Если у кого есть решение, пожалуйста, поделитесь.

Ответы [ 4 ]

0 голосов
/ 04 сентября 2018

Вы должны определить, какую строку обновить:

Вы можете использовать ID:

$query = $connect->prepare("UPDATE users SET email='$email' WHERE id='{$id}' LIMIT 1");

Или используйте имя пользователя:

$query = $connect->prepare("UPDATE users SET email='$email' WHERE username='{$username}' LIMIT 1");

Вы также используете неправильно подготовить / выполнить функцию . Чтобы безопасно связать параметры с запросом, вы можете сделать это следующим образом:

$query = $connect->prepare("UPDATE users SET email=:email WHERE id=:id LIMIT 1");
$query->execute(array('id'=>$id, 'email'=>$email));

PHP 7> В PHP 7 или выше вы можете изменить array () на [] следующим образом:

$query->execute(['id'=>$id, 'email'=>$email]);
0 голосов
/ 04 сентября 2018

Вам необходимо указать, какую строку таблицы вы хотите обновить. Вы можете сделать это, используя предложение WHERE. Обычно вы используете id пользователя в предложении WHERE.

Пример:

Чтобы изменить адрес электронной почты пользователя с именем пользователя Bob на newemail@mail.com, вы можете использовать следующий запрос:

UPDATE users SET email='newemail@mail.com' WHERE username='Bob'

0 голосов
/ 04 сентября 2018

Конечно, вам не хватает условия where, поэтому все записи обновляются. Вы должны явно указать, какую строку обновлять.

Возможно, имя пользователя и адрес электронной почты уникальны, поэтому предположим, что $old_email и $old_username - это старые значения для пользователя, которого вы обновляете, тогда вам следует изменить запросы на:

UPDATE users SET username='$username' WHERE username ='$old_username'

и

UPDATE users SET email='$email' WHERE email ='$old_email'

соответственно.

Ссылка на условие where в официальной документации

0 голосов
/ 04 сентября 2018
$connect->prepare("UPDATE users SET username='$username' LIMIT 1");

Отсутствует предложение WHERE. Вам нужно добавить WHERE id = "$ id", и вам нужно откуда-то получить $ id, может быть, $ _SESSIOn из $ _POST, но эта часть вашей архитектуры здесь не видна.

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