2014-02-26 55 views
-2

您好我做這個很簡單的註冊頁面我有3個文件:的welcome.php,registration_form.php和register.php

這是我的welcome.php

<html> 
<body> 

<h1>WELCOME!</h1> 

<form action="login.php" method="POST"> 

<p>Username: <input type="text" name="login_username" value="">   </p> 
<p>Password: <input type="password" name="login_password" value=""></p> 
<p><input type="submit" value="LOGIN" name="login" size="20"></p> 

<a href="registration_form.php">Register for new account</a> 

</body> 
<html> 

代碼這是我的代碼在registration_form.php

<html> 
<body> 

<h1>Register here</h1> 

<form action="register.php" method="POST"> 

<p>Username: <input type="text" name="register_username" value=""></p> 
<p>Password: <input type="password" name="register_password" value=""></p> 
<p>Re-type Password: <input type="password" name="register_repassword" value=""></p> 
<p>E-mail Address: <input type="text" name="register_email" value=""></p> 
<p>Re-type E-mail Address: <input type="text" name="register_reemail" value=""></p> 
<p><input type="submit" value="Register" name="register"></p> 

</form> 

</body> 
<html> 

這是我register.php

<html> 
<body> 

<?php 
ob_start(); 

//=======================database variables 
$host="localhost"; 
$db_username="root"; 
$db_password=""; 
$db="forum_members"; 
$db_table="members"; 

//=======================connect to database 
mysql_connect("$host","$db_username","$db_password") or die("Could not connect to the database!"); 
mysql_select_db("$db") or die("database not found!"); 


//form variables 
$register_user=$_POST['register_username']; 
$register_pass=$_POST['register_password']; 
$register_repass = $_POST['register_repassword']; 
$register_email=$_POST['register_email']; 
$register_reemail=$_POST['register_reemail']; 

//protect database from MySQL database 
$register_user=stripslashes($register_user); 
$register_pass=stripslashes($register_pass); 
$register_repass=stripslashes($register_repass); 
$register_email=stripslashes($register_email); 
$register_reemail=stripslashes($register_reemail); 
$register_user=mysql_real_escape_string($register_user); 
$register_pass=mysql_real_escape_string($register_pass); 
$register_repass=mysql_real_escape_string($register_repass); 
$register_email=mysql_real_escape_string($register_email); 
$register_reemail=mysql_real_escape_string($register_reemail); 

//check required fields 
if (empty($register_user) || empty($register_pass)) { 
echo "Please fill the required fields"; 
die(); 
} 

if (empty($register_repass) || empty($register_email)) { 
echo "Please fill the required fields"; 
die(); 
} 
if (empty($register_reemail)) { 
echo "Please fill the required fields"; 
die(); 
} 

//check if username has alphanumeric characters only 
if (!preg_match("/^[a-zA-Z0-9_]+$/", $register_user) || !preg_match("/^[a-zA-Z0-9_]+$/",  $register_pass)) { 
echo "Username and Password can only contain alphanumeric characters"; 
die(); 
} 

//check username and password minimum length 
if (strlen($register_user) < 4) { 
echo "Username must be more than 4 characters!"; 
die(); 
} 

if (strlen($register_pass) < 8) { 
echo "Password must be at least 8 characters!"; 
die(); 
} 

if ($register_pass !== $register_repass) { 
echo "Your password did not match"; 
die(); 
} 

if ($register_email !== $register_reemail) { 
echo "Your E-mail address did not match"; 
die(); 
} 

//check duplicate username 
$duplicate_user="SELECT * FROM $db_table WHERE username='$register_user'"; 
$execute_duplicate=mysql_query($duplicate_user); 
$duplicate_result = mysql_num_rows($execute_duplicate); 
if ($duplicate_result == 1) { 
echo "This username is already used"; 
die(); 
} 

//create MySQL Query 
$query_insert="INSERT INTO $db_table(username, password, email) VALUES ('$register_user', '$register_pass', '$register_email')"; 

//execute MySQL query 
$execute_insert=mysql_query($query_insert); 
//$execute_insert=mysql_query($query_insert); 

//check inserted data 
$check_insert="SELECT * FROM $db_table WHERE username='$register_user'"; 
$execute_insert1=mysql_query($check_insert); 
$verify_insert=mysql_num_rows($execute_insert1); 

if ($verify_insert==1) { 
echo "Registration Successful! You may now login"; 
} 
else { 
echo "Registration Failed!"; 
} 

ob_end_flush(); 
?> 

</body> 
</html> 

我的問題是我如何使用$ _SERVER ['PHP_SELF'],以便我可以合併registration_form.php和register.php?這樣我就不會在多個文件上工作。我的目標是在同一頁面(最好在頂部)顯示「註冊成功!您現在可以登錄」或「註冊失敗」,當客人沒有輸入任何信息並點擊「註冊」按鈕時,它會去回到註冊表格,好像什麼都沒有發生。我試圖在谷歌尋找答案,但它不起作用。

P.S.我知道我的代碼中存在很多缺陷,請保持良好。我剛開始學習php。

+2

即使你剛剛開始使用PHP,你永遠不應該存儲在明文密碼。而且你應該讓人們允許他們的密碼中的任何字符,因爲它使得密碼很難弄清楚。 此外 - 我很欣賞的一個很好的功能是,當註冊階段完成時,網站自動登錄我,所以我不必自己這樣做。 :) – Stoffisimo

+0

感謝您的意見。我只是讓自己首先熟悉這些代碼,這就是爲什麼他們還沒有加密。 – zlloyd

回答

0

$_SERVER['PHP_SELF']用於在同一頁上調用表單操作。所以你應該採取行動。

