{Done} Mysql-запрос не работает на PHP-скрипте, но работает на PhpMyAdmin - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть этот файл подтверждения пользователя:

<?php
session_start();
require 'db-D.php';

$email = $_GET['email'];
$code  = $_GET['code'];

$sql  = 'UPDATE `login_D` SET `active`= 1 WHERE email=\"'.$email.'\" and code=\''.$code.'\'';

$conn->query($sql) or $_SESSION['message'] = 'invalid URL' and $_SESSION['details'] = null and header('location: error.php') and die();
header('location: login.php');

?>

Я отправляю пользователю письмо и затем использую метод GET для получения информации.URL выглядит следующим образом:

192.168.0.101/verifiy.php?email=somemail@mail.com&code=c16c0745def04703e62daa72270c9a89c113a0b208ddd0072b6f828fe1adc81b

Проблема в том, что когда я запрашиваю $sql, я не получаю ошибок и когда я проверяю активное значение в PhpMyAdmin, оно равно 0, а не 1.

Я запустил тот же сценарий (со значениями, вставленными вручную) на PhpMyAdmin, и значение изменилось.

Я также просмотрел файлы журналов (apache и php) и ошибок нет.

Iя использую сервер LAMP на Raspberry Pi 3.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

это код с защитой от SQL-инъекций:

<?php
session_start();
require 'db-D.php';

$email = $_GET['email'];
$code  = $_GET['code'];


if ($conn->connect_errno) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql  = 'UPDATE `login_D` SET `active`= 1 WHERE email=? and code=?';
$stmt = mysqli_stmt_init($conn);

if (!mysqli_stmt_prepare($stmt, $sql)) {
    $_SESSION['message'] = 'invalid URL';
    $_SESSION['details'] = $conn->error;
    header('location: error.php');

} else {
    mysqli_stmt_bind_param($stmt, "ss", $email, $code );
    mysqli_stmt_execute($stmt);
    $_SESSION['message'] = 'Please login to go to account';
    header('location: login.php');

}

?>
0 голосов
/ 25 декабря 2018

Я обнаружил ошибку:

$sql  = 'UPDATE `login_D` SET `active`= 1 WHERE email="'.$email.'" and code=\''.$code.'\'';

было две дополнительные обратные косые черты в части запроса по электронной почте (обратные косые черты были взяты как текст, поэтому запрос не удался.

старая версия:

                                                       <--here-->
$sql  = 'UPDATE `login_D` SET `active`= 1 WHERE email=\"'.$email.'\" and code=\''.$code.'\'';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...