0

我有这个脚本来检查提交的表单。

它检查是否所有字段都已填写,并检查用户之前是否提交过表单。它还检查输入的数据是否已经在数据库中。

当我尝试检查输入的数据是否在数据库中时,它总是返回false

我的问题是:如何有效地检查 POST 值是否相同?

代码

<?php
error_reporting(E_NOTICE ^ E_ALL);
$Name = $_POST['name'];
$ID = $_POST['id'];
$Topic_1 = $_POST['1'];
$Topic_2 = $_POST['2'];
$Topic_3 = $_POST['3'];
$Topic_4 = $_POST['4'];
$Topic_5 = $_POST['5'];
$Topic_6 = $_POST['6'];
$Topic_7 = $_POST['7'];
$Topic_8 = $_POST['8'];
$Topic_9 = $_POST['9'];
$Topic_10 = $_POST['10'];
$Topic_11 = $_POST['11'];
$Topic_12 = $_POST['12'];
$Topic_13 = $_POST['13'];
$Topic_14 = $_POST['14'];
$Topic_15 = $_POST['15'];
$IP = $_SERVER['REMOTE_ADDR'];

$Connect = new mysqli("127.0.0.1", "root", "", "Data");
$Check = 'SELECT * FROM Submissions WHERE School_ID = "'.$ID.'" AND IP = "'.$IP.'"';
$Insert = 'INSERT INTO Submissions (Name, School_ID, Topic_1, Topic_2, Topic_3, Topic_4, Topic_5, Topic_6, Topic_7, Topic_8, Topic_9, Topic_10, Topic_11, Topic_12, Topic_13, Topic_14, Topic_15, IP) VALUES ("'.$Name.'", "'.$ID.'", "'.$Topic_1.'", "'.$Topic_2.'", "'.$Topic_3.'", "'.$Topic_4.'", "'.$Topic_5.'", "'.$Topic_6.'", "'.$Topic_7.'", "'.$Topic_8.'", "'.$Topic_9.'", "'.$Topic_10.'", "'.$Topic_11.'", "'.$Topic_12.'", "'.$Topic_13.'", "'.$Topic_14.'", "'.$Topic_15.'", "'.$IP.'")';

if($Name && $ID != "")
{
    if($Result = $Connect->query($Check))
    {
        $Rows = $Result->num_rows;
        if($Rows == 0)
        {
            if($_POST != $_POST)
            {
                if($Go = $Connect->prepare($Insert))
                {
                    if($Go->execute())
                    {
                        echo 'Thanks';
                    }
                    else
                    {
                        echo 'There Was An Error';
                    }
                }
                else
                {
                    echo 'There Was An Error';
                }
            }
            else
            {
                echo 'No Two Values Can Match.';
            }
        }
        else
        {
            echo 'You Cant Vote Twice.';
        }
        $Result->close();
    }
    else
    {
        echo 'There Was An Error.';
    }
}
else
{
    echo 'Please Fill Out All Fields';
}
$Connect->close();
4

6 回答 6

0

在进行比较之前,对变量使用 var_dump() 来检查它们实际包含的内容。

var_dump($Name);
var_dump($ID);
exit();

然后检查负匹配或正匹配。

if( !empty($Name) && empty($ID) ){
exit('ah, name filled in but not id ...');
} 

您甚至可以在单独的文件中对其进行欺骗。

<?php
$Name = 'Bob';
$ID = ''; // or use 0 or any test you want

var_dump($Name);
var_dump($ID);

if( !empty($Name) && empty($ID) ){
exit('ah, name filled in but not id ...');
} 

像这样孤立的问题将帮助您逐步发展,让某些东西发挥作用,然后添加更多行,直到您到达目的地。

于 2013-09-02T20:37:51.540 回答
0

这是错误:

if($_POST != $_POST)

您可能确实想将 db 的结果与 $_POST 进行比较。

$Row = $Result->fetch_assoc();
if($Row != $_POST)
于 2013-09-02T20:33:01.467 回答
0

你的if陈述应该看起来像

if($name != "" && $check != "")
于 2013-09-02T20:28:48.870 回答
0

您不能真的那么容易地检查一个人之前是否提交过表单。

一种方法是在请求附带 POST 时再添加一个隐藏字段。

像这样的东西:

    <form method="POST" action="">
        <?php 
        if(isset($_POST['submit'])) { 
            echo '<input type="hidden" name="second_post" value="1">'; 
        } ?>
        <!-- Other form items -->
        <input type="submit" name="submit" value="1">
    </form>

然后你可以检查它是否第二次:

if(isset($_POST['second_post'])) {
   // Second time of form post;
} else {
   // First (or zero) time post.
}
于 2013-09-02T20:48:17.007 回答
0

要检查两个 POST 值是否相同:

array_diff($_POST, array_unique($_POST));
于 2013-09-02T20:57:25.573 回答
0

您正在寻找的是以下内容

$_POST['1'] = 'a';
$_POST['2'] = 'b';
$_POST['3'] = 'c';
$_POST['4'] = 'a';
$_POST['5'] = 'd';

$results = array_unique($_POST);
var_dump($results);

返回:

array
  1 => string 'a' (length=1)
  2 => string 'b' (length=1)
  3 => string 'c' (length=1)
  5 => string 'd' (length=1)
于 2013-09-02T21:35:29.030 回答