2014-09-30 51 views
1

由於某些原因,當我填寫我的基本註冊表格時沒有任何問題,它表示一切都已完成,但是當我去看看我的數據庫時,沒有任何內容保存在那裏。不使用PDO準備輸入數據庫表格INSERT

這是我的形式:

<form method="post"> 
     <p id="registryinput">Voornaam:<input name="voornaam" type="text"></p><br> 
     <p id="registryinput">Tussenvoegsels:<input name="tussenvoegsel" type="text"></p><br> 
     <p id="registryinput">Achternaam:<input name="achternaam" type="text"></p><br> 
     <p id="registryinput">E-mail:<input name="email" type="text"></p><br> 
     <p id="registryinput">Wachtwoord:<input name="wachtwoord" type="password"></p><br> 
     <p id="registryinput">Herhaal wachtwoord:<input name="herhaalwachtwoord" type="password"></p><br> 
     <input name="submit" type="submit" value="Registreren"> 
    </form> 

這是數據庫連接:

<?php 
    $host_name = "localhost"; 
    $database = "login"; 
    $username = "root"; 
    $password = ""; 

    try { 
     $db = new PDO("mysql:host=".$host_name.";dbname=".$database,$username,$password); 
    } 
    catch (PDOException $e) { 
     print "Error!: ".$e->getMessage()."<br/>"; 
     die(); 
    } 
?> 

這是我用來上傳到數據庫的代碼:

<?php 
     include("connect.php"); 

     $voornaam = @$_POST["voornaam"]; 
     $tussenvoegsel = @$_POST["tussenvoegsel"]; 
     $achternaam = @$_POST["achternaam"]; 
     $email = @$_POST["email"]; 
     $wachtwoord = @$_POST["wachtwoord"]; 
     $herhaalwachtwoord = @$_POST["herhaalwachtwoord"]; 
     $submit = @$_POST["submit"]; 
     $encpassword = md5($password); 

     if($submit){ 
      if($voornaam==true){ 
       if($achternaam==true){ 
        if($email==true){ 
         if($wachtwoord==true){ 
          if($herhaalwachtwoord==true){ 
           if($wachtwoord==$herhaalwachtwoord){ 
            if(strlen($voornaam)<50){ 
             if(strlen($tussenvoegsel)<50){ 
              if(strlen($achternaam)<50){ 
               if(strlen($email)<50){ 
                if(strlen($wachtwoord)<50){ 
                 $q = $db->prepare("INSERT INTO 'userinfo' ('voornaam','tussenvoegsel','achternaam','email','wachtwoord') VALUES (':voornaam',':tussenvoegsel',':achternaam',':email',':wachtwoord')"); 
                 $q->execute(array(':voornaam'=>$voornaam,':tussenvoegsel'=>$tussenvoegsel,':achternaam'=>$achternaam,':email'=>$email,':wachtwoord'=>$wachtwoord)); 
                 echo "Registratie succesvol!"; 
                } else { 
                 echo "Wachtwoord langer dan 50 karakters."; 
                } 
               } else { 
                echo "E-mail langer dan 50 karakters."; 
               } 
              } else { 
               echo "Achternaam langer dan 50 karakters."; 
              } 
             } else { 
              echo "Tussenvoegsel langer dan 50 karakters."; 
             } 
            } else { 
             echo "Voornaam langer dan 50 karakters."; 
            } 
           } else { 
            echo "Wachtwoorden zijn niet gelijk."; 
           } 
          } else { 
           echo "Herhaal uw wachtwoord."; 
          } 
         } else { 
          echo "Geen wachtwoord ingevuld."; 
         } 
        } else { 
         echo "Geen e-mail ingevuld."; 
        } 
       } else { 
        echo "Geen achternaam ingevuld."; 
       } 
      } else { 
       echo "Geen voornaam ingevuld."; 
      } 
     } 
    ?> 

我主要關注的是如果這部分是正確的:

$q = $db->prepare("INSERT INTO 'userinfo' ('voornaam','tussenvoegsel','achternaam','email','wachtwoord') VALUES (':voornaam',':tussenvoegsel',':achternaam',':email',':wachtwoord')"); 
$q>execute(array(':voornaam'=>$voornaam,':tussenvoegsel'=>$tussenvoegsel,':achternaam'=>$achternaam,':email'=>$email,':wachtwoord'=>$wachtwoord)); 

