2017-10-28 153 views
-3

我的网站上有一个登录和注册php系统。它工作得很好。不过,我想向数据库添加另一列。这是平衡。我想在网站上登录时显示用户的余额。 我曾尝试通过使用此功能可以选择平衡数据值:通过查询从mysql数据库读取数据值

<?php 
$balance = mysqli_query("SELECT balance FROM users WHERE username='$username' 
AND password='$password'"); 
echo $balance 
?> 

我新的PHP编程,因此我不确定什么是错的这一段代码。 SQL数据库如下所示:

id username email password balance 
test test  test  test  test 

我会从我的代码变量$余额将从值被设置假设收到,如果登录页面上输入用户名和密码是发现了数据库。与此相关的余额将被打印。 此项费用已包含在网页中的我的HTML部分显示余额的数值:

<a href="#">Balance: <?php echo $balance ?><span class="sr-only">(current)</span></a> 

当测试网站,我收到以下错误

警告:mysqli_query()预计至少2参数,1 d给出:\ WINDOWS \ XAMPP \ htdocs中\测试网站\ FrontPage.php上线3

我试图通过研究摸不着头脑,但我不能找到一个解决方案。任何解决方案都是受欢迎的,因为我已经停止了开发。

另外我知道这是非常不安全的,我将确保代码在网站上线时更安全。我现在只是在测试。

回答

-2
  1. 如果您使用的mysqli你必须这样设置:

    $balance = mysqli_query($connection,"SELECT balance FROM users WHERE username='$username' 
    

    和密码= $密码'“); // $连接是你的连接配置

  2. 。你必须从输入获得价值,像这样:

    $email = $_POST['email']; 
    $pass = $_POST['pass']; 
    

然后从查询中获取布尔值,像这样:

if($balance) echo 'success' else echo 'wrong'; 
+0

你的第一点是完全不正确的语法。你的第二点完全忽略了我所要求的。我希望显示的数据值不需要用户输入。数据值已经在sql数据库中设置。 – Jamie

+0

我只是举了一个例子来说明我的第一个陈述,第二个陈述是针对你的问题没有解释的。要显示数据,必须先回显查询echo :-p – user8455694

1

你有4个问题。

  1. 你需要散列你的用户密码,存储明文密码是不好的做法。
  2. 您需要参数化您的查询,因为如果没有,您打开SQL注入,并根据用户的用户名/密码可能会无意间破坏您的查询。
  3. query函数期望参数1是连接对象。
  4. query函数返回需要获取的结果对象。

这里是应该起作用的更新版本。这假定$conn是你的连接。

<?php 
$stmt = mysqli_prepare($conn, "SELECT balance FROM users WHERE username=? AND password=?"); 
mysqli_stmt_bind_param($stmt, 'ss', $user, $password); 
mysqli_stmt_execute($stmt); 
mysqli_stmt_bind_result($stmt, $balance); 
mysqli_stmt_fetch($stmt); 
echo $balance; 
?> 

这不包括散列。请参阅http://php.net/manual/en/function.password-hash.phphttp://php.net/manual/en/function.password-verify.php。你将需要在你的数据库中当前所有的值。

+0

尝试了您的代码出错: 警告:mysqli_stmt_bind_param()需要参数1为mysqli_stmt,布尔在D:\ Windows \ xampp \ htdocs \ TEST \ FrontPage中给出。 php 4行 警告:mysqli_stmt_execute()需要参数1为mysqli_stmt,布尔在第5行给出D:\ Windows \ xampp \ htdocs \ TEST \ FrontPage.php 警告:mysqli_stmt_bind_result()期望参数1为mysqli_stmt,布尔给定D:\ Windows \ xampp \ htdocs \ TEST \ FrontPage.php在第6行 警告:mysqli_stmt_fetch()期望参数1为mysqli_stmt,布尔在D:\ Windows \ xampp \ htdocs \ TEST \ FrontPage.php中给出在线7 – Jamie

+0

@Jamie'准备'未能使用错误报告,看看为什么。你把'$ conn'改成了你实际的mysqli连接变量吗?就像'printf(“Errormessage:%s \ n”,mysqli_error($ conn));'应该给你一些东西,参见http://php.net/manual/en/mysqli.error.php获取更多信息。 – chris85

+0

我将$ conn更改为$ db,因为这是连接变量。我也尝试添加printf(“Errormessage:%s \ n”,mysqli_error($ conn));但没有任何改变。 – Jamie