Я хочу иметь простую веб-страницу с полями для имени пользователя и пароля. Как только пользователь вводит правильные имя пользователя и пароль и нажимает кнопку входа тогда он должен отображать апплет.
Вот мой код
<?php
$un=$_POST["username"];
$pw=$_POST["password"];
$log=$_POST["Login"];
$con=mysqli_connect("localhost","root","","");
if(mysqli_connect_errno($con))
{
echo "Failed to connect".mysqli_connect_error();
}
mysqli_select_db($con,student);
$query="SELECT * FROM studentinfo WHERE stName=$un AND stP=$pw";
$result=mysqli_query($con,$query);
$num_rows = mysqli_num_rows($result);
if($log){
if($num_rows==1){
$isLogged=true;
}
else{
echo "Error log In.Invalid username or password";
$isLogged=false;
}
}
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>User LogIn</title>
</head>
<body>
<form method="post">
<label>Username<input name="username" type="text" /></label> <label>Password<input name="password" type="password" /></label>
<input name="cmd" type="submit" value="Login" />
</form>
<?php if($isLogged) {?>
<applet code="studentWeb.html" width="32" height="32" alt="Couldn't launch applet" title="Student Details">
</applet>
<?php }?>
</body>
</html>
Сейчас выдает ошибку как
mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in
и он не открывает апплет, даже если были введены правильные имя пользователя и пароль.
Редактировать: После того, как я изменил на action = «logindata.php» в форме, вот logindata.php
<?php
$connect=mysqli_connect("localhost","root","");
if(mysqli_connect_errno($connect))
{
echo "Failed to connect".mysqli_connect_error();
}
mysqli_select_db($connect,"student") or die("couldn't connect to db");
$un=$_POST["username"];
$pw=$_POST["Password"];
$sql="SELECT * FROM studentinfo WHERE stUserName='$un' AND stPassword='pw'";
$query=mysqli_query($connect,$sql) or die("couldn't find values");
if($query){
include_once("studentWeb.html");
}
else{
echo ("Invalid username or password");
}?>
Почему это разрешить неверный пароль и имя пользователя ?
Процитировать эти WHERE stName='$un' AND stP='$pw'
так как мы имеем дело со строками, вот почему вы получаете логическую ошибку.
Плюс использовать isset()
вокруг вашего исполняемого кода, так как вы используете весь код внутри одного и того же файла.
Вы стоите на получении неопределенного индекса предупреждения при входе на страницу.
С помощью Отчет об ошибках даст вам что:
Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.
Также добавьте or die(mysqli_error($con))
в mysqli_query()
Примечания:
Ваш настоящий код открыт для SQL-инъекция.
использование готовые заявления, или же PDO с подготовленными заявлениями, они намного безопаснее.
Редактировать:
Если вы хотите включить файл (показать содержимое), сделайте следующее, что у меня сложилось впечатление, что вы хотите сделать:
<?php if($isLogged) {
include 'studentWeb.html';
}
?>
Это должно быть заменено вашим настоящим кодом:
<?php if($isLogged) {?>
<applet code="studentWeb.html" width="32" height="32" alt="Couldn't launch applet" title="Student Details">
</applet>
<?php }?>
Вы также можете попробовать:
<?php $file = file_get_contents('studentWeb.html', true);
echo $file;
?>
или же '../foldername/studentWeb.html'
в зависимости от того, где находится файл.
<applet>
тег не поддерживается в HTML5. Использовать <object>
пометьте вместо этого, если у вас есть проблемы с вашим настоящим кодом. Тем не менее, апплеты обычно имеют .class
расширение.
советоваться http://www.tutorialspoint.com/html/html_applet_tag.htm
Редактировать № 2:
Согласно вашему редактированию, измените:
if($query){
include_once("studentWeb.html");
}
else{
echo ("Invalid username or password");
}
чтобы:
$numrows = mysqli_num_rows($query);
if($numrows > 0){
include_once("studentWeb.html");
}
mysqli_query()
возвращается false
из-за сбоя.
использование $query="SELECT * FROM studentinfo WHERE stName=" . $un . " AND stP= " . $pw;
Более того, это не очень хороший способ, потому что если ваш query
не удастся, он вернет логическое значение false
который снова будет генерировать ошибку для mysqli_num_rows()
Вы можете посмотреть в этот для получения дополнительной информации и этот для лучших способов сделать запрос к вашей базе данных.