未定义变量和mysqli错误


Undefined variable and mysqli errors

我得到这些错误在我的代码,我不知道为什么

:

1. Undefined variable: con in /opt/local/apache2/htdocs/SE/index.php on line 28
 2. mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /opt/local/apache2/htdocs/SE/index.php on line 28
 3. Undefined variable: con in /opt/local/apache2/htdocs/SE/index.php on line 29
 4. mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /opt/local/apache2/htdocs/SE/index.php on line 29
 5. Undefined variable: con in /opt/local/apache2/htdocs/SE/index.php on line 31
 6. mysqli_query() expects parameter 1 to be mysqli, null given in /opt/local/apache2/htdocs/SE/index.php on line 31
 7. mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /opt/local/apache2/htdocs/SE/index.php on line 32
 8. mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /opt/local/apache2/htdocs/SE/index.php on line 33

这是我的文件

dbcon.php

<?php
$hostname = "localhost";
$username = "root";
$password = "";
$database = "login";
function getConnected($hostname, $username, $password, $database) {
        $con = mysqli_connect($hostname, $username, $password, $database);
        if($con->connect_error)
            die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
return $con;}?>

index . php

<?php session_start(); ?>
<?php include('dbcon.php');?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="form-wrapper">
  
  <form action="#" method="post">
    <h3>Влез в системата</h3>
	
    <div class="form-item">
		<input type="text" name="user" required="required" placeholder="Фак. Номер" autofocus required/>
    </div>
    
    <div class="form-item">
		<input type="password" name="pass" required="required" placeholder="Парола" required/>
    </div>
    
    <div class="button-panel">
		<input type="submit" class="button" title="Log In" name="login" value="Влез"/>
    </div>
  </form>
  <?php
	if (isset($_POST['login']))
		{
			$username = mysqli_real_escape_string($con, $_POST['user']);
			$password = mysqli_real_escape_string($con, $_POST['pass']);
        
			$query 		= mysqli_query($con, "SELECT * FROM users WHERE  password='$password' and username='$username'");
			$row		= mysqli_fetch_array($query);
			$num_row 	= mysqli_num_rows($query);
			
			if ($num_row > 0) 
				{			
					$_SESSION['user_id']=$row['user_id'];
					header('location:home.php');
					
				}
			else
				{
					echo 'Invalid Username and Password Combination';
				}
		}
  ?>
  <div class="reminder">
    <p>Not a member? <a href="#">Sign up now</a></p>
    <p><a href="#">Forgot password?</a></p>
  </div>
</div>
</body>
</html>

我得到这些错误mysqli_query(), mysqli_fetch_array()和mysqli_num_rows()。它们都希望参数1是mysqli_result, null在。

在您的dbcon.php文件中,您有一个功能getConnected($hostname, $username, $password, $database),但您从未使用过它。您应该在index.php中的代码中执行如下操作:

$con = getConnected($hostname, $username, $password, $database);

,它看起来像这样:

if (isset($_POST['login'])) {
    $con = getConnected($hostname, $username, $password, $database);
    $username = mysqli_real_escape_string($con, $_POST['user']);
    $password = mysqli_real_escape_string($con, $_POST['pass']);
    // ........ rest of your code

或者你可以把这些行写成一个函数:

$con = mysqli_connect($hostname, $username, $password, $database);
        if($con->connect_error) // should be mysqli_connect_errno()
            die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
return $con; // without return

所以dbcon.php看起来像这样:

<?php
$hostname = "localhost";
$username = "root";
$password = "";
$database = "login";
$con = mysqli_connect($hostname, $username, $password, $database);
if($con->connect_error) // should be mysqli_connect_errno()
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());

同样在你的函数(dbcon.php)检查连接是否建立写错了,它应该像下面这样:

if (mysqli_connect_errno()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

你正在使用程序风格,更多信息可以在这里找到