2012-07-08 154 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以完成功能。