簡體   English   中英

表單未使用PDO prepare和INSERT輸入數據庫

[英]Form not inputting in database using PDO prepare and 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 *選項制作登錄表單,然后我開始工作了。 唯一的問題是我正在使用電子郵件的用戶名,但是當它嘗試調用電子郵件的值(例如Thodor20@gmail.com)時,出現此錯誤:

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

我知道為什么它不起作用,盡管它將電子郵件識別為值Thodor20@gmail.com,其中@ 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>

因此,它將接受Thodor20@gmail.com作為1的全部價值,而不是部分嗎?

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

這些不是正確的標識符

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使用@符號可抑制錯誤 最好不要使用它們。


密碼儲存

您正在使用MD5進行密碼存儲md5($password)
這不再被認為可以安全使用。

我建議您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()函數。
對於PHP <5.5,使用password_hash() compatibility pack

否,SQL文本不正確。 標識符不包含在單引號中。

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

(當MySQL看到單引號時,它看到的是字符串文字,而不是表名或列名。)

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

如果標識符需要轉義,則可以將其括在反引號中。 (時髦的反引號字符,不方便地位於鍵盤上“ 1”鍵左側的鍵上。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM