无法使用正确的电子邮件和姓名登录

2024-01-06

我正在使用 AJAX 创建登录表单,我基本上在 PHP 上工作,我对 ajax 没有太多了解,请大家帮助我解决我的疑问,当我在电子邮件 ID 和名称中输入任何值时,它就会被记录进入该页面,假设如果我给出了错误的姓名和电子邮件,那么我不会抛出诸如无效电子邮件之类的错误消息,或者即使使用错误的电子邮件 ID 和名称也无法登录,我对这个 AJAX 完全是新手,请任何人帮忙我解决了这个问题,这真的很有帮助,请

登录.php

        <!DOCTYPE HTML>  
        <html>
            <head>
                <meta charset="utf-8"/>
                <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
                <script src="script.js"></script>
                <style>

                .error {
                    color: red;
                    display: none;
                }

                .div1 {
                    margin-top: -19px;
                    margin-bottom: -25px;
                    margin-left: -19px; 
                }

                .copy {
                    border-radius: 4px;
                    padding: 6px 20px;
                    border-style: ridge;
                }

                #error_message{
                    background: #F3A6A6;
                }

                .ajax_response {
                    padding: 10px 20px;
                    border: 0;
                    display: inline-block;
                    margin-top: 20px;
                    cursor: pointer;
                    display:none;
                    color:#555;
                }

                </style>
            </head>
            <body style="background-image: url(pic.jpg); background-repeat: no-repeat; background-size: cover;">  

                <div style="padding-left: 380px; padding-top:80px" class="div1">

                    <h2 style="color:#009999">Login :</h2>

                    <form action="" method="post" id="logForm" enctype="multipart/form-data">

                        <span style="color:#0099ff">Name: </span>
                        <input type="text" name="name" id="name" class="copy" style="margin-left: 52px"  value ="" />
                        <span class="namee error">Enter name</span>
                        <br/><br/>

                        <span style="color:#0099ff"> E-mail: </span>
                        <input type="text" name="email" id="email" class="copy" style="margin-left: 48px"  value ="" />
                        <span class="emaile error">Enter email</span>
                        <br/><br/>

                        <input type="button" id="submit" class="submit" name="submit" value="Login" /> 
                        <div id="error_message" class="ajax_response" style="float:left"></div>

                    </form>

                </div>

            </body>

            <script>
                $(document).ready(function(){
                    $("#submit").click(function(){
                        var error = false;
                        var form = document.getElementById('logForm');
                        var formData = new FormData(form);

                        // Loop through the form data
                        for(var p of formData){
                            // Check if the form data is empty
                            if(p[1] === ''){
                                // Show the error
                                $('.'+p[0]+'e').show();
                                error = true;
                            }
                        }

                        // Boolean to prevent AJAX from running in case of an error
                        if(error){
                            return false;
                        }

                        // AJAX Code To Submit Form.
                        $.ajax({
                            type: "POST",
                            url: "success.php",
                            data: formData,
                            processData: false,
                            contentType: false,
                            cache: false,
                            success: function(data){

                                if (data) {
                                    window.location = 'pannel.php';
                                    $('#success_message').fadeIn().html(data);
                                    setTimeout(function() {
                                        $('#success_message').fadeOut("slow");
                                    }, 2000 );
                                }

                            }

                        });

                    });

                });
            </script>

        </html> 

成功.php

        <?php
                $mysqli  = mysqli_connect("localhost","root","","ajax1");
                session_start();

                if (isset($_SESSION['id'])){
                    header('location:pannel.php');
                        }

                    $email=$_POST["email"];
                    $name=$_POST["name"];

                    //Checking is user existing in the database or not
                    $query = "SELECT * FROM `users` WHERE name='$name' and email='$email'";
                    $result = mysqli_query($mysqli,$query);
                    $row1 = mysqli_fetch_array($result);
                    $rows = mysqli_num_rows($result);

                    if($rows==1){
                        $_SESSION['name'] = $name;
                        $_SESSION['id']=$row1['userid'];
                        // Redirect user to index.php
                        header("Location: pannel.php");
                        }
                         else{
                             $error = " Invalid Name or E-MAIL ";
                            }
            ?>

面板.php

        <!DOCTYPE html>
        <html lang="en">
                <head>

                    <title>Bootstrap Example</title>
                    <meta charset="utf-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1">
                    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
                    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
                    <style>

                            #success_message{
                                background: #CCF5CC;
                            }

                        .ajax_response {
                            padding: 10px 20px;
                            border: 0;
                            display: inline-block;
                            margin-top: 20px;
                            cursor: pointer;
                            display:none;
                            color:#555;
                        }
                    </style>

                </head>
            <body>

                <div id="success_message" class="ajax_response" style="float:left"></div>

                <div class="container">
                    <br><br><br><br>
                    <?php

                        $mysqli  = mysqli_connect("localhost","root","","ajax1");
                        $query=mysqli_query($mysqli,"select * from `users` where userid='".$_SESSION['id']."'");
                        $row=mysqli_fetch_array($query);
                        echo 'Welcome - '.$row['name'];

                    ?>

                    <br>
                    <a href="logout.php">Logout</a>
                    <br><br>



                </div>

            </body>
        </html>                 

