Php 即使没有散列也不读取数据库

Php 即使没有散列也不读取数据库,php,javascript,mysql,Php,Javascript,Mysql,我试图弄明白为什么这个脚本运行到“登录失败”并退出。技术上我知道原因(没有比赛,但有比赛)。起初我认为可能是密码散列的问题,但我删除了它来测试密码。我尝试在数据库中手动放置密码和用户名以获得匹配。是否有其他原因导致此功能无法工作?这些是我正在运行的脚本 Signin.php <?php include_once("includes/check_login_status.php"); // If user is already logged in, header that

我试图弄明白为什么这个脚本运行到“登录失败”并退出。技术上我知道原因(没有比赛,但有比赛)。起初我认为可能是密码散列的问题,但我删除了它来测试密码。我尝试在数据库中手动放置密码和用户名以获得匹配。是否有其他原因导致此功能无法工作?这些是我正在运行的脚本

Signin.php

<?php
include_once("includes/check_login_status.php");
// If user is already logged in, header that weenis away
if($user_ok == true){
header("location: user.php?u=".$_SESSION["username"]);
    exit();
}
?><?php
// AJAX CALLS THIS LOGIN CODE TO EXECUTE
if(isset($_POST["e"])){
// CONNECT TO THE DATABASE
include_once("includes/db_conx.php");
// GATHER THE POSTED DATA INTO LOCAL VARIABLES AND SANITIZE
$e = mysqli_real_escape_string($db_conx, $_POST['e']);
$p = mysqli_real_escape_string($db_conx, $_POST['p']);
// GET USER IP ADDRESS
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR'));
// FORM DATA ERROR HANDLING
if($e == "" || $p == ""){
echo "login_failed";
        exit();
} else {
// END FORM DATA ERROR HANDLING
$sql = "SELECT id, username, password FROM transactions WHERE email='$e' AND activated='1' LIMIT 1";
        $query = mysqli_query($db_conx, $sql);
        $row = mysqli_fetch_row($query);
$db_id = $row[0];
$db_username = $row[1];
        $db_pass_str = $row[2];
if($p != $db_pass_str){
echo "login_faileda";
            exit();
} else {
// CREATE THEIR SESSIONS AND COOKIES
$_SESSION['userid'] = $db_id;
$_SESSION['username'] = $db_username;
$_SESSION['password'] = $db_pass_str;
setcookie("id", $db_id, strtotime( '+30 days' ), "/", "", "", TRUE);
setcookie("user", $db_username, strtotime( '+30 days' ), "/", "", "", TRUE);
    setcookie("pass", $db_pass_str, strtotime( '+30 days' ), "/", "", "", TRUE); 
// UPDATE THEIR "IP" AND "LASTLOGIN" FIELDS
$sql = "UPDATE transactions SET ip='$ip', lastlogin=now() WHERE username='$db_username' LIMIT 1";
            $query = mysqli_query($db_conx, $sql);
echo $db_username;
   exit();
}
}
exit();
}
?>
<?php include_once("./includes/site-opener.php");?>
<title>Sign In</title>
<script src="js/main.js"></script>
<script src="js/ajax.js"></script>
<script>
function emptyElement(x){
_(x).innerHTML = "";
}
function login(){
var e = _("email").value;
var p = _("password").value;
if(e == "" || p == ""){
_("status").innerHTML = "Fill out all of the form data";
} else {
_("loginbtn").style.display = "none";
_("status").innerHTML = 'please wait ...';
var ajax = ajaxObj("POST", "signin.php");
        ajax.onreadystatechange = function() {
       if(ajaxReturn(ajax) == true) {
           if(ajax.responseText == "login_failed"){
_("status").innerHTML = "Login unsuccessful, please try again.";
_("loginbtn").style.display = "block";
} 
           if(ajax.responseText == "login_faileda"){
_("status").innerHTML = "Next One";
_("loginbtn").style.display = "block";
} 
else {
window.location = "user.php?u="+ajax.responseText;
}
       }
        }
        ajax.send("e="+e+"&p="+p);
}
}
</script>
<?php
session_start();
include_once("db_conx.php");
// Files that inculde this file at the very top would NOT require 
// connection to database or session_start(), be careful.
// Initialize some vars
$user_ok = false;
$log_id = "";
$log_username = "";
$log_password = "";
// User Verify function
function evalLoggedUser($conx,$id,$u,$p){
$sql = "SELECT ip FROM users WHERE id='$id' AND username='$u' AND password='$p' AND activated='1' LIMIT 1";
    $query = mysqli_query($conx, $sql);
    $numrows = mysqli_num_rows($query);
if($numrows > 0){
return true;
}
}
if(isset($_SESSION["userid"]) && isset($_SESSION["username"]) && isset($_SESSION["password"])) {
$log_id = preg_replace('#[^0-9]#', '', $_SESSION['userid']);
$log_username = preg_replace('#[^a-z0-9]#i', '', $_SESSION['username']);
$log_password = preg_replace('#[^a-z0-9]#i', '', $_SESSION['password']);
// Verify the user
$user_ok = evalLoggedUser($db_conx,$log_id,$log_username,$log_password);
} else if(isset($_COOKIE["id"]) && isset($_COOKIE["user"]) && isset($_COOKIE["pass"])){
$_SESSION['userid'] = preg_replace('#[^0-9]#', '', $_COOKIE['id']);
    $_SESSION['username'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['user']);
    $_SESSION['password'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['pass']);
$log_id = $_SESSION['userid'];
$log_username = $_SESSION['username'];
$log_password = $_SESSION['password'];
// Verify the user
$user_ok = evalLoggedUser($db_conx,$log_id,$log_username,$log_password);
if($user_ok == true){
// Update their lastlogin datetime field
$sql = "UPDATE users SET lastlogin=now() WHERE id='$log_id' LIMIT 1";
        $query = mysqli_query($db_conx, $sql);
}
}
?>
表的结构必须按那个顺序吗?如

[id |用户名|密码]

还是可能

[id |电子邮件|用户名|密码]

您将如何输出变量以查看实际结果

包括在内

$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_row($query);
var_dump($row['username']);
我在哪里寻找输出?我被带到message.php页面,这意味着它将转到user.php页面,但不再允许在页面上显示输出

突破 我能让它像我想的那样运行。问题是我必须手动更改电子邮件和密码才能让它工作。所以我想这是一个开始,可能意味着问题根本不在这里。可能在发布数据的区域内?
任何关于什么可能是问题的想法或理论,以便我可以尝试解决它。

Mysql或PHP不会神奇地插入字段。
我猜数据库中有意外数据


我不擅长PHP,但不应该做$row['username']?

不是答案,但您是否考虑过正确缩进代码?使用var_dump()显示与变量相关的所有信息(例如var_dump($row);)。先得到哪列并不重要。@General\u Twyckenham您到底把它放在哪里?@Chris var\u dump($var)可以放在$var设置后的任何位置。因此,对于$row,将其放在$row=mysqli\u fetch\u row($query)之后;我不明白你为什么要写这么复杂的登录脚本。当你这么说的时候,我想我应该检查一下其他输入。它们肉眼看不出来,但似乎不起作用。你能想到有什么东西可能会导致赤裸裸的意外数据输入吗?有了你的突破,我更相信坏数据。如果你在其他地方使用过$row[神奇数字],你现在知道为什么没有了。
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_row($query);
var_dump($row['username']);