簡體   English   中英

如何使用PHP驗證表中的所有行

[英]How to validate all rows in a table using PHP

下面是我試圖驗證表中是否存在相同名稱, idemail的腳本,問題是,即使我為每個字段添加新輸入,我仍然會得到“數據已經存在”,該怎么辦我解決了這個問題,也解決了如何對每個字段使用正則表達式進行驗證。 對於id我需要使用正則表達式的三個字母和3個數字。

if(isset($_POST['register'])){

    //Retrieve the field values from our registration form.
    $name = !empty($_POST['name']) ? trim($_POST['name']) : null;
    $ccode = !empty($_POST['id']) ? trim($_POST['id']) : null;
    $email = !empty($_POST['email']) ? trim($_POST['email']) : null;

    $sql = "SELECT COUNT(*) AS num FROM users";
    $stmt = $pdo->prepare($sql);

    $stmt->bindValue(':name', $name);
    $stmt->bindValue(':id', $id);
    $stmt->bindValue(':email', $email);

    $stmt->execute();

    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if($row['num'] > 0){
        die('The Data already exists!');
    } else {
        $sql = "INSERT INTO users (name, id, email) VALUES (:name, :id,   :email)";
        $stmt = $pdo->prepare($sql);
        $stmt->bindValue(':name', $name);
        $stmt->bindValue(':id', $id);
        $stmt->bindValue(':email', $email);
        $result = $stmt->execute();
        if ($result) {
            echo 'User aadded successfully!';
        }
   } 
}
<form action="sign.php" method="post">
<label for="name">Name</label>
<input type="text" id="name" name="name" required><br>
<label for="id">id</label>
<input type="text" id="" name="id" required><br>
<label for="email">Email</label>
<input type="email" id="email" name="email" required><br>
<input type="submit" name="register" value=" Click to Add"></button>
</form>

以及如何驗證字段名稱是否相同。 例如,我有3個輸入字段,在第一個字段中輸入一個人的名字,在第二個或第三個字段中,如果輸入相同的名字,則單擊“提交”按鈕時會顯示錯誤,可以使用for來完成。循環檢查每個字段是否包含相同的名稱。

你可以試試:-

$name = ($_POST['name']) ? $name = trim($_POST['name']) : $name='';

嗯,檢查那些變量是否已經存在的行不使用任何變量?

$sql = "SELECT COUNT(*) AS num FROM users"; // Where are the variables?
$stmt = $pdo->prepare($sql);


$stmt->bindValue(':name', $name);
$stmt->bindValue(':id', $id);
$stmt->bindValue(':email', $email);

$stmt->execute();

您想要做的是:

$sql = "SELECT COUNT(*) AS num FROM users WHERE name = :name OR id = :id OR email = :email"; // Where are the variables?
$stmt = $pdo->prepare($sql);


$stmt->bindParam(':name', $name);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':email', $email);

$stmt->execute();

我對使用PDO不太有經驗。 我自己更喜歡MySQLi

您應該閱讀有關准備好的語句的更多信息

編輯:

基於注釋的新查詢,只需在使用PHP之前檢查name / manager / senior中的雙打即可:

if($name != $manager && $manager != $senior && $name != $senior) {
    $sql = "SELECT COUNT(*) AS num FROM users WHERE (name = :name OR manager = :manager OR senior = :senior)";
    $stmt = $pdo->prepare($sql);


    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':manager', $manager);
    $stmt->bindParam(':senior', $senior);

    $stmt->execute();
    // insert other stuff
} else {
    // insert error here
}

完整代碼:

if(isset($_POST['register'])){

    //Retrieve the field values from our registration form.
    $name = !empty($_POST['name']) ? trim($_POST['name']) : null;
    $manager= !empty($_POST['manager']) ? trim($_POST['manager']) : null;
    $senior= !empty($_POST['senior']) ? trim($_POST['senior']) : null;

    if($name != $manager && $manager != $senior && $name != $senior) {
        $sql = "SELECT COUNT(*) AS num FROM users WHERE (name = :name OR manager = :manager OR senior = :senior)";
        $stmt = $pdo->prepare($sql);


        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':manager', $manager);
        $stmt->bindParam(':senior', $senior);

        $stmt->execute();

        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        if($row['num'] > 0){
            die('The Data already exists!');
        } else {
            $sql = "INSERT INTO users (name, manager, senior) VALUES (:name, :manager,   :senior)";
            $stmt = $pdo->prepare($sql);
            $stmt->bindParam(':name', $name);
            $stmt->bindParam(':manager', $manager);
            $stmt->bindParam(':senior', $senior);
            $result = $stmt->execute();
            if ($result) {
                echo 'User added successfully!';
            }
        }
    } else {
        die('Duplicate in name/manager/senior!');
    }
}

您需要更新以下查詢行

$sql = "SELECT COUNT(*) AS num FROM users";
$stmt = $pdo->prepare($sql);

對此

$sql = "SELECT COUNT(*) AS num FROM users WHERE name = :name OR id = :id OR email = :email";
$stmt = $pdo->prepare($sql);

暫無
暫無

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

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