检查字段是否为空的PHP代码无效

时间:2015-03-12 22:51:04

标签: php html if-statement

我正在尝试制作“text”类型的“表单”,它将检查电子邮件是否有效。我首先尝试通过创建一个if语句来检查文本字段是否为空,但它没有工作,而是运行语句的“else”选项。如何修复它以便它实际检查文本字段是否为空?这是代码。

的index.php:

<?php
include 'connection.php';
echo  "<p> Example Text </p>";



?>

<h1> Submit email address </h1>

<form action = "create.php" method = "post">
<input type ="text" name = "email" value = "" />
<br />

<input type = "submit" name = "submit" />

</form>

Create.php:

<?php
include 'connection.php';
$email = $_POST['email'];

if(!isset($email)){
echo "please fill out the form";
header ('Location: index.php');
}
else{
echo "Successive login";
}

?>

6 个答案:

答案 0 :(得分:1)

做的时候:

$email = $_POST['email'];

您实际上正在设置$email,因此!isset()将返回false(意味着它不会被设置)

而是你需要检查它是否为空

if(!empty($email)){

}
else{

}

=====

<强> EXTRA 以下是如何检查有效电子邮件地址的示例:

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}

同时查看我的PHP函数,该函数检查电子邮件是否有效,并通过连接到邮件服务器并验证它来接收电子邮件:

https://github.com/hbattat/verifyEmail

  

我做到了。当我删除标题代码时它确实有效,但是我   希望echo在index.php中而不是在新页面中显示   (create.php)。我怎么做? - tomSurge 3小时前

当您提交到create.php时,基本上您会在create.php页面加载一些帖子参数。因此,您在index.php显示的任何内容都不会显示在index.php中,因为您不在同一页面中。

相反,您可以发布到同一页<?php include 'connection.php'; if($_SERVER['REQUEST_METHOD'] == 'post'){ //check if the page was requested via post method (that means the form was submitted) if(!isset($email)){ echo "please fill out the form"; } else{ echo "Successive login"; } } echo "<p> Example Text </p>"; ?> <h1> Submit email address </h1> <form action = "index.php" method = "post"> <input type ="text" name = "email" value = "" /> <br /> <input type = "submit" name = "submit" /> </form> 并在那里执行创建过程:

create.php

您可以使用AJAX,在将信息发布到<?php include 'connection.php'; echo "<p> Example Text </p>"; ?> <!-- include jQuery in the header of your html --> <script src="LINK TO jQUERY .js file"></script> <script type="text/javascript"> $(document).ready(function(){ //trigger this when the form is submitted $('form').on('submit', function(e){ //prevent default submission and reload of the page e.preventDefault(); //post the date to the create.php file using ajax //get the form data var formData = $(this).serialize(); $.post('create.php', fomrData, function(response){ var result = parseJSON(response); $('#msg').text(result.msg); } }); }); }); </script> <h1> Submit email address </h1> <form action = "create.php" method = "post"> <input type ="text" name = "email" value = "" /> <br /> <input type = "submit" name = "submit" /> </form> 时不加载页面,只显示响应消息:

<?php
include 'connection.php';
$email = $_POST['email'];

$result = array();
if(!isset($email)){
  $result['status'] = 'fail';
  $result['msg'] = "please fill out the form";
}
else{
  $result['status'] = 'success';
  $result['msg'] = "Successive login";
}

//echo the json
echo json_encode($result);
?>

create.php

{{1}}

答案 1 :(得分:1)

isset()仅检查变量是否已设置。您需要改为使用empty($email)

答案 2 :(得分:1)

isset替换为empty,它应该可以正常工作。

答案 3 :(得分:1)

如果我理解您的问题,您必须将语句更改为if(!empty($email))此外,如果您要检查电子邮件的格式是否正确,请使用正则表达式执行此操作。 isset()仅检查null

答案 4 :(得分:1)

您还可以在发布的电子邮件字段中测试提交的内容(任何内容):

'' == $_POST['email']

正如其他人所建议的,empty($_POST['email'])也有效,只是显示另一种选择。

显示错误消息

如果您希望错误消息显示在 index.php 上,那么您需要从 create.php 页面传递消息或某种标记(其中发现错误)到 index.php 页面(显示错误消息)。

为了演示一个简单的例子(实现此目的的众多方法之一),首先我在表单中添加了一个PHP变量。请注意电子邮件输入元素后面紧接着包含echo $_GET['error'];的行:

index.php(表格):

<form action="create.php" method="post">
<input type="text" name="email" value="" />
<?php if (isset($_GET['error'])) { echo $_GET['error']; } ?>
<br />

<input type="submit" name="submit" />

</form>

...而且,而不是echo create.php 脚本中的消息,将消息发送到 index.php 脚本在URL查询中:

create.php(电子邮件检查):

if ( '' == $_POST['email'] ) {
  header('Location: index.php?error=please+fill+out+the+form');
}

此外,我建议您使用此(PHP服务器端验证)作为Javascript客户端验证解决方案的备份。为您的网站访问者提供更好的服务,并使用更少的服务器资源。

答案 5 :(得分:0)

另一种方法是在输入中添加required=""这是一个示例https://jsfiddle.net/57s38s2e/