PHP代码不能按预期的形式工作将不会提交正确的数据

时间:2015-06-01 19:34:13

标签: php html

所以我输入了这段代码,据说在您输入有效的密码并回答安全问题后会向您发送电子邮件。我的问题是这个表格不会提交我给出的答案。它总是回应"提交"在第二个php块的乞讨。如果你能发现我可能错过的任何其他错误,请告诉我。非常感谢。

<?php
define ('DB_SERVER','fenrir');
define ('DB_USERNAME','ArchivrTW');
define ('DB_PASSWORD','vPOZOa1txS');
define ('DB_DATABASE','ArchivrTW');
$connection = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
    if(!$connection)
            {
                    die('Could not connect because: ' . mysql_error());
            }
?>
<?php
$test = $_POST['email'];
$query = "SELECT 'EMAIL' FROM 'USERS' WHERE 'EMAIL'=$test";
echo(strlen($query));
if(strlen($query) > 42)
    {
                            $query1 = "SELECT 'SecurityQ' from 'USERS' WHERE 'EMAIL' =$test";
                            $query2 = "SELECT 'SecurityA' from 'USERS' WHERE 'EMAIL' =$test";
                            $result = mysqli_query($connection,$query);
                            $result1 = mysqli_query($connection,$query1);
                            $Results = mysqli_fetch_assoc($result);
                            $Results1 = mysqli_fetch_assoc($result1);
                            $Results2 = mysqli_fetch_assoc($result2);
                            echo($Results1);
    }
?>
<form action="recover.php" method="post">
    <p>Security Question Answer: <input type="text" name="answer" placeholder="Type your answer here" /> </p>
    <p><input type="submit" name="answer" id="answer" /> </p>
</form>
<?php
$answer=$_POST['answer'];
echo($answer);

                                    if (count($Results) >= 1 && strcmp($_POST['answer'],$Results2) == 0)
                                            {
                                                    $REQ_STATUS = 1;
                                                    $new_passwd = rand(1,1000000);
                                                    $to = $email;
                                                    $subject = "Archivr-Forgot Password";
                                                    $msg = "Use this generated password to log in then change it using the Edit Profile Menu";
                                                    mail($to, $subject, $msg);
                                            }
                                    else
                                            {
                                                    $message="Account not found or wrong security question answer";
                                            }

                                    if($REQ_STATUS == 1)
                                            {
                                                    $update_query="UPDATE USERS set PASSWORD =".$new_passwd." where EMAIL ='". $to ."'";
                                            }



?>
    </body>
</html>

第一个块有效,问题是表格或第二个块。

3 个答案:

答案 0 :(得分:2)

您使用不正确的identifier qualifiers表示所有表和列都是单引号,而不是将$test变量包装在引号中;这是一个字符串。

这个例如:

SELECT 'EMAIL' FROM 'USERS' WHERE 'EMAIL'=$test

应为

SELECT `EMAIL` FROM `USERS` WHERE `EMAIL`='$test'

你可能在某个地方看到了一个教程,它的刻度类似于常规的单引号。他们是不一样的; 这些是两种不同的动物

然后,您需要按照上述相同的方法对其余查询执行相同操作。

以此为例:

$result = mysqli_query($connection,$query) or die(mysqli_error($connection));

会发出语法错误信号。

然后这个mysql_error() - 那应该是mysqli_error($connection)。你不能混合MySQL API。他们不互相混淆。

您似乎也没有做任何事情:

$update_query="UPDATE USERS set PASSWORD =".$new_passwd." where EMAIL ='". $to ."'";

无论是否与问题相关,您实际上并未执行该查询。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

参考文献:

脚注:

您目前的代码向SQL injection开放。使用prepared statementsPDO with prepared statements它们更安全

  • 另外,由于您在一个文件中使用了整个代码,因此您将收到“Undefined index xxx ....”的警告,因此您需要使用条件isset()和/或!empty()围绕您的可执行代码和POST阵列。

密码:

我希望您使用的是现代密码哈希方法,因为我认为这与重置密码有关。

对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack

答案 1 :(得分:2)

  1. 您容易受到sql injection attacks;

  2. 的攻击
  3. 您有重复的字段名称:

    <p>Security Question Answer: <input type="text" name="answer" placeholder="Type your answer here" /> </p>
                                                ^^^^^^^^^^^^
    <p><input type="submit" name="answer" id="answer" /> </p>
                        ^^^^^^^^^^^^^
    
  4. 由于字段名称相同,因此提交按钮会覆盖/替换文本字段,最后会提交空白值。

答案 2 :(得分:0)

您的表单字段和提交按钮的名称都为&#34; answer&#34;。将您的提交按钮名称重命名为&#34;提交&#34;或者是其他东西。