2017-04-22 133 views
1

我的程序是假設存儲用戶的電子郵件,並允許他們登錄,如果它是一個新的電子郵件或者如果電子郵件已被用於登錄,程序是以提醒用戶電子郵件已經登錄。我的問題是電子郵件似乎沒有存儲在表中以驗證它是否以前使用過。每次我使用相同的憑證登錄時,我都會收到祝賀語句而不是Error語句。有沒有人看到我不正確的地方?也許我的語法(我已經主演了幾個小時,我似乎無法挑出這個問題)。先謝謝了!任何輸入是讚賞!MySQL和PHP解析錯誤

dbparams.txt

username=sdev_owner 
password=sdev300 
host=localhost 
db=sdev 

Disc_7.php

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Discussion 7 </title> 
</head> 
<body OnLoad="document.createlogin.uname.focus();"> 
    <?php  
    if(isset($_POST["CreateSubmit"])) {      
     validate_form();    
    } else {     
     $messages = array(); 
    show_form($messages); 
    } 
?> 

    <?php 
function show_form($messages) {   
    // Assign post values if exist 
    $uname=""; 
    $email=""; 
    if (isset($_POST["uname"])) 
      $uname=$_POST["uname"]; 

    if (isset($_POST["email"])) 
      $email=$_POST["email"]; 


    echo "<p></p>"; 
    echo "<h2> Enter Login Information</h2>"; 
    echo "<p></p>";  
?> 
    <form name="createlogin" method="POST" action="Disc_7.php"> 
     <table border="1" width="100%" cellpadding="0"> 
     <tr> 
      <td width="157">Username:</td> 
      <td><input type="text" name="uname" value='<?php echo $uname ?>' size="30"></td> 
     </tr> 
     <tr> 
      <td width="157">Email:</td> 
      <td><input type="text" name="email" value='<?php echo $email ?>' size="30"></td> 
     </tr> 
     <tr> 
      <td width="157"><input type="submit" value="Submit" name="CreateSubmit"></td> 
      <td>&nbsp;</td> 
     </tr> 
     </table> 
    </form> 

    <?php 
} 
?> 
     <?php 
function validate_form(){ 

$messages = array(); 
$redisplay = false; 
$uname = $_POST["uname"]; 
$email = $_POST["email"]; 

    $login = new LoginClass($uname,$email); 
    $count = countLogin($login); 

    if ($count==0) {  
     $res = insertLogin($login); 
     echo "<h3>Congratulations, you've logged in!</h3> ";   
    } else { 
     echo "<h3>Error: A login with that e-mail has already logged in.</h3> ";   
    } 
} 

function countLogin ($login){   

$mysqli = connectdb(); 
$uname = $login->getUname(); 
$email = $login->getEmail(); 

$mysqli = connectdb(); 

$Myquery = "SELECT count(*) as count from LoginData where eMail='$email'"; 

if ($result = $mysqli->query($Myquery)) { 
    while($row = $result->fetch_assoc()) { 
     $count=$row["count"];            
    }  
    $result->close();   
} 
    $mysqli->close(); 

    return $count;  
} 

function insertLogin ($login){ 

$mysqli = connectdb(); 

$uname = $login->getUname(); 
$email = $login->getEmail(); 

$Query = "INSERT INTO LoginData (userName,eMail) VALUES ('$uname', '$email')"; 

    $Success=false;   
    if ($result = $mysqli->query($Query)) { 
     $Success=true; 
    } 
    $mysqli->close(); 

     return $Success; 
    } 

function getDbparms(){ 
    $trimmed = file('parms/dbparms.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
    $key = array(); 
    $vals = array(); 
    foreach($trimmed as $line){ 
     $pairs = explode("=",$line);  
     $key[] = $pairs[0]; 
     $vals[] = $pairs[1]; 
    } 

    $mypairs = array_combine($key,$vals); 

    $myDbparms = new DbparmsClass($mypairs['username'],$mypairs['password'], $mypairs['host'],$mypairs['db']); 

    return $myDbparms; 
} 

function connectdb() {    
    $mydbparms = getDbparms(); 

    $mysqli = new mysqli($mydbparms->getHost(), $mydbparms->getUsername(),$mydbparms->getPassword(),$mydbparms->getDb()); 

    if ($mysqli->connect_error) { 
     die('Connect Error (' . $mysqli->connect_errno . ') ' 
       . $mysqli->connect_error);  
    } 
    return $mysqli; 
    } 

class DBparmsClass 
    { 
     private $username=""; 
     private $password=""; 
     private $host=""; 
     private $db=""; 

     public function __construct($myusername,$mypassword,$myhost,$mydb) 
     { 
      $this->username = $myusername; 
      $this->password = $mypassword; 
       $this->host = $myhost; 
       $this->db = $mydb; 
     } 

      public function getUsername() 
     { 
      return $this->username; 
     } 
      public function getPassword() 
     { 
      return $this->password; 
     } 
      public function getHost() 
     { 
      return $this->host; 
     } 
      public function getDb() 
     { 
      return $this->db; 
     }  

     // Set methods 
     public function setUsername ($myusername) 
     { 
      $this->username = $myusername;  
     } 
     public function setPassword ($mypassword) 
     { 
      $this->password = $mypassword;  
     } 
     public function setHost ($myhost) 
     { 
      $this->host = $myhost;  
     } 
     public function setDb ($mydb) 
     { 
      $this->db = $mydb;  
     }  

    } // End DBparms class 

// Class to construct Students with getters/setter 
class LoginClass 
{ 
    // property declaration 
    private $uname=""; 
    private $email=""; 

    // Constructor 
    public function __construct($uname,$email) 
    { 
     $this->uname = $uname; 
     $this->email = $email;  
    } 

    // Get methods 
     public function getUname() 
    { 
     return $this->uname; 
    } 
     public function getEmail() 
    { 
     return $this->email; 
    } 

    // Set methods 
    public function setUname ($value) 
    { 
     $this->uname = $value;  
    } 
    public function setEmail ($value) 
    { 
     $this->email = $value;  
    } 

} 
?> 
</body> 
</html> 
+0

嗨,你的表配置如何? :)唯一約束?首要的關鍵? – Goikiu

+0

@Goikiu這是一個類,雖然我確實理解在SQL中配置表,但我的教師(工作的程序)中的示例沒有指定在MySQL和PHP中配置表的位置。 – pCaMp

+0

**警告**:使用'mysqli'時,您應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param']( http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,如果有人試圖利用您的錯誤,這可能會非常有害。 – tadman

回答

0

我想通了,我的問題,我必須登錄到MySQL和創建我的桌子上有。我不確定在哪裏創建我的桌子,當我試圖將其添加到我的程序中時,它不被識別。