您已經在register.php做現在什麼,只是把同一個頁面上,如果條件數據posted..like if(isset)

把這個代碼在你registration_form.php

<?php 
    ob_start(); 

    //=======================database variables 
    $host="localhost"; 
    $db_username="root"; 
    $db_password=""; 
    $db="forum_members"; 
    $db_table="members"; 

    //=======================connect to database 
    mysql_connect("$host","$db_username","$db_password") or die("Could not connect to the database!"); 
    mysql_select_db("$db") or die("database not found!"); 

    ?> 

    <h1>Register here</h1> 


    <?php 

       // To confirm form is submitted     

    if(isset($_POST['register'])) 
    { 



    //form variables 
    $register_user=$_POST['register_username']; 
    $register_pass=$_POST['register_password']; 
    $register_repass = $_POST['register_repassword']; 
    $register_email=$_POST['register_email']; 
    $register_reemail=$_POST['register_reemail']; 

    //protect database from MySQL database 
    $register_user=stripslashes($register_user); 
    $register_pass=stripslashes($register_pass); 
    $register_repass=stripslashes($register_repass); 
    $register_email=stripslashes($register_email); 
    $register_reemail=stripslashes($register_reemail); 
    $register_user=mysql_real_escape_string($register_user); 
    $register_pass=mysql_real_escape_string($register_pass); 
    $register_repass=mysql_real_escape_string($register_repass); 
    $register_email=mysql_real_escape_string($register_email); 
    $register_reemail=mysql_real_escape_string($register_reemail); 

    //check required fields 
    if (empty($register_user) || empty($register_pass)) { 
    echo "Please fill the required fields"; 
    die(); 
    } 

    if (empty($register_repass) || empty($register_email)) { 
    echo "Please fill the required fields"; 
    die(); 
    } 
    if (empty($register_reemail)) { 
    echo "Please fill the required fields"; 
    die(); 
    } 

    //check if username has alphanumeric characters only 
    if (!preg_match("/^[a-zA-Z0-9_]+$/", $register_user) || !preg_match("/^[a-zA-Z0-9_]+$/",  $register_pass)) { 
    echo "Username and Password can only contain alphanumeric characters"; 
    die(); 
    } 

    //check username and password minimum length 
    if (strlen($register_user) < 4) { 
    echo "Username must be more than 4 characters!"; 
    die(); 
    } 

    if (strlen($register_pass) < 8) { 
    echo "Password must be at least 8 characters!"; 
    die(); 
    } 

    if ($register_pass !== $register_repass) { 
    echo "Your password did not match"; 
    die(); 
    } 

    if ($register_email !== $register_reemail) { 
    echo "Your E-mail address did not match"; 
    die(); 
    } 

    //check duplicate username 
    $duplicate_user="SELECT * FROM $db_table WHERE username='$register_user'"; 
    $execute_duplicate=mysql_query($duplicate_user); 
    $duplicate_result = mysql_num_rows($execute_duplicate); 
    if ($duplicate_result == 1) { 
    echo "This username is already used"; 
    die(); 
    } 

    //create MySQL Query 
    $query_insert="INSERT INTO $db_table(username, password, email) VALUES ('$register_user', '$register_pass', '$register_email')"; 

    //execute MySQL query 
    $execute_insert=mysql_query($query_insert); 
    //$execute_insert=mysql_query($query_insert); 

    //check inserted data 
    $check_insert="SELECT * FROM $db_table WHERE username='$register_user'"; 
    $execute_insert1=mysql_query($check_insert); 
    $verify_insert=mysql_num_rows($execute_insert1); 

    if ($verify_insert==1) { 
    echo "Registration Successful! You may now login"; 
    } 
    else { 
    echo "Registration Failed!"; 
    } 

    ob_end_flush(); 


    } 
    ?> 

      <?php // To call form on same page ?> 

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 

    <p>Username: <input type="text" name="register_username" value=""></p> 
    <p>Password: <input type="password" name="register_password" value=""></p> 
    <p>Re-type Password: <input type="password" name="register_repassword" value=""></p> 
    <p>E-mail Address: <input type="text" name="register_email" value=""></p> 
    <p>Re-type E-mail Address: <input type="text" name="register_reemail" value=""></p> 
    <p><input type="submit" value="Register" name="register"></p> 

    </form> 

    </body> 
    <html> 
+0

感謝它的工作! – zlloyd

+0

代碼轉儲不是答案。請編輯你的答案並解釋這個代碼是什麼,它是如何工作的,它與原始代碼有什麼不同,以及它如何回答這個問題。 – Charles

0

是什麼它呢?

$_SERVER['PHP_SELF']不是用於在同一頁上調用表單操作,但您可以以此方式使用它。

$_SERVER['PHP_SELF']包含當前正在執行的腳本相對於文檔根目錄的文件名。這意味着如果你在http://domain.com/path/to/file.php那麼 $_SERVER['PHP_SELF']將是/path/to/file.php

如何使用它?

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

如何合併呢?

$_SERVER['REQUEST_METHOD']包含當前的請求方法。即GET,POST,PUT

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    // handle your form submition here 
} 
?> 
<html> 
... 
<!-- show register form --> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 

如何避免因提交頁面的刷新?

將用戶重定向到其他地方。

header("Location: /path/to/somewhere"); 

,但你不喜歡的文件,因此用戶重定向到當前的URL。

header("Location: {$_SERVER['PHP_SELF']}"); 

All in one的:

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    // handle your form submition here 
    // everything is ok. 
    header("Location: {$_SERVER['PHP_SELF']}"); 
} 
?> 
<html> 
... 
<!-- show register form --> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
相關問題