使用触发 javascript 验证的 POST 表单和 AJAX 登录到 PHP 文件。无法将数据存储到 PHP
Posted
技术标签:
【中文标题】使用触发 javascript 验证的 POST 表单和 AJAX 登录到 PHP 文件。无法将数据存储到 PHP【英文标题】:Login with POST Form, which trigger a javascript validation, and AJAX to a PHP file. Trouble storing data to PHP 【发布时间】:2017-02-17 03:05:37 【问题描述】:简介
我现在陷入了 AJAX 的一部分,因为我现在知道如何从 AJAX 部分中提取数据并放入 php 变量中,以便以后可以访问它并使用它。它也不会将我重定向到另一个页面(“Map.php
”)。
我尝试在网上寻找答案,但无济于事。请有经验的人帮忙。另外,我不确定我的做法是否正确,请让我知道我做错了什么。
详细介绍
我想做一个“Login.php”,它将使用一个表单来获取用户的电子邮件和密码。表单上将有一个“登录”按钮,该按钮将触发 javascript 以进行验证。
验证后,我将使用 AJAX 调用另一个名为“Auth.php”的 php 文件,该文件将与 mysql 数据库建立连接,以搜索该特定用户验证用户。
“Auth.php”然后将返回用户详细信息的 json 数据,我打算在“Login.php”页面中使用该数据,并与 $_SESSION[] 开始会话> php 的变量。我还希望页面在成功登录后将用户重定向到另一个页面(“Map.php”)。
以下是我在“Login.php
”和“Auth.php
”中的部分代码。
Login.php
<form name="myForm" action="Map.php" method="post" onsubmit="return validateForm()">
<fieldset>
<div class="form-group">
<input class="form-control" placeholder="E-mail" name="email" type="email" autofocus value="<?php echo isset($_POST["email"])? $_POST["email"]: ""; ?>">
</div>
<div class="form-group">
<input class="form-control" placeholder="Password" name="password" type="password" value="<?php echo isset($_POST["password"])? $_POST["password"]: ""; ?>">
</div>
<input type="submit" value="Login" class="btn btn-lg btn-success btn-block"/>
</fieldset>
</form>
<script>
function validateForm()
//event.preventDefault();
var email = document.forms["myForm"]["email"].value;
var password = document.forms["myForm"]["password"].value;
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.[0-9]1,3])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]2,))$/;
if (email == null || email == "")
alert("Email must be filled.");
return false;
if (password == null || password == "")
alert("Password must be filled.");
return false;
if(re.test(email))
var data =
"email": email,
"password": password
;
data = $(this).serialize() + "&" + $.param(data);
$.ajax(
type: "GET",
dataType: "json",
url: "auth.php",
data: data,
success: function(data)
alert("You have successfully logged in!");
// TODO store user details in session
return true; // return true to form, so will proceed to "Map.php"
);
return false;
else
alert("You have entered an invalid email address!");
return false;
return false;
</script>
Auth.php
$connection = mysqli_connect("localhost", "root", "", "bluesky");
// Test if connection succeeded
if(mysqli_connect_errno())
die("Database connection failed: " . mysqli_connect_error() . " (" . mysqli_connect_errno() . ") " .
"<br>Please retry your last action. Please retry your last action. " .
"<br>If problem persist, please follow strictly to the instruction manual and restart the system.");
$valid=true;
if (isset($_GET['email']) && isset($_GET['password']))
$email = addslashes($_GET['email']);
$password = addslashes($_GET['password']);
else
$valid = false;
$arr=array('success'=>0,'message'=>"No username or password!");
echo json_encode($arr);
if($valid == true)
$query = "SELECT * FROM user WHERE email='$email' and password='$password'";
$result = mysqli_query($connection, $query);
if(mysqli_num_rows($result) == 1)
$row = mysqli_fetch_assoc($result);
$arr=array('success'=>1,'type'=>$row['type'],'user_id'=>$row['id'],'email'=>$row['email'],'name'=>$row['name'],'phone'=>$row['phone'],'notification'=>$row['notification']);
echo json_encode($arr);
else
$arr=array('success'=>0,'message'=>"Login failed");
echo json_encode($arr);
// close the connection that was established with MySQL for the SQL Query
mysqli_close($connection);
【问题讨论】:
为了验证,有几个插件.. 要在任何页面上使用会话,您必须通过session_start()
启动会话。
您可以使用javascript调用“map.php”,成功返回ajax。可以写在成功部分的alert语句之后。
@SonuBamniya 是的,我知道启动会话,但我的主要问题是不知道如何将数据从 ajax 传递到 php。
还要将 AJAX 调用的类型从 GET 更改为 POST,因为您正尝试将电子邮件和密码发送到 auth.php
@AmitJha 这意味着我现在必须使用“发布表单”,所以我只有在 javascript 中验证后才会重定向?
【参考方案1】:
你的 ajax 调用应该是这样的:
data = $(this).serialize() + "&" + $.param(data)
$.post('auth.php', data, function(response)
console.log(response);
);
您必须使用 post 方法,因为您正在获取密码和电子邮件,所以这不是一个好习惯。为了验证,有许多jQuery
插件。
【讨论】:
谢谢。这为我减少了很多代码行。但是,如何访问 php 中的数据?特别是,我想使用代码“json_decode($json);” 这只是 ajax 调用的不同语法,并建议使用post
来保证安全性,虽然是个好主意,但两者都没有尝试回答实际问题以上是关于使用触发 javascript 验证的 POST 表单和 AJAX 登录到 PHP 文件。无法将数据存储到 PHP的主要内容,如果未能解决你的问题,请参考以下文章