PHP If语句未在空白字符串上重定向

PHP If语句未在空白字符串上重定向,php,Php,我有一些将值输入数据库的代码。我在开头有一个IF语句来检查字符串$jobno是否为空,如果为空,它将重定向回表单。但它不是重定向,只是成功地运行代码 if ($jobno=='') { header( 'Location: add_job.php?error=1'); } 我做错了什么 <?php $status=$_POST["status"]; $jobno=$_POST["jobno"]; $number=$_POST["number"]; $street

我有一些将值输入数据库的代码。我在开头有一个IF语句来检查字符串$jobno是否为空,如果为空,它将重定向回表单。但它不是重定向,只是成功地运行代码

if ($jobno=='') {
        header( 'Location: add_job.php?error=1');
    }
我做错了什么

 <?php
$status=$_POST["status"];
$jobno=$_POST["jobno"];
$number=$_POST["number"];
$street=$_POST["street"];
$suburb=$_POST["suburb"];
$city=$_POST["city"];
$first_name=$_POST["first_name"];
$first_name = ucfirst($first_name);
$last_name=$_POST["last_name"];
$last_name = ucfirst($last_name);
$landline=$_POST["landline"];
$mobile=$_POST["mobile"];
$fax=$_POST["fax"];
$email=$_POST["email"];

if ($jobno=='') {
    header( 'Location: add_job.php?error=1');
}

$con=mysqli_connect("server","user","pass","database");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to database: " . mysqli_connect_error();
}

mysqli_query($con,"INSERT INTO jobs (status, jobno, number, street, suburb, city, first_name, last_name, landline, mobile, fax, email)
VALUES ('$status', '$jobno', '$number', '$street', '$suburb', '$city', '$first_name', '$last_name', '$landline', '$mobile', '$fax', '$email')");

mysqli_close($con);

header( 'Location: photo_upload.php?new_job_success=y&jobno=' . $jobno ) ;

?>
我想你必须使用isset函数。 尝试使用以下代码:

if (!isset($_POST["jobno"])) {
    header( 'Location: add_job.php?error=1');
}
可能是两件事

$jobno不是 由于您在重定向后没有返回,并且稍后又进行了第二次重定向,因此您的标题看起来像: 位置:add_job.php?错误=1 位置:photo\u upload.php?new\u job\u success=y&jobno= 在代码中添加else子句:

<?php
...
if ($jobno=='') {
    header( 'Location: add_job.php?error=1');
}
else {
  $con=mysqli_connect("server","user","pass","database");
  // Check connection
  if (mysqli_connect_errno()) {
    echo "Failed to connect to database: " . mysqli_connect_error();
  }
  else
  {
    mysqli_query($con,"INSERT INTO jobs (status, jobno, number, street, suburb, city,first_name, last_name, landline, mobile, fax, email) VALUES ('$status', '$jobno', '$number', '$street', '$suburb', '$city', '$first_name', '$last_name', '$landline', '$mobile', '$fax', '$email')");

    mysqli_close($con);

    header( 'Location: photo_upload.php?new_job_success=y&jobno=' . $jobno ) ;
  }
}

?>
导致标头已发送错误


您也非常开放,请求一个

在起始位置有一个空格,这是导致此错误的原因。在发送标题之前,不能回显任何输出,甚至不能发送一个空格。此小空间导致标头已发送错误。您应该删除php文件开头的空间。您的代码应该如下所示

<?php
$status=$_POST["status"];

我希望这能帮助你

如果你真的放弃$jobno;它说什么?那么它应该不是空字符串。相反,请执行严格的类型比较===我希望这不是您的生产脚本!!由于严重缺乏消毒是可怕的。你也可以检查ifempty$jobNow你说的var_dump$jobno是什么意思;多西克。很抱歉,一个新手没有什么区别,如果它没有设置,那么PHP会抛出一个警告,并将变量设置为null,并且==null为true。它仍然可以正常运行!绝对建议如果…否则。。。我非常确定,即使定义了头,脚本也会运行,因为头不会杀死脚本+1@RaggaMuffin-420我知道这确实是个问题:-但让他们先正确地检查一个值,这永远不会有帮助。调试是如此有用的技能!你改剧本了吗?正如我在if$jobno=={…}else{…}上使用else一样,这是使用else的一个好方法。谢谢,我试试看!如果这将是一个持续的问题,有没有其他方法可以在不使用标题的情况下重定向?对不起,这个空间在代码之外是什么意思?我对基本PHP感到困惑:任何不在代码块内的东西都只是输出。任何输出都会触发将响应头自动发送到客户端。Your Location:就是这样一个头,在输出开始后无法发送,因为它只是响应主体的一部分。所以我需要将头:Location放入标记?否。php头调用与块无关。header发送一个HTTP头。您应该阅读HTTP协议的请求/响应格式。好的。谢谢,谢谢,我也要试试!
header( 'Location: add_job.php?error=1');
<?php
$status=$_POST["status"];