0

我最近尝试在 MSSQL 中使用 php 的 PDO 类。我有一个带有文本框和提交按钮的表单。现在我喜欢做的是使用 jQuery 进行验证,让它运行得更快。每当 jQuery 完成验证并按应有的方式填充它时,它应该激活一个 php 函数,该函数将添加表单作为带有 PDO 类的查询。
html代码:

<div id="registreren">
    <div class="titel">
            <p class="big"> Registreren| </p>
            <p class="small"> Registreer met jouw gewenste gegevens.</p>
    </div>
    <div id="form">
        <form method="POST" action="" onsubmit="return false;">
            <table border = '1'>
                <tr>
                    <td>Username:</td>
                    <td><input type="textbox" name="txtUsername" /></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><input type="password" name="txtPassword" /></td>
                </tr>   
                <tr>
                    <td>E-mail:</td>
                    <td><input type="textbox" name="txtEmail" /></td>
                </tr>
                <tr>
                    <td>Telefoonnummer:</td>
                    <td><input type="textbox" name="txtTel" /></td>
                </tr>   
                <tr>
                    <td></td>
                    <td  class="showPass"><input type="checkbox" name="showPass" />Laat password zien</td>
                </tr>                   
                <tr>
                    <td><p class="warning4">&nbsp;<br /> &nbsp;</p></td>
                    <td><button type="submit" name="registreren" value="registreren" class="btnRegistrate">Registreren</button></td>
                </tr>
            </table>
        </form>
    </div>

jQuery代码:

var registrateEmpty;

$('.btnRegistrate').click(function() {
    $('.warning4').html('');
    registrateEmpty = false;
    $('#registreren input').each(function() {
        if($(this).val() == "")
        {
            $('.warning4').html('Vul alle velden in!');
            registrateEmpty = true;
            return false;
        }
    })

    if(registrateEmpty!=true) {
        if($('input[name=txtUsername]').val().length < 5 || $('input[name=txtPassword]').val().length < 5) {
            $('.warning4').html('Username en password moeten minimaal uit 5 tekens bestaan.');
            return false;
        }
        else if($('input[name=txtTel]').val().match(/[a-zA-Z]/) || $('input[name=txtTel]').val().length != 10) {
            $('.warning4').html('Vul een geldige telefoonnummer in.');          
            return false;
        }
        else if($('input[name=txtEmail]').val().indexOf('@') == -1 || $('input[name=txtEmail]').val().length < 5) {
            $('.warning4').html('Vul een geldige e-mail adres in.');    
            return false;               
        }
        else {
            <?php 
                toevoegen();
            ?>
            $('.warning4').html('');                            
        }
    }
})

这个脚本实际上做的是它首先检查它是否有任何空输入。如果所有内容都已填写,它将检查所填写值的某些特定长度。当一切都“好”时,它将激活 php 功能

php函数:

include('connect.php');

function toevoegen() {
    global $pdo;
    try {
        $sql = "INSERT INTO account 
                                    (acc_Username, acc_Password, acc_Email, acc_Tel, join_Date, privilege) 
                                    VALUES 
                                    (:username, :password, :email, :tel, :jdate, 1);
                                    ";

        $s = $pdo -> prepare($sql); //doet hetzelfde als query() alleen moet je hier nog een trigger functie sturen

        $s->bindValue(':username', $_POST['txtUsername'], PDO::PARAM_STR);
        $s->bindValue(':password', $_POST['txtPassword'], PDO::PARAM_STR);
        $s->bindValue(':email', $_POST['txtEmail'], PDO::PARAM_STR);
        $s->bindValue(':tel', $_POST['txtTel'], PDO::PARAM_STR);                
        $s->bindValue(':jdate', date('d-m-Y'), PDO::PARAM_STR);

        $s->execute(); 

        $message = "Succeed!";
    }
    catch (PDOException $e)
    {
        echo 'Fout bij inserten van een rij: ' . $e->getMessage();
        exit;
    }
}

这样做是它首先准备 sql 语句。然后它将使用文本框值填充语句中的打开变量。

现在发生的事情是它似乎执行了 php 函数,甚至没有使用 JQuery 进行验证。我的错误:

未定义索引:txtUsername 未定义索引:txtPassword 未定义索引:txtEmail 未定义索引:txtTel

所以我希望有人知道出了什么问题,或者如何像这样一起使用 php jquery。我希望即使有些东西是其他语言,它仍然是可以理解的。提前致谢。

4

1 回答 1

0

您只是从 javascript 调用一个函数,一切都很好,那么您将如何将它们作为函数中的 post 值将它们作为参数传递给函数,或者如果一切都很好,则只需返回 true 并将您的函数置于

$('.btnRegistrate').click(function() {
    $('.warning4').html('');
    registrateEmpty = false;
    $('#registreren input').each(function() {
        if($(this).val() == "")
        {
            $('.warning4').html('Vul alle velden in!');
            registrateEmpty = true;
            return false;
        }
    })

    if(registrateEmpty!=true) {
        if($('input[name=txtUsername]').val().length < 5 || $('input[name=txtPassword]').val().length < 5) {
            $('.warning4').html('Username en password moeten minimaal uit 5 tekens bestaan.');
            return false;
        }
        else if($('input[name=txtTel]').val().match(/[a-zA-Z]/) || $('input[name=txtTel]').val().length != 10) {
            $('.warning4').html('Vul een geldige telefoonnummer in.');          
            return false;
        }
        else if($('input[name=txtEmail]').val().indexOf('@') == -1 || $('input[name=txtEmail]').val().length < 5) {
            $('.warning4').html('Vul een geldige e-mail adres in.');    
            return false;               
        }
        else {
            $('.warning4').html('');                            
        }
    }
})
IF($_SERVER['REQUEST_METHOD'] == "POST") {
//call your function
  toevoegen()
} 

function toevoegen() {
    global $pdo;
    try {
        $sql = "INSERT INTO account 
                                    (acc_Username, acc_Password, acc_Email, acc_Tel, join_Date, privilege) 
                                    VALUES 
                                    (:username, :password, :email, :tel, :jdate, 1);
                                    ";

        $s = $pdo -> prepare($sql); //doet hetzelfde als query() alleen moet je hier nog een trigger functie sturen

        $s->bindValue(':username', $_POST['txtUsername'], PDO::PARAM_STR);
        $s->bindValue(':password', $_POST['txtPassword'], PDO::PARAM_STR);
        $s->bindValue(':email', $_POST['txtEmail'], PDO::PARAM_STR);
        $s->bindValue(':tel', $_POST['txtTel'], PDO::PARAM_STR);                
        $s->bindValue(':jdate', date('d-m-Y'), PDO::PARAM_STR);

        $s->execute(); 

        $message = "Succeed!";
    }
    catch (PDOException $e)
    {
        echo 'Fout bij inserten van een rij: ' . $e->getMessage();
        exit;
    }
}
于 2013-06-20T09:48:15.137 回答