[英]php form is not updating database in mySQL
我創建了一個表來顯示用戶對游戲的前10個最高得分。 我正在嘗試創建一個表格,該表格允許用戶在表格中輸入他們的新高分,點擊提交,然后更新數據庫,並顯示具有新輸入的高分的新排行榜。 但是,當我更改高分時,數據庫未更新,表也未更改。 這真的使我受挫,如果有人知道為什么會發生這種情況,並且可以提出一些很棒的建議。 我的代碼在/
<?php
class DatabaseManager
{
private $servername = "localhost";
private $username = "root";
private $password = "";
private $dbname = "sokodatabase";
private $dbc;
function __construct() {
$this->dbc = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
}
function __destruct() {
mysqli_close($this->dbc);
}
public function SelectHighScores(){
// Create a query for the database
$query = "
SELECT username, highScores, rankNo
FROM users, leaderboardhighscores
WHERE users.id = leaderboardhighscores.userId
ORDER BY highScores desc
LIMIT 10";
// Get a response from the database by sending the connection
// and the query
$response = @mysqli_query($this->dbc, $query);
// If the query executed properly proceed
if($response){
echo '<table>
<tr><td><b>Rank</b></td>
<td><b>Username</b></td>
<td><b>High Score</b></td></tr>';
// mysqli_fetch_array will return a row of data from the query
// until no further data is available
while($row = mysqli_fetch_array($response)){
echo '<tr><td>' .
$row['rankNo'] . '</td><td>' .
$row['username'] . '</td><td>' .
$row['highScores'] . '</td><td>';
echo '</tr>';
}
echo '</table>';
} else {
echo "Couldn't issue database query<br />";
}
}
}
?>
我的html與php建立表格...
<div class = "leaderboard">
<?php
// Get a connection for the database
require_once('../sokodatabase.php');
$manager = new DatabaseManager;
$manager->SelectHighScores();
//if(isset($_POST['submit'])){
//require_once('../sokodatabase.php');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$query = "
UPDATE leaderboardHighScores
SET highScores=".$_POST["highScores"].", rankNo=".$_POST["rankNo"]."
WHERE userId=".$_POST["userId"];
//var_dump($_POST);
//echo $query;
@mysqli_query($this, $query);
}
//}
?>
<form method="post" action="highScores.php">
high score <input type="text" name="highScores"/>
rankNo <input type="text" name="rankNo"/>
userId <input type="text" name="userId"/>
<input type="submit" value="Submit">
</form>
</div>
首先,為了安全起見,在使用查詢之前,請務必先清除用戶輸入的內容。
其次,您也不需要在mysqli_query
之前使用@
-除非您試圖抑制該函數引發的任何和所有錯誤/警告。
第三,嘗試對SQL使用相同的情況; 你用leaderboardhighscores
的類,然后leaderboardHighScores
在你的代碼的第二部分; 我不知道數據庫中的真實姓名是誰,但是假設以前的名字是真實的,因為這確實如您所說。 我說這是因為區分大小寫可能會導致問題,請閱讀MySQL文檔 。
第四,您在沒有意義的頁面上的類之外使用$this
(如果沒有其他含義)。
將此函數添加到DatabaseManager
類:
public function SetHighScores($uid, $score, $rank) {
$uid = mysql_real_escape_string($uid);
$score = mysql_real_escape_string($score);
$rank = mysql_real_escape_string($rank);
$query = "UPDATE leaderboardhighscores SET highScores='{$score}', rankNo='{$rank}' WHERE userId='{$uid}';";
return mysqli_query($this->dbc, $query);
}
然后這將出現在您的頁面上:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$manager->SetHighScores($_POST['userId'], $_POST['highScores'], $_POST['rankNo']);
}
另外,您應該研究PDO_MYSQL ,這將是一個更好的選擇,但是我知道您在做什么對我猜測的基礎知識很有幫助。
然后試試這個
$result = mysqli_query($manager->dbc, $query);
if ( ! $result ) {
echo 'Error code '
. mysqli_errno($manager->dbc)
. ' Error message '
. mysqli_error($manager->dbc);
}
由於$ manager是在正在執行的代碼范圍內保存DatabaseManager類的對象實例的變量,並且該對象具有名為dbc
的屬性,該屬性包含數據庫連接句柄。
正如@ x3ns在他/她的評論中所說,您還需要像這樣更改DatabaseManager代碼
class DatabaseManager
{
private $servername = "localhost";
private $username = "root";
private $password = "";
private $dbname = "sokodatabase";
public $dbc; //<-- change here
這樣您就可以從對象本身外部訪問該屬性。
這是一個快速解決方案,但老實說,您最好停止閱讀@ x3ns的答案,並應用大部分(如果不是全部)他/她的建議。
盡管我想再添加一個。
像在public function SelectHighScores()
一樣,直接從類方法生成輸出是非常糟糕的做法
直接從方法中回顯完全破壞了繼承和修改該方法的活動的能力。 最好將輸出生成為變量並返回該變量。 然后,如果我想對您的方法進行子類化,則可以選擇在需要時以某種方式修改其結果。
嘗試替換:
@mysqli_query($this, $query);
帶有:
@mysqli_query($this->dbc, $query);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.