Как проверить данные пользователя с помощью PHP, извлекая данные из базы данных SQLite3?

Я новичок в программировании PHP. Я создал две формы. Один из них – для регистрации, а другой для входа в систему. К сожалению, оба из них не работают из-за некоторых проблем в запросах. Я также искал и просматривал похожие сообщения на этом сайте, но никто не решил мою проблему. Я хочу проверить, существует ли пользователь с таким же идентификатором в базе данных «Users.db» во время регистрации, если какой-либо пользователь вводит один и тот же идентификатор, он должен быть уведомлен о вводе действительного идентификатора.

Когда я запускаю свой код «sign in.php», на экране отображается следующее сообщение, даже не дожидаясь, пока пользователь нажмет кнопку отправки / регистрации. «Количество найденных строк: 1. Этот идентификатор недоступен Введите действительный идентификатор. " Это сообщение отображается, даже если пользователь вводит уникальный идентификатор, который раньше не существовал в базе данных. Ничто не сохраняется в моей базе данных, даже если идентификатор уникален, нажав кнопку регистрации.

Во-вторых, при входе в систему идентификатор и пароль, введенные пользователем, должны быть проверены и сопоставлены с данными, хранящимися в базе данных. Он должен быть направлен на страницу «index.html» после успешного входа в систему и только в том случае, если он зарегистрировался ранее. Он также должен иметь возможность просматривать свою историю поиска, которая хранится в таблице «Поиск» в той же базе данных. Эта таблица содержит два столбца. Один для идентификатора пользователя, а другой для сохранения результатов поиска.

Таблица поиска выглядит так:

Id | History nl23 Grand Hayat Hotel Pearls Residencia Hotels 

Я получаю эту ошибку после запуска моего кода для формы входа «Невозможно подготовить оператор: 1, рядом с« И »: синтаксическая ошибка в D: \ log in.php в строке 54».

Ниже приведен код моей формы входа:

log in.php

 <body> <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} label{display:inline-block;width:100px;margin-bottom:10px;} </style> </head> <body> <h2>Log in page</h2> <form method="post" action=""> Id: <input type="text" name="Id"> <br><br> Password: <input type="text" name="Password"> <br><br> <input type="submit" name="submit" value="Log In" > </form> <?php class MyDB extends SQLite3 { function __construct() { $this->open('Users Data.db'); } } $db = new MyDB(); if(!$db){ echo $db->lastErrorMsg(); } else { } $id=null; $pass=null; $id_exists=null; if (isset($_POST['uid'])) { $id = $_POST['uid']; } if (isset($_POST['passid'])) { $pass = $_POST['passid']; } $sql= " SELECT * FROM Users WHERE ID = '" .$id. "' AND PASSWORD = '" .$pass. "';"; $ret = $db->query($sql); $rows = count($sql); if ($rows > 0) { $id_exists = true; echo "You entered a valid id and password. "; $sql= "SELECT History FROM Search WHERE Id= " .$id. ";"; $ret = $db->query($sql); //header("location:index.html"); } else { echo "Please enter a valid id and password. "; } ?> </body> </html> 

Моя подписная форма находится ниже:

Подписать in.php

 <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} label{display:inline-block;width:100px;margin-bottom:10px;} </style> </head> <body> <h2>Sign in page</h2> <form method="post" action=""> Id: <input type="text" name="Id"> <br><br> Password: <input type="text" name="Password"> <br><br> Email: <input type="text" name="Email"> <input type="submit" name="submit" value="Sign Up" > </form> <?php class MyDB extends SQLite3 { function __construct() { $this->open('Users Data.db'); } } $db = new MyDB(); if(!$db){ echo $db->lastErrorMsg(); } else { } $id=null; $password=null; $email=null; $id_exists=false; $sql=null; $result=null; $rows=null; $ret=null; if (isset($_POST['Id'])) { $id = $_POST['Id']; } if (isset($_POST['Password'])) { $password = $_POST['Password']; } if (isset($_POST['Email'])) { $email = $_POST['Email']; } $result= "SELECT * FROM Users WHERE ID = " .$id. ";"; // $ret = $db->query($result); //$ret = $db->exec($sql); echo "<p> The result query is ".$result ."</p>"; $rows = count($result); echo "<p> Number of rows found: ".$rows ."</p>"; if ($rows > 0) { $id_exists = true; echo "This id is not available. Please enter a valid id. "; } else { $sql= "INSERT INTO Users (ID,PASSWORD, EMAIL) VALUES ('$id','$password','$email');" ; $ret = $db->query($sql); //$ret = $db->exec($sql); // header("location:index.html"); } if(!$ret){ echo $db->lastErrorMsg(); } else { } $db->close(); ?> </body> </html> 

