У меня есть две таблицы базы данных, «пользователь», которые имеют 3 столбца (id, [auto increment] имя пользователя и щепотку). Другая таблица – «контакты», которая имеет только один столбец (царапины). МОИ ТАБЛИЦЫ
USER Id username Pinc 1 Josh 2 Angela 3 Chika PINS scratches 123456 234515 124564
Мне нужна ситуация, когда пользователь отправляет свой пароль через форму, он проверяет таблицу контактов, чтобы узнать, существуют ли такие данные, если это произойдет, она обновит столбец pinc моей таблицы пользователя с сообщением формы и войдет в систему с помощью Это. Если он не существует в таблице контактов, он выдаст ошибку «извините, что штырь не существует». МОЙ КОД
$sql = "SELECT * FROM pins WHERE scratches = '" .' $user_password '. "';"; $query = $this->db_connection->query($sql); if ($query->num_rows== 0){ $this->errors[] = "Sorry, that PIN does not exist."; } elseif ($query->num_rows== 1) { $sql = "UPDATE user ". "SET pinc = $user_password ". "WHERE user_name = $user_name" ; $query_new_user_insert = $this->db_connection->query($sql); $sql = "SELECT user_name, pinc FROM user WHERE user_name = '" . $user_name . "' ;"; $result_of_login_check = $this->db_connection->query($sql); // if this user exists if ($result_of_login_check->num_rows == 1) { // get result row (as an object) $result_row = $result_of_login_check->fetch_object(); $_SESSION['user_name'] = $result_row->user_name; $_SESSION['user_login_status'] = 1; } else { $this->errors[] = "Wrong password. Try again."; } } else { $this->errors[] = "This user does not exist."; } } else { $this->errors[] = "Database connection problem."; } } }
когда я запускаю код, я получаю «извините, PIN-код не существует». Может кто-нибудь сказать мне, что с ним не так?
Вы используете singe quete ''
вокруг $userpassword
, поэтому вы передаете строку. Измените свой первый запрос, как этот
$sql = "SELECT * FROM pins WHERE scratches = '".$user_password."';";
И ваш второй запрос также неверен. так как я предполагаю, что $username
– это строка, вам нужно обернуть ее вокруг одного quete ''
как это
$sql = "UPDATE user ". "SET pinc = '$user_password' ". "WHERE user_name = '$user_name'" ;//You are missing single quete here if username is a string
Я не знаю, что это тоже проблема или нет, но у вас есть дополнительное пространство в третьем запросе. для переменной $username
после контанитации (после точки . .
). Если это не работает, удалите его так
$sql = "SELECT user_name, pinc FROM user WHERE user_name = '".$user_name."' ;";
**
**
$sql = "SELECT * FROM pins WHERE scratches = '".$user_password ."';"; $query = $this->db_connection->query($sql); if ($query->num_rows== 0){ $this->errors[] = "Sorry, that PIN does not exist."; } elseif ($query->num_rows== 1) { $sql = "UPDATE user SET pinc ='".$user_password."' WHERE user_name ='".$user_name."'" ; $query_new_user_insert = $this->db_connection->query($sql); $sql = "SELECT user_name, pinc FROM user WHERE user_name = '".$user_name."' ;"; $result_of_login_check = $this->db_connection->query($sql); // if this user exists if ($result_of_login_check->num_rows == 1) { // get result row (as an object) $result_row = $result_of_login_check->fetch_object(); $_SESSION['user_name'] = $result_row->user_name; $_SESSION['user_login_status'] = 1; } else { $this->errors[] = "Wrong password. Try again."; } } else { $this->errors[] = "This user does not exist."; } } } }
Строгая структура струны:
$sql = "SELECT * FROM pins WHERE scratches = '" .' $user_password '. "';";
Он выберет все данные из выводов WHERE scrathes = "$ user_password". Он вернет данные, которые не найдены.
Измените это так:
$sql = "SELECT * FROM pins WHERE scratches = '" . $user_password . "';";
Скажите, как это работает.
Изменить:
$sql = "SELECT * FROM pins WHERE scratches = '" .' $user_password '. "';";
в
$sql = "SELECT * FROM pins WHERE scratches = '".$user_password."'";