2017-04-22 12 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にログインして、そこに私のテーブルを作成する必要がありました。テーブルをどこに作成するのかがわからず、プログラムに追加しようとしたときに認識されませんでした。