有几点需要考虑:

1.) 您没有使用参数化 SQL 查询,因此您的数据库对 SQL 注入开放。我更改了您的查询结构以演示如何使用参数化查询。请停止这样做。这是有关此主题的链接。阅读它、添加书签并参考它,直到您理解为止。这很重要,而且只要你做了几次,就不难了。

https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection

2.) 当你使用ajax时,就会发生这样的情况。您的主 html 页面正在向另一个页面发送 ajax 查询。该页面接收响应,执行任何代码,然后将答案发送回发送请求的主 html 页面的 ajax 函数。

该响应是在 ajax 函数的成功块中收到的。我认为来回传递数据的最简单方法是使用 JSON 格式。

3.) php 中回显的任何内容都将发送到 ajax 函数。

4.)我的示例中的数据是 json 字符串而不是 json 对象,因此您必须将字符串转换为 json 对象。

5.)构建新代码时,请分小块进行,直到您正在处理的任何内容按照您期望的方式工作为止。然后修饰工作代码以完成您想要的操作。这将为您节省故障排除的时间,并帮助您在花费数小时对您认为将要发生的事情进行编码之前找出代码的最佳工作流程。

6.) 您可以使用姓名和电子邮件来验证登录,但姓名很常见,人们可以共享电子邮件。我会做一些类似电子邮件/用户名和密码的事情。对于密码,请使用 php 的本机密码函数。

http://php.net/manual/en/faq.passwords.php http://php.net/manual/en/faq.passwords.php

因此,这里有一个示例,应该可以帮助您走上正确的道路。

在你的login.php上将你的ajax函数更改为:

$.ajax({
  type: "POST",
  url: "success.php",
  data: formData,
  processData: false,
  contentType: false,
  cache: false,
  dataType: 'application/json; charset=utf-8',
  success: function(response){
    console.log('Ajax tried.');
    console.log(response);
    var data = JSON.parse(response); //Change from string to object.
    console.log(data);
    if (data['success']) {
        console.log('It worked!!!!');
        //The user's name and email returned a 
        //result from the user's table. 

    } else{
      console.log('You have an error.');
      console.log(data['errors']);
      //Here are your errors.  Do something with them.
    }

  }

});

将您的 success.php 更改为:

<?php

session_start(); //Always do first.

$mysqli  = mysqli_connect("localhost","root","","ajax1");

if (isset($_SESSION['id'])){ //<--This should not be here.  This should
//be tested for on the login.php page.
$errors['logged_in'] = TRUE;  

}

//Checking is user existing in the database or not
$query = "SELECT * FROM `users` WHERE name=? and email=?";  //<--Use placeholders.

//Remember this:  Prepare, bind, Execute.



$stmt = $mysqli->prepare($query); //Prepare
$stmt->bind_param("ss", $_POST['name'], $_POST['email']); //Bind
$stmt->execute(); //Execute.
$result = $stmt->get_result()->fetch_assoc();

if($result){

  $_SESSION['name'] = $result['name']; //Safer to use data from db instead of post.
  $_SESSION['id']   = $result['userid'];

}else{

  $errors['user_exists'] = FALSE;

  }

$stmt->close(); //Important to free up resources for your next query.

$response = array();

if(isset($errors) && $errors){

  $response['success'] = FALSE;
  $response['errors'] = $errors;

} else{

  $response['success'] = TRUE;


  }

echo json_encode($response); //<-- This is what gets sent back to ajax function.

?>

