我正在尝试制作“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";
}
?>
答案 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/