Редактировать содержимое базы данных MySQL на основе имени пользователя?

#php #mysql #database

#php #mysql #База данных

Вопрос:

Итак, у меня очень поверхностное понимание PHP / MySQL (например, степень моего понимания — это то, сколько я смог сохранить из нескольких руководств), и я хочу немного расширить эти руководства. Мне было интересно, как это сделать: скажем, у меня есть один PHP-скрипт, который отвечает за вход пользователя, как показано ниже:

     $row = $stmt->fetch();
    if ($row) {
        if (crypt($_POST['password'],$row['password'])  === $row['password']) {
            $login_ok = true;
        }
    }

    if ($login_ok) {
    header("Location: sample.php");
    exit;
    die(json_encode($response));
    } else {
        $response["success"] = 0;
        $response["message"] = "Invalid Credentials!";
        die(json_encode($response));
    }
} else {
?>
        <h1>Login</h1> 
        <form action="login.php" method="post"> 
            Username:<br /> 
            <input type="text" name="username" placeholder="username" /> 
            <br /><br /> 
            Password:<br /> 
            <input type="password" name="password" placeholder="password" value="" /> 
            <br /><br /> 
            <input type="submit" value="Login" /> 
        </form> 
  

Это не весь PHP-скрипт, но, вероятно, то, что имеет значение. Он успешно извлекает введенные имена пользователей и зашифрованные пароли из базы данных и переходит к следующему PHP-скрипту, если они совпадают.

Теперь перейдем к следующему PHP-скрипту, который вставляет данные в два других столбца в той же таблице рядом со столбцами «имя пользователя» и «пароль»:

 <?php 
    require("config.inc.php");
    if (!empty($_POST)) {
    $query = "INSERT INTO table ( test1, test2) VALUES ( :sample, :othersample)";
    $query_params = array(
        ':sample' => $_POST[‘test1’],
        ':othersample' => $_POST[‘test2’]    );
        try {
        $stmt   = $db->prepare($query);
        $result = $stmt->execute($query_params);

    }
    catch (PDOException $ex) {
        $response["success"] = 0;
        $response["message"] = "Database Error2. Please Try Again!";
        die(json_encode($response));
    }
     $response["success"] = 1;
    $response["message"] = "Data has been stored!"; 
    echo json_encode($response);
        }
 else
    {
    ?>

<form action="sample.php" method="post">
  Test Value 1:<br />
  <input type="text" name="test1" value="" />
  <br />
  <br />
  Test Value 2:<br />
  <input type="text" name="test2" value="" />
  <br />
  <br />
  <input type="submit" value="Submit values" />
</form>
<?php
}
?>
  

При этом также сохраняются две записи в базе данных, но в другой строке, чем в строке с сохраненным именем пользователя и паролем. Я понимаю, почему это было бы сделано, но, по сути, я спрашиваю, как я могу сделать так, чтобы две записи с тестовым значением хранились в той же строке, что и строка имени пользователя и пароля, в зависимости от того, кто вошел в систему. Если ‘user1’ вошел в систему, я бы хотел, чтобы его значения test1 и test2 отображались в отдельной строке.

Заранее спасибо, сообщество stackoverflow. Если этот вопрос уже задавался, я приношу извинения и буду признателен за любые ссылки на них.

Комментарии:

1. после входа пользователя в систему сохраните user_id в сеансах, чтобы вы могли использовать его при другой вставке / обновлении.

Ответ №1:

Вам нужно использовать СЕАНСЫ для хранения пользователя.

Итак, в верхней части всех ваших файлов php включают

   session_start();
  

Затем в этой строке …. захватить информацию о пользователях. Все, что вы хотите…

 if (crypt($_POST['password'],$row['password'])  === $row['password']) {
        $_SESSION['username'] = $row['username'];
        $_SESSION['user_id'] = $row['id'];
        $login_ok = true;
    }
  

Теперь у вас есть доступ к этому пользователю, пока они вошли в систему.

Затем повторно введите их на этой другой странице и используйте это, чтобы изменить их строку в БД

 session_start();
require("config.inc.php");
if (!empty($_POST)) {
$query = "UPDATE table SET sample=:test1, othersample=:test2 WHERE id = '".$_SESSION['user_id']."'";
$stmt   = $db->prepare($query);
$stmt->bindParam(":test1",$_POST['test1']);
$stmt->bindParam(":test2",$_POST['test2']);
$result = $stmt->execute();
  

Комментарии:

1. Это недопустимый SQL. Вы не можете использовать WHERE with INSERT . Вам нужно изменить оператор на UPDATE .

2. Я уже это сделал, возможно, вы видите старое сообщение или обновляете свою страницу?

3. Молодец! Ты сделал меня ниндзя за 60 секунд, которые потребовались, чтобы написать предыдущий комментарий 😉

4. потрясающий, потрясающий ответ. Я не могу поддержать вас из-за необходимости получения 15 очков репутации, но я надеюсь, что другие люди это сделают.

Ответ №2:

Чтобы создать новую строку в таблице, которую вы используете INSERT . Чтобы обновить существующую строку в таблице, которую вы используете UPDATE .

Предполагая, что ваша таблица пользователей выглядит примерно так…

 id | username   | password | test1 | test2
---|------------|----------|-------|------
1  | moonwizard | asdjkhfa |       |
2  | fred186    | jdwer3fv |       |
  

… ваш запрос должен выглядеть следующим образом:

 $query = "update table set test1 = :sample, test2= :othersample where id = :id";
  

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

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