2017-04-03 162 views
0

我對編碼知之甚少。 這與我正在創建的註冊表有關。我創建了這個表單。它正在向數據庫添加表單。但它希望它顯示結果,例如 - 表單頂部的'密碼不匹配,請重試'。如何獲得? 在此先感謝在註冊表格頂部顯示註冊頁面的結果

這裏我的代碼:

<?php 

$conn = mysqli_connect("localhost","root",""); 
if(! $conn) { 
     die('Could not connect: ' . mysql_error()); 
    } 
mysqli_select_db($conn, 'registration'); 


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

     if ($_POST['password'] == $_POST['confirm_password']) { 
      $email = mysqli_real_escape_string($conn, $_POST['email']); 
      $password = mysqli_real_escape_string($conn, $_POST['password']); 
      $gender = mysqli_real_escape_string($conn, $_POST['gender']); 
      $fname = mysqli_real_escape_string($conn, $_POST['fname']); 
      $lname = mysqli_real_escape_string($conn, $_POST['lname']); 
      $firm = mysqli_real_escape_string($conn, $_POST['firm']); 

      $check_email_exists = mysqli_query($conn, "SELECT email FROM users WHERE email = '$email'"); 
      $count = mysqli_num_rows($check_email_exists); 
      if ($count == 0) { 
       $sql = "INSERT INTO users(email, password, gender, fname, lname, firm) VALUES('$email', '$password', '$gender', '$fname', '$lname', '$firm')"; 

       if(mysqli_query($conn, $sql)){ 
        echo "Records added successfully."; 
       } else{ 
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); 
       } 

       // close connection 
       mysqli_close($conn); 
      } else { 
       die('Email exists, Please use a different email'); 
      } 
     } 
     else { 
      die('Passwords not matching, please try again'); 
     } 
    } 

,在這裏我的HTML

<div class="registration-container"> 
    <div class="registrationpage-heading"> 
     <h2>Kostenlos und ohne Installation testen</h2> 
     <p>Nutzen Sie den kostenlosen Funktionumfang von bmgenerator zeitlich uneingeschränkt. Weder Bankdaten noch Kreditkarte notwendig.</p> 
    </div> 

    <div class="user-login"> 
     <form class="login-form" action="user_login.php" method="post"> 
      <input required type="email" name="email" id="user_email" style="color:#888" size="35" value="E-mail" 
      onfocus="if(this.value==this.defaultValue)this.value=''"  
      onblur="if(this.value=='')this.value=this.defaultValue" ><br><br> 

      <input required type="password" name="password" id="user_password" style="color:#888" size="35" placeholder="Passwort" 
      onfocus="if(this.value==this.defaultValue)this.value=''"  
      onblur="if(this.value=='')this.value=this.defaultValue" ><br><br> 

      <input required type="password" name="confirm_password" id="user_confirm_password" style="color:#888" size="35" placeholder="Passwort wiederholen" 
      onfocus="if(this.value==this.defaultValue)this.value=''"  
      onblur="if(this.value=='')this.value=this.defaultValue" ><br><br> 

      <select name="gender"> 
      <option>Herr</option> 
      <option>Frau </option> 
      </select><br><br> 

      <input required type="text" name="fname" id="user_firstname" style="color:#888" size="35" placeholder="Vorname" 
      onfocus="if(this.value==this.defaultValue)this.value=''"  
      onblur="if(this.value=='')this.value=this.defaultValue" ><br><br> 

      <input required type="text" name="lname" id="user_lastname" style="color:#888" size="35" placeholder="Nachname" 
      onfocus="if(this.value==this.defaultValue)this.value=''"  
      onblur="if(this.value=='')this.value=this.defaultValue" ><br><br> 

      <input required type="text" name="firm" id="user_companyname" style="color:#888" size="35" placeholder="Firmenname" 
      onfocus="if(this.value==this.defaultValue)this.value=''"  
      onblur="if(this.value=='')this.value=this.defaultValue" ><br><br> 

      <input type="submit" name="submitbutton" id="submit" value="Kostenlos registrieren"> 
     </form> 
    </div> 

    <div class="register-terms"> 
     <p>Mit der Registrierung stimmen Sie den Datenschutzbestimmungen und den AGB zu.</p> 
    </div> 
