2012-07-08 171 views
0

我正在为我的网站编写注册页面。这里是我的注册页面。任何人都可以看到为什么它不检查用户名是否已被使用或不是。我不知道PHP和JavaScript是否可以一起工作。javascript和php不能一起工作

HTML页面如下:

<html> 
<head> 
    <title>Register</title> 

</head> 

<body> 
<script language="javascript"> 
    function checkInput() 
    { 
    if(document.register.username.value=="") 
    { 
     alert("Fill in username"); 
     document.register.username.focus(); 
     return false; 
    }else if(document.register.password.value==""){ 
     alert("Fill in your password"); 
     document.register.password.focus(); 
     return false; 
}else { 
<?php 
if(isset($_POST['submit'])){ 
include "connect.php"; 
$username=$_POST['username']; 
$query="SELECT username FROM user"; 
$result=mysql_query($query); 
while($row=mysql_fetch_array($result)){ 
    $arr[]=$row['username'];  
} 
if(in_array($username,$arr)){ 
    ?> 
    alert("Username is already in use");// this part does not work! 
    document.register.username.focus(); 
    return false; 
<?php 
} 
} 
?> 
} 
    } 
    </script> 

<form name="register" method="post" action="dangki.php" onsubmit="return checkInput();"> 
    <table width="289" height="185" border="1"> 
    <tr> 
     <td colspan="2">register</td> 
    </tr> 
    <tr> 
     <td width="83">Username</td> 
     <td width="190"><input type="text" name="username" id="textfield" ></td> 
    </tr> 
    <tr> 
     <td>Password</td> 
     <td><input type="text" name="password" id="textfield2"></td> 
    </tr> 
    <tr> 
     <td>Re-type Password</td> 
     <td><input type="text" name="repassword" id="textfield3"></td> 
    </tr> 
    <tr> 
     <td colspan="2"><input type="submit" name="submit" id="button" value="Submit"> </td> 
    </tr> 
    </table> 
    </form> 

    </body> 
    </html> 
+3

是和否。通过Ajax,PHP和JS可以一起工作。由于PHP是在服务器端处理的,所以不会以您编码的方式进行编码,因此在任何JS运行之前,页面中的所有php都将作为HTML进行处理和输出。 PHP只会在您提交或重新加载页面时再次运行。因此,您要么使用Ajax检查用户名可用性,要么使用PHP来完成。 – 2012-07-08 06:51:59

+0

* checkInput()函数中的每个*代码路径是否返回false?你的表单是否提交?如果表单实际上没有提交给服务器,那么您如何期望服务器端PHP代码对其作出响应? – David 2012-07-08 06:56:14

+0

@David JS函数默认返回'true',所以如果它没有得到任何错误路径,表单将被提交(当然,考虑一个有效函数)。 – 2012-07-08 06:59:04

回答

0

不,JavaScript和PHP不以这种方式 “同心协力”。 Javascript在您的浏览器中运行,PHP在此之前在服务器上运行。因此,您不能使用PHP进行客户端验证,只能使用服务器端。对于这个第一个演示,只需在浏览器的页面上显示“查看源代码”即可。

你必须单独考虑它们。您必须让PHP检查表单提交的内容,并返回一个新页面,指出它是否为有效/新用户名,并允许用户在需要时再次尝试。

你可以使用ajax来伪装它,但即使这样,它只是向服务器发送一个请求,而服务器是单独运行的,并将结果返回给页面,由不同的函数处理。你的尝试会变得更加复杂。

0

PHP在服务器端进行评估。 JavaScript在客户端进行评估。也就是说:当用户向服务器发出请求时,php会在服务器上进行评估,然后将结果输出发送给用户,如果涉及到javascript,则会在php评估后在客户端进行评估。

这意味着PHP可以给JavaScript的消息,但JavaScript不能发送消息到PHP。在你的代码中,它看起来像你想要php来评估JavaScript正在使用的用户输入。这不能完成,因为当JavaScript运行时,PHP已经完成。

您可以提供所需功能的一种方法是编写php代码,以便在JavaScript中编写包含所有用户名的数组代码。然后,javascript可以查看这个数组,告诉用户是否获取了用户名。然而,这存在一些缺陷,如果你有很多用户,你将会向很多用户发送大量文本。这也可能是一个安全问题,因为每个人都能够知道所有在该站点注册的人员的所有用户名,也有可能有人加载该页面,键入他们的用户名,等待很长时间,让其他人创建一个具有相同名称的帐户,然后第一个人返回,提交该页面,然后您将拥有两个具有相同用户名的用户。

在php中首先编写整个站点可能会更容易,但也更少乐趣,并且在所有工作之后,添加javascript以完成功能。