不介意的所有值名稱我荷蘭,這樣所有的頁面上的文本是荷蘭

其實我沿着一點點工作,掉在了另一個問題,我的第二個目標是使一個登錄表單使用SELECT *選項,我得到它的工作。唯一的問題是用戶名我使用電子郵件,但當它試圖調用電子郵件的價值(例如[email protected])它出現此錯誤:

致命錯誤:未捕獲異常'PDOException '消息'SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;請檢查第15行的C:\ wamp \ www \ PWS \ index.php中''gmail.com ='admin''第1行'附近使用的正確語法對應的MySQL服務器版本的手冊 (! )PDOException:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法有錯誤;在第15行的C:\ wamp \ www \ PWS \ index.php第1行附近查看與您的MySQL服務器版本相對應的正確語法的手冊,以便在'@gmail.com ='admin''附近使用。

我知道爲什麼這不起作用,雖然它將電子郵件識別爲值[email protected],其中@ gmail.com由於@而分離。 那麼,怎樣才能更改現有代碼:

<?php 
    include("connect.php"); 

    $logemail = @$_POST['email']; 
    $logww = @$_POST['wachtwoord']; 

    if(isset($_POST['submit'])){ 
     $q2 = $db->prepare("SELECT * FROM userinfo WHERE $logemail = '$logww'"); 
     $q2->execute(array(':email'=>$logemail,':wachtwoord'=>$logww)); 
     echo "Login succesvol!"; 
    } 
?> 

而且形式:

<form method="post"> 
    E-mail:<input type="text" name="email"><br> 
    Wachtwoord:<input type="password" name="wachtwoord"><br> 
    <input type="submit" name="submit" value="Inloggen"><br> 
</form> 

所以它將接受[email protected]爲1個整體價值,而不是在部分?

+1

真的有必要築巢每'if'內的另一個說法? – George 2014-09-30 14:31:32

+1

我的上帝,它看起來像一個奇怪的金字塔等待跌倒,爲什麼你不能只是結合那些 – Ghost 2014-09-30 14:32:35

+0

我知道這不是最有效的,但我喜歡這種方式,因爲我可以更快找到 – user3307080 2014-09-30 14:41:50

回答

3

您在表格,列和佔位符周圍使用引號,將其刪除。

那些不是正確的identifiers

INSERT INTO userinfo (voornaam,tussenvoegsel,achternaam,email,wachtwoord) 
VALUES (:voornaam,:tussenvoegsel,:achternaam,:email,:wachtwoord) 

有使用

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

打開連接之後,就已經暗示了錯誤。

$q>execute缺少-所以將其更改爲$q->execute箭頭操作符的格式不正確。 (儘管你似乎已經在你的全部代碼中),但爲了以防萬一,值得一提的是。


我也注意到你正在使用if($submit){它的使用通常是最好

if(isset($_POST['submit'])){...} 

使用@符號@$_POST抑制errors。最好不要使用它們。


密碼存儲

您正在使用MD5口令存儲md5($password)
這不再被認爲是安全的使用了。

我建議你用CRYPT_BLOWFISH或者PHP5.5的password_hash()函數。
對於PHP < 5.5使用password_hash() compatibility pack

+1

也是這個'$ q>執行'箭頭操作符,它已經是一個錯誤 – Ghost 2014-09-30 14:35:14

+1

@Ghost好,我會補充一點,謝謝。 – 2014-09-30 14:35:33

+1

@Ghost看起來像OP在代碼'q-> execute(array('只有在那裏,在哪裏說*「我主要關心的是如果這個部分是正確的:'*但是謝謝這說明你注意細節;) – 2014-09-30 14:57:18

1

不,SQL文本不正確。標識符不用單引號括起來。

INSERT INTO 'userinfo' ('voornaam','tussenvoegsel' 
      ^ ^^  ^^   ^

(當MySQL看到單引號,它看到一個字符串字面量,而不是一個表名或列名。)

解決方法是從你的SQL文本中刪除所有的單引號。

如果標識符需要轉義,它可以包含在反引號字符中。 (時髦的反引號字符,不便位於鑰匙到我的鍵盤上的「1」鍵的左側。

INSERT INTO `userinfo` (`voornaam`,`tussenvoegsel`