PHP脚本没有正确找到MySQL表行

时间:2015-10-24 21:55:00

标签: php mysql

我有一个PHP脚本应该检查我的数据库,其中存在输入的用户电子邮件。我已经设置了所有内容,以便在提交表单时脚本运行,但我认为我的表单设置方式一定有问题。它似乎没有认识到存在一行。我已经提供了一个我知道存在事实的电子邮件地址;然而,它似乎没有找到它。

app.js

$(document).ready(function() {
    $("submit").click(function() {
        alert("This was a test.");
        $.ajax({
            type: "POST",
            url: "main_login.php",
            success: function(data) {
                alert(data);
                $(".message").text(data);
            }
        });
    });
});

main_login.php

<?php
    $conn = new mysqli('localhost', 'user', 'pass!', 'db');
    mysqli_set_charset($conn, 'utf8mb4');
    $check = "SELECT * FROM users WHERE email = '$_POST[email]'";
    $results = mysqli_query($conn, $check);
    $data = mysqli_fetch_array($results, MYSQLI_NUM);
    if($data == 1) {
        echo "Login successful";
    } else {
        echo "This account does not exist";
    }

    $conn->close();
?>

的login.php

<div class="container login">
    <div class="panel panel-default login-panel">
        <div class="panel-heading">span class="log-h1">Sign-in</span>
        </div>
        <div class="panel-body">
            <form name="loginform" action="login.php" method="post">
            <div class="form-group">
                <label for="username">Email</label>
                <input type="email" class="form-control"
                 name="email" id="email" placeholder="Email address">
            </div>
            <div class="form-group" style="float: right;">
                <input type="submit" class="btn btn-primary" name="Submit" 
                 value="Sign-in">
            </div>
            </form>
            <span class='message'></span>
        </div>
    </div>
</div>

同样,除了验证我提供的电子邮件地址之外,一切都有效。无论我做什么,我都不认为这样做。

3 个答案:

答案 0 :(得分:1)

尝试更改此

$check = "SELECT * FROM users WHERE email = '$_POST[email]'";

$check = "SELECT * FROM users WHERE email = '" . $_POST['email'] . "'";

你也想改变if - fetch_row返回null或数组(http://php.net/manual/en/mysqli-result.fetch-array.php) 所以你要做的是if($data)而不是if($data == 1),因为它永远不会返回1.

答案 1 :(得分:1)

修改您的app.js

$(document).ready(function() {
    $("submit").click(function() {
        alert("This was a test.");
        var email = $("#email").val(); // This line...
        $.ajax({
            type: "POST",
            url: "main_login.php",
            data: {email : email}, // This line..
            success: function(data) {
                alert(data);
                $(".message").text(data);
            }
        });
    });
});

修改你的php:

<?php
    $conn = new mysqli('localhost', 'user', 'pass!', 'db');
    mysqli_set_charset($conn, 'utf8mb4');
    $check = "SELECT * FROM users WHERE email = '". $_POST['email'] ."'";
    $results = mysqli_query($conn, $check);
    $data = mysqli_fetch_array($results, MYSQLI_NUM);
    if($data == 1) {
        echo "Login successful";
    } else {
        echo "This account does not exist";
    }

    $conn->close();
?>

答案 2 :(得分:0)

您需要改变一些事项。您可以查看herehere

主要问题在于你的app.js

/* attach a submit handler to the form */
$("#formID").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get some values from elements on the page: */
  var $form = $( this ),
      url = $form.attr( 'action' );

  /* Send the data using post */
  var posting = $.post( url, { name: $('#emailID').val() } );

  /* Alerts the results */
  posting.done(function( data ) {
    alert('success');
  });
});

这是一种更好的方法,其中formID是表单的ID,而emailID是您必须在html中输入的电子邮件输入的ID。

但更简单的方法是不使用表单,而是使用带有id的简单按钮和输入字段然后使用

$("#buttonID").click(function() {
    var postData = $('#emailID').val();
    $.ajax({
        type: "POST",
        data : {'pd' : postData},
        url: "main_login.php",
        success: function(data) {
            alert(data);
            $(".message").text(data);
        }
    });

此处emailID是电子邮件输入字段的ID,如果是按钮的ID,则为buttonID。另外,请在您的html中包含jquery脚本。检查php文件中的$ _POST ['pd']。

你的html可以像

一样简单
<input type="email" id="emailID"/>
<button id="buttonID">Click</button>

请注意,您的代码存在各种安全问题。

  

修改

main_login.php

<?php
   $conn = new mysqli('localhost', 'user', 'pass!', 'db');
   mysqli_set_charset($conn, 'utf8mb4');
   if(isset($_POST['pd'] && !empty($_POST['pd'])) {
          $check = "SELECT * FROM users WHERE email =" . $_POST[email];
          $results = mysqli_query($conn, $check);
          $data = mysqli_fetch_array($results, MYSQLI_NUM);
          $conn->close();
          if($data == 1) {
              echo "Login successful";
          } else {
              echo "This account does not exist";
          }
    }
    else { echo 'postdata not received'; }      
 ?>

请注意,我在发送AJAX resopnse之前已关闭数据库连接。尝试在使用AJAX时将响应保持为代码的最后一行,因为如果我在AJAX响应之后保留其他代码,我在不同情况下遇到了很多问题。但是,如果事情对你来说正常,你也可以忽略这一点。还要发布运行代码时遇到的错误。