Как обновить данные из таблицы с помощью ajax, jquery и php?

Может ли кто-нибудь помочь с моим PHP и jQuery? Я пытаюсь изменить свой пароль с помощью PHP, jQuery и Ajax. Я знаю, что этот метод довольно странный. Но я хочу больше узнать об Ajax, jQuery с PHP. Я хочу ОБНОВИТЬ свой пароль, не показывая и не вводя текущий пароль. Я хочу, чтобы мое текстовое поле было пустым, и если я что-то введу, он изменит мой пароль в моей таблице db. Не нужно вводить мой текущий пароль. Моя проблема в том, что мой пароль не обновился. Как я могу обновить свой пароль к базе данных? зависит от того, кто логин.

<?php 
     $conn = new mysqli("localhost", "root", "", "mydb");
 if (isset($_POST["btnChange"])) {
        $checkUser = $conn->query("SELECT * FROM tbl_user WHERE id= $_SESSION[id]");
        if ($checkUser->num_rows > 0) {
            $conn->query("UPDATE tbl_user SET password = '$_POST[new_password]' WHERE id= $_SESSION[id]");
            echo "Update Successfully!";
        }
    }
?>

$(document).ready(function(){

	$("#btnChange").click(function(){
		$.ajax({
			url:"insert.php",
			method:"post",
			data:{btnChange: "", new_password: $("#new_password").val(),},
			success: function(data){
				alert(data);
			}
		});
	});
});
<!DOCTYPE html>
<html>
    <head>
        <script type = "text/javascript" src = "jquery/jquery.js"></script>
        <script src = "changeapasswordjs.js"></script>
        <title>Change password</title>
    </head>
    <body> 
        <h1>Change password</h1>
        <form id = "simpleForm">
            <div>
                <label for = "new_password">Your new_password</label>
                <input type = "password" name = "new_password" id = "new_password" />
            </div> 
            <br>
            <div>
                <button id = "btnChange">Change password</button>
            </div>    
        </form>  
    </body>
</html>
header('Content-Type: application/json'); в верхней части вашего PHP-скрипта, затем используйте json_encode() для кодирования вашего вывода, чтобы ваш Javascript мог его прочитать. Кроме того, вам необходимо объединить ваш SQL. ....SET password = '" . $_POST['new_password'] . "' WHERE....
Jaquarh 21.10.2018 14:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
357
2

Ответы 2

Для доступа к массиву ключ должен быть в кавычках, например, ['key']. Кроме того, вы можете обернуть {} вокруг переменной, чтобы вывести ее внутри строки.

// First query you do
$checkUser = $conn->query("SELECT * FROM tbl_user WHERE id = '{$_SESSION['id']}'");

// Second query you do
$conn->query("UPDATE tbl_user SET password = '{$_POST['new_password']}' WHERE id = '{$_SESSION['id']}'");

Вам также не хватает типа контента, который вы выводите, и вы должны закодировать свой ответ в json:

header('Content-Type: application/json');
echo json_encode("Update Successfully!");

Более того, чтобы получить доступ к суперпеременной $_SESSION, вы должны сначала использовать session_start() до доступа к переменной.

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

куда мне поставить session_start()?

Momoy PH 21.10.2018 14:57

Вверху вашего php файла под <?php и выше $conn = ...

Jaquarh 21.10.2018 14:58
Undefined index: id
Momoy PH 21.10.2018 15:25
POST http://localhost/foldername/change.php 404 (Not Found) jquery.js:4
Momoy PH 21.10.2018 17:40

Ваши ошибки объясняются сами собой, $_SESSION['id'] пуст, вы еще не установили его, а change.php не существует в текущем каталоге, вы должны указать абсолютный путь к тому месту, где существует файл

Jaquarh 21.10.2018 18:49

как установить $_SESSION['id']? Я уже решил change.php

Momoy PH 22.10.2018 02:25

session_start (); $ _SESSION ['id'] = 1; // ваше значение

Jaquarh 22.10.2018 10:42

Прежде всего, я думаю, что в вашем коде отсутствует очень важное утверждение, которым является оператор session_start().

Во-вторых, сеанс id нельзя назвать так, как вы его называете в своем коде, вам нужно добавить кавычки, как этот $_SESSION['id'].

Вам также необходимо добавить кавычки в WHERE clause, чтобы он стал действительным утверждением, например следующим: WHERE id = '$_SESSION['id']'. Опять же, вы неправильно обращаетесь к массиву $_POST, вам нужно добавить кавычки, как этот $_POST['new_password'].

После исправления этих ошибок окончательный код должен выглядеть так:

<?php
session_start(); //Initializing session
     $conn = new mysqli("localhost", "root", "", "mydb");
 if (isset($_POST["btnChange"])) {
        $checkUser = $conn->query("SELECT * FROM tbl_user WHERE id='".$_SESSION['id']."'");
        if ($checkUser->num_rows > 0) {
            $conn->query("UPDATE tbl_user SET password = '".$_POST["new_password"]."' WHERE id='".$_SESSION['id']."'");
            echo "Update Successfully!";
        }
    }
?>

ОБНОВИТЬ

Пожалуйста, воспроизведите код для этого, рекомендуется использовать инструкцию else в случае, если пользователь не существует.

 <?php
 session_start(); //Initializing session
      $conn = new mysqli("localhost", "root", "", "mydb");
  if (isset($_POST["btnChange"])) {
         $checkUser = $conn->query("SELECT * FROM tbl_user WHERE id='".$_SESSION['id']."'") or die(mysqli_error($conn));
         if ($checkUser->num_rows > 0) {
             $conn->query("UPDATE tbl_user SET password = '".$_POST['new_password']."' WHERE id='".$_SESSION['id']."'");
             echo "ID: ".$_SESSION['id'];
         }
         else {
             echo "User doesn't exist.";
             echo "<br>ID: ".$_SESSION['id'];
         }
     }
 ?>

почему он не обновил мой пароль? Что-то не так с моими jQuery и Ajax?

Momoy PH 21.10.2018 17:10

Попробуйте сменить $conn = new mysqli('localhost','root','','mydb);' на $con = new mysqli('localhost','root','','mydb') or die(mysqli_error($con)); и посмотрите, есть ли ошибки mysqli.

nomorehere 21.10.2018 17:30

тот же сэр, без ошибок и пароль вообще не менялся.

Momoy PH 21.10.2018 17:36

Не могли бы вы добавить echo '<br>ID: '.$_SESSION['id']; к if ($checkUser->num_rows >) statement и сказать, какой у него текущий выход? Также проверьте, есть ли пробелы перед session_start();, и удалите их.

nomorehere 21.10.2018 17:42

Это ошибка в окне предупреждения <br>Parse error</b>: syntax error, unexpected '&quot;', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in <b> C: xampp\htdocs\userAndAdmin/change.php</b> on line <b>7</b><br/>

Momoy PH 21.10.2018 18:07

Я обновил свой ответ, пожалуйста, проверьте его и прокомментируйте результат.

nomorehere 21.10.2018 18:15

В том же окне предупреждения об ошибке отображается это сообщение <br>Parse error</b>: syntax error, unexpected '&quot;', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in <b> C: xampp\htdocs\userAndAdmin/change.php</b> on line <b>7</b><br/>

Momoy PH 21.10.2018 18:25

мой идентификатор - целое число, а мой пароль зашифрован

Momoy PH 21.10.2018 18:33

Да, действительно были синтаксические ошибки, я перепутал использование двойных кавычек и одинарных кавычек, скопируйте и снова вставьте отредактированный код.

nomorehere 21.10.2018 19:54

Другие вопросы по теме