使用jquery、ajax和php登录
我正在为学校做一个项目,我在登录时遇到了一些问题,我知道如何用不同的方式来做,但我想学习如何用这种方式来做 我真的不知道它为什么不工作(某些部分可能没有任何逻辑,这就是它不工作的原因),它总是在警报中显示错误消息“无效凭据” 这是我的密码:使用jquery、ajax和php登录,php,jquery,ajax,Php,Jquery,Ajax,我正在为学校做一个项目,我在登录时遇到了一些问题,我知道如何用不同的方式来做,但我想学习如何用这种方式来做 我真的不知道它为什么不工作(某些部分可能没有任何逻辑,这就是它不工作的原因),它总是在警报中显示错误消息“无效凭据” 这是我的密码: <html> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#loginform').submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: 'loginFinal.php',
data: $(this).serialize(),
success: function(data) {
if (data === 'CORRECTO') {
window.location = 'index.php';
}
else {
alert('Invalid credentials');
}
}
});
});
});
</script>
</head>
<body>
<form id="loginform" method="post">
Username: <input type="text" name="username" id="username" value="">
Password: <input type="password" name="password" id="password" value="">
<input type="submit" name="loginsub" id="loginsub" value="Login">
</form>
</body>
</html>
我有使用php和ajax登录的代码,希望能理解我的示例。 在php脚本中,您有 示例:echo'correcto',何时是echo json_编码(数组('error'=>true,'mensaje'=>“usuario o password incorrectos”) 给你:
echo json_encode(array(message => 'CORRECTO'));
你编写了js脚本
success: function(data) {
if (data.message == 'CORRECTO') {
window.location = 'index.php';
}else{
// other code
}
}
仅在脚本上创建php,不使用类名。。只有php。当您拥有exist方法登录名时,将创建一个实例来初始化。。
在您的方法中,登录传递参数
$user = $_POST['username'];
$pass = $_POST['password'];
<?php
include_once "conexion.php";
$user = $_POST['username'];
$pass = $_POST['password'];
if($_POST){
$class = new Class();
if( $class->login($user,$pass))
echo json_encode(array(message => 'CORRECTO'));
else
echo json_encode(array(message => 'ERROR'));
}
?>
// en your class when function
function Login($user,$pass) {
$success = false;
try {
$con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
$sql = "SELECT * FROM users WHERE username = ".$user." AND password = ".$pass." LIMIT 1";
$stmt = $con->prepare( $sql );
$stmt->execute();
$valid = $stmt->fetchColumn();
if( $valid ) {
$success = true;
session_start();
session_regenerate_id();
$_SESSION['user'] = $_POST['username'];
session_write_close();
$success = true;
exit();
}
$con = null;
return $success;
}
catch (PDOException $e) {
echo $e->getMessage();
return false;
}
}
$user=$\u POST['username'];
$pass=$_POST['password'];
//当你上课的时候
函数登录($user,$pass){
$success=false;
试一试{
$con=newpdo('mysql:host=localhost;dbname=MY_DB_NAME','MY_USRNAME','MY_PSW');
$sql=“从username=“.$user.”和password=“.$pass.”限制1”的用户中选择*;
$stmt=$con->prepare($sql);
$stmt->execute();
$valid=$stmt->fetchColumn();
如果($有效){
$success=true;
会话_start();
会话_重新生成_id();
$\会话['user']=$\发布['username'];
会话写入关闭();
$success=true;
退出();
}
$con=null;
返回$success;
}
捕获(PDO$e){
echo$e->getMessage();
返回false;
}
}
我希望能帮助您您是否可以执行var\u dump($\u请求)以查看您向服务器发送了什么
(我认为当您单击提交按钮时,页面会刷新?)
更新:
function Login() {
$success = false;
try {
$con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $con->prepare( $sql );
$stmt->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));
$valid = $stmt->fetchColumn();
if( $valid ) {
$success = true;
session_start();
session_regenerate_id();
$_SESSION['user'] = $_POST['username'];
session_write_close();
echo ('CORRECTO');
exit();
}
$con = null;
return $success;
}
catch (PDOException $e) {
echo $e->getMessage();
return $success;
}
}
Login();
1-更改“提交到”按钮:
<input type="button" name="loginsub" id="loginsub" value="Login">
使下面的代码使用准备好的语句。你的ajax看起来不错。下面的函数不是 更新代码:
function Login() {
$success = false;
try {
$con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $con->prepare( $sql );
$stmt->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));
$valid = $stmt->fetchColumn();
if( $valid ) {
$success = true;
session_start();
session_regenerate_id();
$_SESSION['user'] = $_POST['username'];
session_write_close();
echo ('CORRECTO');
exit();
}
$con = null;
return $success;
}
catch (PDOException $e) {
echo $e->getMessage();
return $success;
}
}
Login();
^并且必须执行函数才能发送响应。您的脚本非常开放,甚至可以在
MYSQLI\uquot/code>或PDO
API'中使用。您在哪里调用函数Login(),我不知道怎么做,或者整个文件loginFinal.php在哪里?请不要存储明文密码:(感谢您的回答,但您的更改始终会得到无效的凭据。我现在有以下内容:type:“POST”,url:'loginFinal.php',dataType:'json',data:$(this.serialize(),success:function(data){if(data.message='CORRECTO'){window.location='index.php';}else{alert}(“not correct”);}}}现在不能按“Login”按钮how call you method Login()?where and how??在php文件的顶部,只需输入以下代码即可查看ajax发送到php文件的内容:var_dump($_REQUEST);exit;在控制台中(使用inspect元素>控制台),您将看到Callye i始终打开控制台,但我没有收到响应。将粘贴的ur代码复制到php文件顶部,但复制到“你是否在控制台中看到ajax调用?仍然总是获得无效凭据,我认为问题在于我从未进入function登录,因为我在函数的第一行中放置了一个警报,但它从未出现,我是否应该在某个地方调用它?因为如果我删除“function Login(){”行和带括号的结束符,我会得到一个警告“http 500错误,服务器内部错误”是的。您需要在某个地方调用Login()
函数才能使代码按要求工作。请确保只有Login()
函数输出某些内容。PHP代码:另一个代码:已工作!谢谢!删除de”函数Login()也可以工作{“线路和收尾支架坏了,不知道为什么昨天不工作,因为我已经试过了。谢谢你的帮助!
function Login() {
$success = false;
try {
$con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $con->prepare( $sql );
$stmt->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));
$valid = $stmt->fetchColumn();
if( $valid ) {
$success = true;
session_start();
session_regenerate_id();
$_SESSION['user'] = $_POST['username'];
session_write_close();
echo ('CORRECTO');
exit();
}
$con = null;
return $success;
}
catch (PDOException $e) {
echo $e->getMessage();
return $success;
}
}
Login();