在网页中创建applet

时间:2014-11-15 17:27:21

标签: java php login applet

我希望有一个包含userName和password字段的简单网页。一旦用户输入正确的用户名和密码,然后按下登录按钮,它就会显示一个小程序。 这是我的代码。

<?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 即使输入了正确的用户名和密码,它也不会打开applet。

修改:我改为action =&#34; logindata.php&#34;在表格中,这里是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");

}


?>  

为什么允许使用错误的密码和用户名?

2 个答案:

答案 0 :(得分:2)

引用这些WHERE stName='$un' AND stP='$pw'因为我们正在处理字符串,这就是你得到布尔错误的原因。

另外,在执行的代码周围使用isset(),因为您在同一个文件中使用了整个代码。

您可以在页面输入时获得未定义的索引警告。

使用error reporting会为您提供:

将错误报告添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

同时将or die(mysqli_error($con))添加到mysqli_query()


<强>脚注:

您目前的代码向SQL injection开放。

使用prepared statementsPDO with prepared statements它们更安全


修改

如果您想要包含一个文件(显示内容),请执行以下操作,我希望您这样做:

<?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'取决于文件的位置。


HTML5不支持<applet>标记。如果您的现有代码出现问题,请使用<object>标记。然而,applet通常具有.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");
}

答案 1 :(得分:0)

由于失败,

mysqli_query()正在返回false。 使用$query="SELECT * FROM studentinfo WHERE stName=" . $un . " AND stP= " . $pw; 此外,这不是一个好方法,因为如果query失败,它将返回布尔false,这将再次为mysqli_num_rows()生成错误

您可以查看this以获取更多信息,并this查看更好的查询数据库的方法。