Пожалуйста, направляйте меня, поскольку я застрял в обоих этих кодах.

То, что вам не хватает, это проверить, установлен ли $_POST или не пуст. Только тогда вы хотите обработать пользовательский ввод. Еще одна вещь заключается в том, что вы должны переносить $pass в кавычки, поскольку это строка, и будут интерпретироваться как имя столбца, если не окружены кавычками.

Вот код:

log in.php

 <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} label{display:inline-block;width:100px;margin-bottom:10px;} </style> </head> <body> <h2>Log in page</h2> <form method="post" action=""> Id: <input type="text" name="Id"> <br><br> Password: <input type="text" name="Password"> <br><br> <input type="submit" name="submit" value="Log In" > </form> <?php if(!empty($_POST)) { class MyDB extends SQLite3 { function __construct() { $this->open('Users Data.db'); } } $db = new MyDB(); if(!$db){ echo $db->lastErrorMsg(); } else { } $id=null; $pass=null; $id_exists=null; if (isset($_POST['Id'])) { $id = $_POST['Id']; } if (isset($_POST['Password'])) { $pass = $_POST['Password']; } $sql= " SELECT * FROM Users WHERE ID = '" .$id. "' AND PASSWORD = '" .$pass. "';"; $ret = $db->query($sql); $rows = count($sql); if ($rows > 0) { $id_exists = true; echo "You entered a valid id and password. "; $sql= "SELECT History FROM Search WHERE Id= " .$id. ";"; $ret = $db->query($sql); //header("location:index.html"); } else { echo "Please enter a valid id and password. "; } } ?> </body> </html> 

Подпишите in.php:

 <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} label{display:inline-block;width:100px;margin-bottom:10px;} </style> </head> <body> <h2>Sign in page</h2> <form method="post" action=""> Id: <input type="text" name="Id"> <br><br> Password: <input type="text" name="Password"> <br><br> Email: <input type="text" name="Email"> <input type="submit" name="submit" value="Sign Up" > </form> <?php if(!empty($_POST)) { class MyDB extends SQLite3 { function __construct() { $this->open('Users Data.db'); } } $db = new MyDB(); if(!$db){ echo $db->lastErrorMsg(); } else { } $id=null; $password=null; $email=null; $id_exists=false; $sql=null; $result=null; $rows=null; $ret=null; if (isset($_POST['Id'])) { $id = $_POST['Id']; } if (isset($_POST['Password'])) { $password = $_POST['Password']; } if (isset($_POST['Email'])) { $email = $_POST['Email']; } $result= "SELECT * FROM Users WHERE ID = " .$id. ";"; echo "<p> The result query is ".$result ."</p>"; $rows = count($result); echo "<p> Number of rows found: ".$rows ."</p>"; if ($rows > 0) { $id_exists = true; echo "This id is not available. Please enter a valid id. "; } else { $sql= "INSERT INTO Users (ID,PASSWORD, EMAIL) VALUES ('$id','$password','$email');" ; $ret = $db->query($sql); //$ret = $db->exec($sql); // header("location:index.html"); } if(!$ret){ echo $db->lastErrorMsg(); } else { } $db->close(); } ?> </body> </html>