簡體   English   中英

在表行中查找一個值,如果有,則對其進行更新

[英]Find a value in a table row, and if it is there, update it

我試圖在我的桌子上找到一個人並更新他們的分數。 這是我現在擁有的代碼。 由於某種原因,它不起作用。 無需更改此人的分數,它只會使用該人的名字創建一個新行。

$name = $_POST["strtolower(name)"];
$team = $_POST["team"];
$num = $_POST["number"];
$goals = $_POST["goals"];

if($query = mysqli_query("SELECT goals FROM goalscorers WHERE name=$name ", $db)){
  while($row = mysqli_fetch_assoc($query)){
    $origgoals = $row['goals'];
    $newgoals = (int)$origgoals + (int)$goals;
    mysqli_query($db, "UPDATE goalscorers SET goals=$newgoals WHERE name=$name ");
    echo "<h1>Thank you for submitting your details! <br /> <a href=\"goalscorers.php\">Add another</a></h1>";
  }
  mysqli_free_result($query);
}
else {
    $query = "INSERT INTO goalscorers (name, team, num, goals) VALUES ('$name','$team','$num','$goals') ";
    $result = mysqli_query($query, $db);
    if (mysqli_error()) { print "Database ERROR: " . mysql_error(); } 

    echo "<h1>Thank you for submitting your details! <br /> <a href=\"goalscorers.php\">Add another</a></h1>";
}

我對PHP和MySQL都是新手,所以這可能是一個基本錯誤。

另外,我已經連接到數據庫了。

您的直接問題是您的sql查詢中沒有字符串值的引號。 更改

"SELECT goals FROM goalscorers WHERE name=$name "

"SELECT goals FROM goalscorers WHERE name = '$name'"
                                            ^     ^

"UPDATE goalscorers SET goals=$newgoals WHERE name=$name "

"UPDATE goalscorers SET goals=$newgoals WHERE name = '$name'"
                                                     ^     ^

附帶說明:學習和使用准備好的語句 您的代碼容易受到sql注入的攻擊。


UPDATE1:您可以使用INSERT ... ON DUPLICATE KEY UPDATE大大簡化代碼。 為了使其正常工作,您必須在name列上具有一個唯一(主鍵)索引。 您的插入語句應如下所示

INSERT INTO goalscorers (`name`, `team`, `num`, `goals`)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE goals = goals + VALUES(goals)

這是SQLFiddle演示


UPDATE2:現在,使用INSERT ... ON DUPLICATE KEY UPDATE和預處理語句的代碼看起來像這樣

$name  = $_POST['name'];
$team  = $_POST['team'];
$num   = $_POST['number'];
$goals = $_POST['goals'];

/* connect to the database*/
$db = new mysqli('localhost', 'user', 'userpwd', 'test');
/* check connection */
if ($db->connect_errno) {
    die('Connection failed: ' .$db->connect_error);
}

$sql = 'INSERT INTO goalscorers (`name`, `team`, `num`, `goals`)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE goals = goals + VALUES(goals)';
/* create a prepared statement */
if ($stmt = $db->prepare($sql)) {
    /* bind parameters for markers */
    $stmt->bind_param("ssii", $name, $team, $num, $goals);
    /* execute query */
    if ($stmt->execute()) {
        echo '<h1>Thank you for submitting your details! <br /> <a href="goalscorers.php">Add another</a></h1>';
    } else {
        die('Insert failed: ' .$db->error);    
    }
    /* close statement */
    $stmt->close();
} else {
    die('Statement prepare failed: ' .$db->error);    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM