Я пытаюсь создать базовую систему входа в систему с помощью PHP и MySQL, и она не работает из моей формы входа. Вот код для формы входа:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="verify.php">
<br/>Username:<input type="text" name="username"/>
<br/>Password:<input type="password" name="password"/>
<br/><button type="submit">Submit</button>
</form>
</body>
</html>
Вот код для verify.php:
<?php
$username = $_POST["username"];
$password = $_POST["password"]; //Not Doing anything with the pass yet
$con=mysqli_connect("","root","mypassword","logins");
//now mySQL is connected, lets extract stuff from the database
$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='" . $username . "'");
$row = mysqli_fetch_array($que);
$myvar = $row[0];
//should echo Test
echo $myvar;
echo "If it returned Test, the mySQL works.";
mysqli_close($con);
?>
Когда я запускаю это, вывод совершенно пустой.
Тем не менее, я могу получить запрос непосредственно из консоли MySQL:
mysql> SELECT Pass from login WHERE User='Logern';
+------+
| Pass |
+------+
| Test |
+------+
1 row in set (0.01 sec)
mysql>
Я также могу получить доступ к нему из PHP с помощью жесткого запроса SQL:
$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='Logern'");
Так почему же это не работает? Мой веб-сервер — Raspberry Pi с Debian и lighttpd.
У вас есть опечатка здесь ->
$password = $_POST["password"[; //Not Doing anything with the pass yet
Очевидно, что это должно быть
$password = $_POST["password"]; //Not Doing anything with the pass yet
Таким образом, из-за этой синтаксической ошибки весь код становится «некомпилированным», поэтому вы получаете пустую страницу.
Если вы получаете пустое возвращение, потому что ваша директива display_errors отключена в вашем файле php.ini, так как я сразу вижу две проблемы в вашем скрипте:
$password = $_POST["password"[;
должно быть
$password = $_POST["password"];
И хост в вашей связи:
$con=mysqli_connect("","root","mypassword","logins");
должно быть
$con=mysqli_connect("localhost","root","mypassword","logins");
Пожалуйста, включите директиву display_errors или зайдите в журнал ошибок, чтобы увидеть ошибки.
Очень странно, после перезапуска lighttpd он волшебным образом работает! Слегка измененный код:
<?php
$username = $_POST["username"];
$password = $_POST["password"]; //Not Doing anything with the pass yet
$con=mysqli_connect("","root","mypassword","logins");
//now mySQL is connected, lets extract stuff from the database
$sql = "SELECT Pass FROM login WHERE User='" . $username . "'";
//$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='" . $username . "';");
$que = mysqli_query($con,$sql);
$row = mysqli_fetch_array($que);
$myvar = $row[0];
//should echo Test
echo $myvar;
echo "If it returned Test, the mySQL works.";
mysqli_close($con);
?>
$con=mysqli_connect("","root","mypassword","logins");
изменить хост подключения (пароль и имя пользователя указаны правильно.)
$con=mysqli_connect("localhost","root","mypassword","logins");
попробуйте использовать вот так:
Вы никогда не должны использовать оператор connect на каждой странице страницы в файле connection.php, писать код подключения и включать его в страницы и получать доступ через объект mysqli.
$con = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($con)); // see if you have any error in connection database.
//consultation:
$query = "SELECT Pass FROM login WHERE User='" . $username . "'";
// echo $query; // use echo and see what your query looks like
//execute the query.
$result = mysqli_query($con, $query);
$row = mysqli_fetch_array($result);
//display information:
$myvar = $row[0];
//should echo Test
echo $myvar;
echo "If it returned Test, the mySQL works.";