</div> 
+0

什麼是你的PHP和HTML文件以及它們在你的服務器上的文件? – SaidbakR

+0

他們在同一頁 –

+0

[Little Bobby](http://bobby-tables.com/)說*** [你的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)***瞭解[MySQLi] [http://www.ibm.com/developerworks/cn/data/index.html] [http://en.wikipedia.org/wiki/Prepared_statement] //php.net/manual/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

回答

0

首先,不建議將表單和處理器頁面放在同一頁面上,以通過刷新無效插入冗餘。但是,在處理器部分,您必須在過程結束後使用任何重定向的意思,在您的代碼die()echo中應該用具有預先指定的消息參數的重定向替換。例如,你在你的處理器的四個末端,所以你的代碼應該是這樣的:

<?php 

$conn = mysqli_connect("localhost","root",""); 
if(! $conn) { 
     die('Could not connect: ' . mysql_error()); 
    } 
mysqli_select_db($conn, 'registration'); 


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

     if ($_POST['password'] == $_POST['confirm_password']) { 
      $email = mysqli_real_escape_string($conn, $_POST['email']); 
      $password = mysqli_real_escape_string($conn, $_POST['password']); 
      $gender = mysqli_real_escape_string($conn, $_POST['gender']); 
      $fname = mysqli_real_escape_string($conn, $_POST['fname']); 
      $lname = mysqli_real_escape_string($conn, $_POST['lname']); 
      $firm = mysqli_real_escape_string($conn, $_POST['firm']); 

      $check_email_exists = mysqli_query($conn, "SELECT email FROM users WHERE email = '$email'"); 
      $count = mysqli_num_rows($check_email_exists); 
      if ($count == 0) { 
       $sql = "INSERT INTO users(email, password, gender, fname, lname, firm) VALUES('$email', '$password', '$gender', '$fname', '$lname', '$firm')"; 

       if(mysqli_query($conn, $sql)){ 
        header("Location: user_login.php?msg=1"); 
        exit(); 
       } else{ 
        header("Location: user_login.php?msg=2"); 
        exit(); 
       } 

       // close connection 
       mysqli_close($conn); 
      } else { 
       header("Location: user_login.php?msg=3"); 
       exit(); 
      } 
     } 
     else { 
      header("Location: user_login.php?msg=4"); 
      exit(); 
     } 
    } 

$msg = [ 
    "Records added successfully.", 
    "SQL Error", 
    "Email exists, Please use a different email", 
    "Passwords not matching, please try again" 
]; 

if (isset($_GET['msg']) && isset($msg[($_GET['msg']-1)])){ 
$message = $msg[($_GET['msg']-1)]; 
} 

// In your form 
.... 
</div> 
<?php if (isset($message)): ?> 
<div class="message"><?=$message;?></div> 
<?php endif; ?> 
    <div class="user-login"> 
     <form class="login-form.... 
+0

非常感謝..這節省了我的一天。 :) –

+0

@SibiKasim沒關係,不要忘記投票答案! :) – SaidbakR

+1

如果您發佈的答案沒有準備好的陳述[您可能想在發佈之前考慮這一點](http://meta.stackoverflow.com/q/344703/)。另外[一個更有價值的答案來自於顯示OP的正確方法](https://meta.stackoverflow.com/a/290789/1011527)。 –

0

在上述情況下,使用

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

提交自己的表單頁面,但辦理登記手續HTML到PHP文件

<?php  
    if(isset($_POST['submitbutton'])){ 
     //perform validation, display error if any  
    }  
?>  

如果你想要去的模塊化方法,然後使用類有驗證,登記方法提交後,包括類文件和使用方法

0

對於每個錯誤信息進行可變$message="Password not matching..."然後<div class="user-login">後,你就可以把:

<?php echo "<p>$message</p>"; ?>

請記住創建一個空白$message=""。 希望它有幫助。

+0

不顯示在頂部,仍然顯示在側面 –

+0

@SibiKasim,這可能是由於.css文件。您可以嘗試將該信息放在'

'標籤之後。 – Memristor

+0

嗨, 感謝您的快速幫助。我試圖用相反的方式。 我能夠以這種方式實現它,然後使用CSS定位來實現結果。 '?>

<?php exit();' –