PHP比较变量每次都返回false

时间:2013-09-02 20:25:13

标签: php mysql database variables mysqli

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

检查所有字段是否全部填写完毕,并检查用户之前是否提交过表格。它还会检查输入的数据是否已存在于数据库中。

当我尝试检查输入的数据是否在数据库中时,它总是返回 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();

6 个答案:

答案 0 :(得分:0)

您的if声明应该是

if($name != "" && $check != "")

答案 1 :(得分:0)

这是错误:

if($_POST != $_POST)

您可能希望将db的结果与$ _POST进行比较。

$Row = $Result->fetch_assoc();
if($Row != $_POST)

答案 2 :(得分: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 ...');
} 

隔离这样的问题将有助于您逐步发展,让事情有效,然后添加更多行,直到您到达目的地。

答案 3 :(得分: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.
}

答案 4 :(得分:0)

检查两个POST值是否相同:

array_diff($_POST, array_unique($_POST));

答案 5 :(得分: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)