Обновление данных таблицы через PHP / MySql - PullRequest
0 голосов
/ 26 сентября 2019

Я пытался создать страницу для создания или обновления данных в таблице моей базы данных.

Если я вспоминаю ссылку, вводя новые данные (в моем случае новый плеер), данные вернывставлен в таблицу.Вместо этого, если я обращаюсь к ссылке с данными, уже имеющимися, для обновления таблицы, я всегда получаю эхо-сообщение «Ошибка обновления» и первое ОБНОВЛЕНИЕ, если оно никогда не выполняется.

Может кто-нибудь сказать мне, где я 'м неправильно?

<?php
include "coredb.php";

if (isset($_GET["player"]) && isset($_GET["score"]))
{
    //Check id player is already present in leaderboard database
    if ($query = $mysqli->prepare('SELECT Player FROM leaderboard WHERE Player = ?'))
    {
        $query->bind_param("s", $_GET["player"]);
        $query->execute();
        $query->fetch();
        // If player already present in leaderboard (result > 0)
        if ($query->num_rows > 0)
        {
            // Update existing database record
            if ($query = $mysqli->prepare('UPDATE leaderboard SET Score = ? WHERE Player = ?')) {
                $query->bind_param("i", $_GET["score"]);
                $query->execute();
                echo "Existing player record updated!";
            }
            else
            {
                echo "Error Update";
            }   
        }
        else
        {
            // Create new record in database
            if ($query = $mysqli->prepare('INSERT INTO leaderboard (Player, Score) VALUES (?, ?)'))
            {
                $query->bind_param("si", $_GET["player"], $_GET["score"]);
                $query->execute();
                echo "New player record create!";
            }
            else
            {
                echo "Error Create";
            } 
        }
    }
}
else
{
    echo "Error database";
}

// Connection close
$mysqli->close();
?>

1 Ответ

0 голосов
/ 26 сентября 2019

Пожалуйста, всегда используйте PDO или Подготовленный MySQLI, чтобы избежать инъекций SQL.
Кто-то может отбросить ваши таблицы или сделать другие опасные вещи, которые испортят ваши данные.

Также убедитесь, что вы используете запрос POST для отправкиконфиденциальную информацию на ваш сервер.
Если вы используете GET, каждый сможет увидеть данные, которые вы транспортируете.

См. этот пример:

<?php

$dbhost     = 'localhost';
$dbname     = 'pdo';
$dbusername = 'root';
$dbpassword = '845625';

if (!empty($_POST['submit'])) {

    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Select player
    $stmt = $conn->prepare("SELECT player FROM leaderboard WHERE player = :player");
    $stmt->execute([
        'player' => $_POST['player']
    ]);

    // Set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    if (empty($result)) {

        //Insert data
        $stmt = $conn->prepare('INSERT INTO `leaderboard` (player, score) VALUES (:player, :score)');

        $stmt->execute([
            'player' => $_POST['player'],
            'score' => $_POST['score']
        ]);

        echo 'New data inserted';

    } else {

        $stmt = $conn->prepare('UPDATE `leaderboard` SET score = :score WHERE player = :player');
        $stmt->execute([
            'score' => $_POST['score'],
            'player' => $_POST['player']
        ])

        echo 'Existing data updated: ' . $stmt->rowCount() . ' rows.';

    }

}   

?>

<form method="POST" action="">
   <input type="text" name="player">
   <input type="text" name="score">
   <button type="submit" name="submit">
      Submit data
   </button>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...