Почему мой запрос MySQL не выполняется только на одной части скрипта? - PullRequest
0 голосов
/ 22 мая 2019

Мой скрипт выводит ошибку MySQL, но только в одной форме.

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

<?php
        //Connection.php
    error_reporting(E_PARSE | E_ERROR );
    $server = "localhost";
    $username ="root";
    $password = "";
    $db="mydb";

    $conn = mysqli_connect($server, $username, $password, $db);
    //check connection
    if(!$conn){
        die("connection failed: " . mysqli_connect_error());
    }else{
        echo "<script> console.log('connected'); </script>";
    }

    if($_SESSION['LoggedInEmail']){
        session_start();
    }
?>

<?php
     include('header.php');
     include('connection.php');
     $name=$surname=$email=$hashedPassword='';

     if(session_status() != PHP_SESSION_NONE){
    session_start();
    $cookieEmail = $_COOKIE['email'];
    $query = "SELECT name, surname, password, email FROM users WHERE   email = '$cookieEmail'";

    $result = mysqli_query($conn, $query);

    if(mysqli_num_rows($result) > 0){

            while($row = mysqli_fetch_assoc($result)){

                $name = $row['name'];
                $surname = $row['surname'];
                $email = $row['email'];
                $hashedPassword = $row['password'];
                $_SESSION['LoggedInName']=$name;
                $_SESSION['LoggedInSurname']=$surname;
                $_SESSION['LoggedInEmail']=$email;
            }


    }else{
                $logginError = "<div class='alert alert-danger'>Wrong username/password combination</div>";
                echo "<script> console.log('Wrong username/password combination'); </script>";
    }

    $tempName=$tempSurname=$tempPassword=$tempNewPass=$updateError='';

    if(isset($_POST['update'])){

        $tempName = ValiForm($_POST['name']);
        $tempSurname = ValiForm($_POST['surname']);
        $tempPassword = ValiForm($_POST['password']);
        $tempNewPass = ValiForm($_POST['newPassword']);

        if($tempName!= '' && $tempSurname!= '' && $tempPassword != '' && $tempNewPass != ''){

            if(password_verify($tempPassword, $hashedPassword)){

                $tempNewPass = password_hash($tempNewPass, PASSWORD_DEFAULT);

                $query = "UPDATE name, surname, email, password  SET name='$tempName', surname='$tempSurname', email = '$email', password='$tempNewPass' WHERE email='$email'";
                $result =  mysql_query($conn,$query);

                if(mysqli_query($conn, $result)){
                    echo "<div class='alert alert-success'>New record in database</div>";
                    header("Location: index.php");
                    echo "<script> console.log(' combination'); </script>";
                }else{
                    echo "Error: ". $query . "<br>" . mysqli_error($conn);
                    echo "<script> console.log('Wrong username/password combination'); </script>";
                }
            }else{
                echo "<script> console.log('Wrong username/password combination'); </script>";
            }
        }else{
            echo "<script> console.log('Wrong username/password combination'); </script>";
        }
    }

}else{
    session_destroy();
    header('Location: '. 'index.php');
    die();
}
?>

Эта ошибка выводится из echo "Error: ". $query . "<br>" . mysqli_error($conn);:

Ошибка: ОБНОВЛЕНИЕ имени, фамилии, электронной почты, пароля. SET name = 'Henrique123', фамилия = 'Araujo123', электронная почта = 'forthelolz@outlook.pt', пароль = '$ 2y $ 10 $ SvAjR91lC0FPxkrzRf7LuOK3I66WftiAK1iCW7c0yWFjETlCfoCc6' ГДЕ email='forthelolz@outlook.pt'

1 Ответ

0 голосов
/ 22 мая 2019

Ваш синтаксис для ОБНОВЛЕНИЕ неверен.

$query = "UPDATE name, surname, email, password  SET name='$tempName', surname='$tempSurname', email = '$email', password='$tempNewPass' WHERE email='$email'";

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

$query = "UPDATE table_name SET column1='value1', column2='value2' WHERE columnX='valueX'";

Для предоставленного вами кода запрос будет выглядеть следующим образомthis:

$query = "UPDATE users SET name='$tempName', surname='$tempSurname', password='$tempNewPass' WHERE email='$email'";

У вас есть другой недостаток в коде при тестировании, если запрос на обновление был успешным.

$result =  mysql_query($conn,$query);

if(mysqli_query($conn, $result)){

Должно быть что-то вроде:

$result = mysqli_query($conn, $query);
if ($result) {

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

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