标题不符合条件

时间:2015-03-13 14:50:49

标签: php redirect if-statement

我一直试图让网页工作了好几天,而且这个网站上的“相关”问题似乎没什么帮助。

我已经创建了一个signup.php页面,其中有一个表单,用于输入用户凭据以注册我正在构建的站点,当表单填写完毕并且用户按下“提交”按钮时,表单使用action“signupsuccess.php”,其中包含用于将凭据插入数据库的所有php代码,然后将用户重定向到“Login.php”页面。

我的问题: 我编写的代码说如果用户没有为表单中的某个字段输入任何数据,那么使用以下代码将它们带回signup.php页面:

<?php
if(!isset($_POST['fname'])&&($_POST['lname'])&&($_POST['email'])&&($_POST['pass'])){
    header('Location:Signup.php');
    exit;
}
else{
$host = "localhost";
$user = "******";
$password = "******";
$conn = mysql_connect($host, $user, $password);
$db = mysql_select_db('*****', $conn);
if(! get_magic_quotes_gpc() )
{
   $fname = addslashes ($_POST['fname']);
   $lname = addslashes ($_POST['lname']);
   $email = addslashes($_POST['email']);
   $pass = addslashes($_POST['pass']);
}
else
{
   $fname = $_POST['fname'];
   $lname = $_POST['lname'];
   $email = $_POST['email'];
   $pass= $_POST['pass'];
}
$query = mysql_query("select * from users where pass='$pass' AND email='$email'", $conn);
$rows = mysql_num_rows($query);
if ($rows == 1) {
    $errors[] = 'That user already exists, try another email';
}else
{

$sql = "INSERT INTO users ".
       "(fname,lname, pass, email) ".
       "VALUES('$fname','$lname','$pass','$email')";
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not enter data: ' . mysql_error());
}
}
}
mysql_close($conn);

?>

但是标题()只是在没有将任何内容放入字段时才会将用户带回来。有什么我做的显然是错误的,或者任何人都可以帮助我解决用户重定向,如果他们没有输入任何东西。

4 个答案:

答案 0 :(得分:4)

您的if声明不正确。如果您只是想检查是否设置了这些变量,则需要在所有变量上调用isset()

您可以通过拨打isset()或同时拨打全部电话来执行此操作。

if(!isset($_POST['fname'],$_POST['lname'],$_POST['email'],$_POST['pass'])){
    header('Location:Signup.php');
    exit;
}

仅供参考,您对SQL注入开放addslashes() 会阻止SQL注入。此外,mysql_*函数已过时,您不应使用它们编写新代码。请查看mysqli或PDO。

答案 1 :(得分:1)

我认为你真的不需要重定向,你可能应该从前端克服这个问题,也许js验证可以做到这一点并且更简单。

1.-更改提交的操作以运行功能&#34; validate()&#34;

2.-创建类似的功能:

$(document).ready(function(){

function validate(){
    if ($.trim($("#inputid").val()) == ""){
         $(this).css('border', '2px solid red');
    } else if ($.trim($("#inputid2").val()) == "") {
         $(this).css('border', '2px solid red');
    } else if ($.trim($("#inputid3").val()) == "") {
         $(this).css('border', '2px solid red');
    } else {
         submit();
    }   
}

});

&#39; #input?&#39;是要验证的输入的选择器,null是要避免的值,在这种情况下,没有值,只是空输入。然后,如果所有输入都被填充,它将执行submit()函数,您应该创建它以执行任何操作。

注意:这种选择器适用于jquery,因此您必须将其包含在代码中,将其放在标题中

<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>

注2:这是前端方法。我不知道这是否方便,但至少是一种选择和帮助。

祝你好运!

答案 2 :(得分:0)

您的if语句是问题所在。因为isset只影响

$_POST['fname'],

if if statment被跳过,所以

header('Location:Signup.php') 

没有达到。

我喜欢把

echo 'test';

在我的代码中,我正在测试它并在代码中移动它。这样,如果它没有回应'test',我知道甚至没有达到代码。在这种情况下,这本可以帮助你,向你显示问题不是标题,而是if语句。另外,请考虑将PDO用于mysql连接。它对于mysql注入更安全。

答案 3 :(得分:0)

您的情况(如果根据之前的答案进行纠正)仍然会导致else情况。
由于您正在检查$_POST字段,因此将始终存在。
isset()如果未设置变量,则返回false(但它是:它来自您的表单)或者是NULL(它不是:它包含一个空值)。因此,isset()将返回每个字段的真实fopr。
您需要的是,对于每个字段:
if (empty(trim($_POST['fname']))) || ... )
empty()在未设置变量时返回false或为空(即NULL,空字符串,0 ,0.0,false等,请参见此处:http://php.net/manual/en/function.empty.php

另外,您需要对已弃用的mysql_functions和攻击漏洞做一些事情。