2017-10-28 154 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