Поддержание веб-сайта молодежной спортивной лиги с расписаниями и турнирной таблицей, которые отображаются через интерфейс HTML, и использование PHP для связи с базой данных MySQL. Все работало хорошо в течение нескольких лет, но у меня недавно возникла большая проблема с непреднамеренными сообщениями о множественных результатах, и я пытаюсь закрыть лазейку, которая позволяет этому случиться.
Ниже приведен небольшой фрагмент кода PHP, который я пытаюсь добавить в сценарий создания отчетов. Идея состоит в том, чтобы сделать запрос к базе данных MySQL и посмотреть, равны ли в настоящий момент результаты игры хозяев и гостей выбранной игры «0». Если они есть, оценка еще не была сообщена, и сценарий может выполняться. Однако, если они имеют какое-либо другое значение, я хочу, чтобы сценарий остановился.
При тестировании сценарий завершается сообщением «уже сообщено», независимо от того, была ли сообщена игра или нет. Я считаю, что у меня проблема с операторами сравнения, которые я пытаюсь реализовать. Кто-нибудь может указать что-то очевидное в коде, который мне, кажется, не хватает? Небольшое руководство будет с благодарностью!
// Check to see if game has already been reported:
$qh = "SELECT home_score FROM $table WHERE game_id=$row[0]";
$hscore = mysqli_query($db, $qh);
$qa = "SELECT away_score FROM $table WHERE game_id=$row[0]";
$ascore = mysqli_query($db, $qa);
if ($hscore != 0 || $ascore != 0) {
echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {
Просто напишите 1 запрос, чтобы получить обе оценки, и вы сможете легко сравнить их, чтобы отобразить, что вам нужно.
// Check to see if game has already been reported:
$q = "SELECT home_score, away_score FROM $table WHERE game_id=$row[0]";
$result = mysqli_query($db, $q);
$scores = $result->fetch_assoc();
if ($scores['home_score'] != 0 || $scores['away_score'] != 0) {
echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {
fetch_assoc()
Метод извлекает первую строку результата, который возвращается из MySQL в виде ассоциативного массива, что делает его удобным и простым в использовании. 🙂
Функция mysqli_query
возвращает mysqli_result object
поэтому вам нужно получить его, чтобы получить фактическое значение. Я думаю, что это сделает это.
$qh = "SELECT home_score FROM $table WHERE game_id=$row[0]";
$hscore = mysqli_stmt_fetch(mysqli_query($db, $qh));
$qa = "SELECT away_score FROM $table WHERE game_id=$row[0]";
$ascore = mysqli_stmt_fetch(mysqli_query($db, $qa));
if ($hscore['home_score'] != 0 || $ascore['away_score'] != 0) {
echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {
Другим подходом было бы убедиться, что оценка больше 0.
SELECT home_score FROM $table WHERE game_id=$row[0] and home_score > 0
Тогда вам нужно знать, вернули ли вы строку назад, оценка была больше 0.
Я думаю, что этот подход будет вашим лучшим подходом (не проверено) ..
$qh = "SELECT home_score, away_score FROM $table WHERE game_id=?";
$hscore = mysqli_prepare($db, $qh);
mysqli_stmt_bind_param($hscore, 'i', $row[0]);
mysqli_stmt_execute($hscore);
$unique_row = mysqli_fetch_row($hscore);
if ($unique_row['home_score'] != 0 || $unique_row['away_score'] != 0) {
echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {
Предположив $row[0]
там было целое число