希望这可以帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用正确的电子邮件和姓名登录 的相关文章

  • PHP正则表达式替换链接url

    我需要添加href 之前http 如果这http 不遵循href or src 以下代码部分有效 部分意味着它考虑 a href 只但不src a s i a href target blank gt 0 a str 预先感谢各位的回复 s
  • 带摘要的 php curl 返回两个响应

    我发现了一个 奇怪 的 php CURL 行为 这让我抓狂 基本上我正在做的是使用curl 进行摘要身份验证的调用 这是我的代码的摘录 curl setopt this gt c CURLOPT HTTPAUTH CURLAUTH DIGE
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • 在动态创建的元素的onclick函数的属性中传递一个字符串

    我试图在动态创建的锚元素的 onClick 事件处理函数的参数中传递一个字符串 请参阅小提琴http jsfiddle net shmdhussain bXYe4 http jsfiddle net shmdhussain bXYe4 我无
  • 在 PhoneGap 应用程序中打开用 HTML 和 CSS 制作的 PDF

    我的 iPad 应用程序在 Phone Gap 中遇到一个奇怪的问题 问题是我必须通过链接在我的应用程序中打开 PDF 文档 当我单击打开 PDF 的链接时 它会向我显示没有反向链接的 PDF 文档 因此 当我通过链接在应用程序中打开 PD
  • 如何验证上传的文件是视频?

    我的服务器上有一些非常敏感的信息 因此安全性是一个大问题 用户需要能够上传视频 我知道允许用户上传文件会带来安全威胁 因为没有 100 的方法可以阻止他们上传非视频 但我显然可以选择服务器将保留哪些文件 我知道检查文件扩展名是不够的 检查
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • PHP 搜索部分字符串

    如何在键入时搜索部分字符串 不使用 MySQL 例如 MySQL 中的 LIKE 函数 但在搜索字符串时使用 PHP 例如 但这显然行不通 但是有没有一个函数可以搜索部分字符串 那太好了 EDIT 如果它在数组中怎么办 如果我使用 strp
  • PHP 何时实现了函数使用闭包? [复制]

    这个问题在这里已经有答案了 我在 PHP 手册中找不到解释的部分use 我有代码 num 0 array walk recursive REQUEST function mValue use num num 我的 Eclipse 抱怨 Pa
  • iPhone 上的锁定方向 UIWebView

    有没有办法锁定 UIWebView 的方向 使用 Obj C JS 还是 Html 我不想有按钮或任何东西 我只想在应用程序打开时将其锁定为纵向 好像这个堆栈溢出帖子 https stackoverflow com questions 43
  • 无法从 JQuery ajax 调用接收 JSON

    我已经确定来自服务器的 JSON 是有效的 手动进行 ajax 调用 但我真的很想使用 JQuery 我还使用 firebug 确定发送到服务器的 post URL 是正确的 但是 错误回调仍然被触发 解析错误 我还尝试了数据类型 文本 我
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • 将默认搜索文本添加到搜索框 html

    我正在努力将 搜索 文本添加到搜索框 我正在努力实现 onfocus 消失文本 And onblur 重新出现文本 到目前为止 我已经实现了这一点 但我必须将其硬编码为 html eg
  • Laravel 5 Eloquent 在多个级别上将关系附加到 JSON

    因此 在模型中包含关系非常容易 例如 class User extends Model protected with roles class Role extends Model protected with permissions 当有对
  • 使用 yaml 路由描述时如何在运行时获取 Symfony2 中的路由名称?

    在这里你可以找到我的n关于 Symfony2 的第一个问题 我正在与一个分页捆绑 https github com makerlabs PagerBundle wiki使用中提供的路由名称routing yml文件 从我的角度来看 这种方法
  • 在什么情况下,使用 HTTP/2 单独加载图像会比使用 HTTP/1.1 中的精灵一次加载所有图像慢?

    HTTP 2 使多路复用连接成为可能 从而消除了与服务器的多个连接的需要 通过单个连接 可以将许多单独的图像发送到客户端 这避免了将多个图像组合成一个并使用 CSS 将其分开的旧图像精灵模式 我很好奇精灵在 HTTP 2 世界中是否仍然会更
  • Yii2 无效调用:设置只读属性

    我有一个Post具有多对多关系的模型Tags 在 Post 模型中定义 public function getTags return this gt hasMany Tags className id gt tag id gt viaTab
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • SimpleXML 返回空数组

    我正在尝试使用 Google Maps API 和 PHP SimpleXML 获取城市的纬度和经度 我尝试这样做 xml simplexml load file http maps googleapis com maps api geoc
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐

  • 具有动态值的 Angular index.html |网络工作者

    直到最近 我们还使用express js 来为Angular 提供index html 因为我们需要在应用程序启动之前从数据库填充动态变量 然而 新的Angular 7通过web worker缓存源index html 因此 当我加载网页时
  • 角度5根据另一个字段的值有条件地验证字段

    如何根据另一个字段的值有条件地验证一个字段 这是我尝试过的 但似乎不起作用 this PDform formbuilder group intlNumber this nationality Abroad Validators compos
  • 将 merge 转换为 rebase,无需再次执行 merge

    我犯了一个错误 我应该使用git pull rebase 但我发布了一个简单的git pull 合并了所有内容 现在在我的分支的头部有一个合并提交 我想摆脱那个合并提交 我想我只需发出一个git rebase i HEAD 3 将我的最后一
  • JQuery中动态元素的绑定点击事件

    我有一个 div 在通过 html 属性调用 AJAX 调用后动态填充 gallery html imagesHtml insdie imagesHtml 我有 2 个名为 pre btn 和 btn 的按钮 现在我尝试在 JQuery 中
  • VB中如何从long指定的地址获取字符串

    在vba中 有一个由long类型保存的地址 它指向一个以空结尾的字符串 但我找不到从该地址获取字符串的方法 long str address string str 您能解释一下吗 I use CopyMemory这边走 Private De
  • 为什么我的基本默认 .acceptbutton 不起作用?

    我拥有的 我有两个组框 每个组框内都有一个文本框 第三个文本框放置在两个组框的外部 按钮 1 是表单加载时的默认接受按钮 我需要的 当单击按钮 1 或按下 Enter 键 时 我需要按钮 2 成为默认接受按钮 我的问题 尽管我的代码如此 但
  • 通过 HTTP 跟踪 Web 服务器上的文本文件

    寻找有关如何解决以下问题的意见 我的 ColdFusion 9 应用程序有一个简单的记录器 可以将文本写入文件 在我的开发机器上 该文件是本地的 因此我可以使用 tail f 或 CFB 的 TailView 来观看它 我想要一个工具来在它
  • 调用函数:张量“对象”不可调用

    假设我有一个名为test如下 def test X W do stuff return stuff 我称之为使用model test X W 当我第一次调用该函数时 没有收到错误 但是 如果我再次调用该函数 则会收到错误 Tensor ob
  • 如何使用 boost::random_device 生成加密安全的 64 位整数?

    我想做这样的事情 boost random device rd boost random mt19937 64 gen rd boost random uniform int distribution
  • 使用静态数据集作为数据源

    在我的应用程序中 我有一个数据集 其中包含在我的应用程序中以不同形式使用的表 为了能够保持表单之间的并发性 并且不必每次用户打开新表单时都从数据库获取数据 我将 DataSet 作为程序类中的静态字段 如下所示 static class P
  • 在 Haskell 中创建一个列表来计算帕斯卡三角形

    我正在尝试创建一个接受整数的函数m并返回帕斯卡三角形的行数mth row 我已经构建了一个choose函数 它接受两个整数 n 和 k 并返回值 n 选择 k 例如 choose 3 2返回 3 到目前为止 我已经 pascal 0 1 p
  • 为什么饱和度和色调的最大值分别为 240 和 239?

    在 ColorDialog 中 为什么饱和度和色调的最大值分别为 240 和 239 它们对应什么 在 Windows 中 HSL 和 HSV 空间通常会重新映射到 0 到 240 之间的比例 以便可以用 32 位值表示颜色 See htt
  • 在 SVG 中缓和 animateMotion

    我想对 animateMotion 标签应用缓动 我对哪些属性与动画形状相关感到困惑 如果我理解得很好的话计算模式 样条线 是必需的 同时还需要定义keyTimes and 关键样条线 但是使用怎么样关键样条线 and values 但是
  • 如何在php中获取准确的IST时间?

    在 php 中 我使用了日期函数 例如 date Y m d h m s 它不会显示当前时间请帮助我 你想要印度时间 这是我的解决方案 您可以使用Asia Calcutta or Asia Kolkata 两者将同时返回 date defa
  • Visual Studio Code 高级搜索要包含的文件中的通配符

    我正在尝试为具有特定文件名条件的所有文件找到一行代码 我正在尝试利用高级搜索Visual Studio Code 的方法是将wildcard in the 要包含的文件搜索领域 但我没能做到这一点 我尝试使用asterisk 符号 但我认为
  • 更好的 ruby​​ markdown 解释器?

    我正在尝试找到一个可以在 rakefile 中使用的 markdown 解释器类 模块 到目前为止我已经找到了maruku http maruku rubyforge org 但我对测试版有点警惕 有人遇到过 maruku 的问题吗 或者
  • 使用 Graph API 时出现“租户 guid 的租户不存在” - 用户类型为会员的事件

    我正在尝试使用 Microsoft Graph API 访问电子邮件 当我尝试访问电子邮件时 出现以下错误 Microsoft Graph ServiceException 代码 OrganizationFromTenantGuidNotF
  • 如何确定处理器运行的字节序模式?

    如何仅使用汇编语言确定 ARM 处理器运行的字节序模式 我可以很容易地看到 Thumb ARM 状态读取 CPSR 的第 5 位 但我不知道 CPSR 或其他地方是否有对应的位用于字节序 silly example trying to ex
  • 设置 Actionbarsherlock 选项卡的样式

    因此 我尝试设置 Actionbar 选项卡的样式 这是我使用 ActionBarSherlock 库实现的 这是我的代码
  • 无法使用正确的电子邮件和姓名登录

    我正在使用 AJAX 创建登录表单 我基本上在 PHP 上工作 我对 ajax 没有太多了解 请大家帮助我解决我的疑问 当我在电子邮件 ID 和名称中输入任何值时 它就会被记录进入该页面 假设如果我给出了错误的姓名和电子邮件 那么我不会抛出