首页 > 解决方案 > PHP MySQL登录适用于本地服务器但不适用于公共服务器

问题描述

我玩了一下 PHP 和 MySQL 登录,并意识到它很容易进行 sql 注入。所以我改变了一些东西,而不是$query我使用的$smtp等等。

该页面在我的本地服务器(xammp)上加载并运行,但是当我将它上传到我的公共服务器时,我收到500 Internal Server Error(页面在更改之前运行)

我没有对 HTML 进行任何更改,它只是导致问题的 PHP 部分。

这是我的代码,适用于本地服务器,但不适用于公共服务器:

<?php
session_start();
 require('../db/DBconnect.php');
 $select_db = mysqli_select_db($connection, 'website');
if (!$select_db){
    die("Database Selection Failed" . mysqli_error($connection));
}

if (isset($_POST['username']) and isset($_POST['password'])){

$username = $_POST['username'];
$password = $_POST['password'];
//$query = "SELECT * FROM `users` WHERE userName='$username' and userPass='$password'"; OLD LOGIN
$stmt = $connection->prepare('SELECT * FROM users WHERE userName= ? and userPass= ?');
$stmt->bind_param('is', $username, $password);

$stmt->execute();

//$result = $stmt->get_result(); OLD LOGIN
//while ($row = $result->fetch_assoc()) { OLD LOGIN
    // do something with $row OLD LOGIN
//} OLD LOGIN
$result = $stmt->get_result();
//$result = mysqli_query($connection, $stmt) or die(mysqli_error($connection)); OLD LOGIN
$count = mysqli_num_rows($result);
if ($count == 1){
$_SESSION['username'] = $username;
}else{
$fmsg = "Invalid Login Credentials.";
}
}
if (isset($_SESSION['username'])){
$username = $_SESSION['username'];
header('Location: /beta/adminpanel.php');
}else{
?>
<!DOCTYPE html>
<base href="/">
  <html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Admin - Freunde Gamen &hearts;</title>
    <link href="../host-files/bootstrap.css" rel="stylesheet">
    <link href="../host-files/admin.css" rel="stylesheet">
<html>
<head>
  <base href="/">
    <link rel="icon" href="../favicon.ico" type="image/x-icon"/>
</head>
  <body>
<div class="container">
    <div class="login">

      <form class="form-signin" method="POST">
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
        <h2 class="form-signin-heading">FG - Admin Login</h2>
        <div class="input-group">
    <span class="input-group-addon" id="basic-addon1">@</span>
    <input type="text" name="username" class="form-control" placeholder="Username" required>
  </div>
        <label for="inputPassword" class="sr-only">Password</label>
        <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
      </form>
</div>
    </div>
    <script src="../host-files/js/bootstrap.js"></script>
    <script src="../host-files/js/jquery.min.js"></script>


</body></html>
<?php } ?>

本地和公共服务器都使用:
Apache/2.4.10
PHP 版本 5.6.33-0+deb8u1(我知道我应该更新到 PHP 7)
共享相同的 MySQL 数据库和服务器

标签: phpmysqlhttp-status-code-500

解决方案


所以在将这个添加到 admin.php 之后:
// DEBUGGING error_reporting(E_ALL); ini_set('display_errors', true);
我意识到 mysqli_mysqlnd.dll 作为我的公共服务器上的一个包丢失了,所以我安装了它。
sudo apt-get install php5-mysqlnd
它奏效了!谢谢你们!


推荐阅读