Php 头球获胜';我不能在条件下工作

Php 头球获胜';我不能在条件下工作,php,redirect,if-statement,Php,Redirect,If Statement,我已经试着让一个页面工作了好几天了,但是这个网站上的“相关”问题似乎没有什么帮助 我制作了一个signup.php页面,其中有一个表单,用于输入用户凭据以注册我正在构建的站点,当填写表单并且用户按下“提交”按钮时,表单使用动作“signupsuccess.php”,该动作包含将凭据插入数据库的所有php代码,然后将用户重定向到“Login.php”页面 我的问题: 我编写了一些代码,说明如果用户没有为表单中的某个字段输入任何数据,则使用以下代码将其带回signup.php页面: <?php

我已经试着让一个页面工作了好几天了,但是这个网站上的“相关”问题似乎没有什么帮助

我制作了一个signup.php页面,其中有一个表单,用于输入用户凭据以注册我正在构建的站点,当填写表单并且用户按下“提交”按钮时,表单使用动作“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);

?>

如果您的
语句不正确。如果您只是想检查这些变量是否已设置,则需要对所有变量调用
isset()

您可以通过单独调用
isset()
或一次调用完成此操作

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

仅供参考,您对SQL注入非常开放
addslashes()
不阻止SQL注入。另外,
mysql.*
函数已经过时,您不应该使用它们编写新代码。改为查看mysqli或PDO。

如果您的
语句不正确。如果您只是想检查这些变量是否已设置,则需要对所有变量调用
isset()

您可以通过单独调用
isset()
或一次调用完成此操作

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

仅供参考,您对SQL注入非常开放
addslashes()
不阻止SQL注入。另外,
mysql.*
函数已经过时,您不应该使用它们编写新代码。改为查看mysqli或PDO。

您的if语句是问题所在。因为伊塞特只会影响你

$_POST['fname'],
正在跳过if语句,因此

header('Location:Signup.php') 
没有联系到他

我喜欢把

echo 'test';

在我的代码中,当我测试它并在代码中移动它时。这样,如果它没有响应“test”,我知道代码甚至没有被访问。在本例中,这本可以帮助您,让您知道问题不在于标题,而在于if语句。此外,考虑使用PDO进行MySQL连接。它对mysql注入更安全

问题出在你的if语句上。因为伊塞特只会影响你

$_POST['fname'],
正在跳过if语句,因此

header('Location:Signup.php') 
没有联系到他

我喜欢把

echo 'test';

在我的代码中,当我测试它并在代码中移动它时。这样,如果它没有响应“test”,我知道代码甚至没有被访问。在本例中,这本可以帮助您,让您知道问题不在于标题,而在于if语句。此外,考虑使用PDO进行MySQL连接。它对mysql注入更安全

您的情况(如果根据前面的答案进行纠正)仍然会导致出现
else
情况
由于您正在检查
$\u POST
字段,因此这些字段将始终存在。
isset()
如果变量未设置(但它是:它来自表单)或为NULL(不是:它包含空值),则返回false。因此,isset()将返回每个字段的真正fopr
您需要的是,对于每个字段:
if(空(trim($\u POST['fname']))| |……)

empty()
当变量未设置或为空时返回false(即NULL、空字符串、0、0.0、false等,请参见此处:)

另外,您需要对不推荐的mysql\u函数和易受攻击的漏洞采取措施。

您的情况(如果根据前面的答案进行了纠正)仍然会导致出现
else
情况
由于您正在检查
$\u POST
字段,因此这些字段将始终存在。
isset()
如果变量未设置(但它是:它来自表单)或为NULL(不是:它包含空值),则返回false。因此,isset()将返回每个字段的真正fopr
您需要的是,对于每个字段:
if(空(trim($\u POST['fname']))| |……)

empty()
当变量未设置或为空时返回false(即NULL、空字符串、0、0.0、false等,请参见此处:)

另外,您需要对不推荐的mysql\u函数和易受攻击的漏洞采取措施。

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

1.-更改提交操作以运行函数“validate()”

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();
    }   
}

});
其中“#input”是要验证的输入的选择器,null是要避免的值,在本例中,没有值,只有空输入。然后,如果所有输入都被填充,它将执行submit()函数,您应该创建该函数来执行他必须执行的任何操作

注意:这种选择器是用于jquery的,所以您必须将其也包括在代码中,并将其放在标题中

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

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


祝你好运

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

1.-更改提交操作以运行函数“validate()”

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();
    }   
}

});
其中“#input”是要验证的输入的选择器,null是要避免的值,在本例中,没有值,只有空输入。然后,如果所有输入都被填充,它将执行submit()函数,您应该创建该函数来执行他必须执行的任何操作

注意:这种选择器是用于jquery的,所以您必须将其也包括在代码中,并将其放在标题中

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