[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сверить переданные данные с данными в БД?
Dimaz
Всем привет :) С клиента приходит ответ типа integer. Php-скрипт должен сверить это значение со значением в таблице БД. Если значения совпали, или наоборот не совпали, вывести соответствующее сообщение. Сами данные из таблицы передавать клиенту не нужно, нужно лишь сверить их. Сделал так:
<?php
include_once("config.php");
$ans = (int)$_GET[answer];
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
if($mysqli->connect_errno){
echo "Не удалось подключиться к MySQL";
}
$res = $mysqli->query("SELECT `question_id` FROM `russian`");
$row = $res->fetch_assoc();
if($row['question_id'] != $ans){
echo "Ответ неверный";
}
else{
echo "Ответ правильный";
}
?>

Вопрос такой. Можно ли это реализовать более простым способом, например без использования функции fetch_assoc(). Или может быть решить задачу сравнения чисел можно в самом sql-запросе?
waldicom
чтобы сверить ответ, нужно знать как вопрос, так и ответ, или?
Ответ приходит, а где id вопроса? И конечно же лучше спрашивать сразу в SQL запросе.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Dimaz
Да это понятно, все это сделаю потом. Сейчас пока пытаюсь разобраться со сравнением значений. Только вот как сравнить в sql-запросе я не знаю. Подскажите пожалуйста.
waldicom
SQL ... WHERE `questionId` = $_GET['quiestionId'] AND `answerId` = $_GET['answerId'] ...

смысл такой. В таком виде использовать нельзя из-за опасности как минимум SQL Injection

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Dimaz
$res = $mysqli->query("SELECT `question_id` FROM `russian` WHERE `question_id` = '". $ans ."'");

Если не находит, возвращает пустой результат.
Вы это имели ввиду?
Dimaz
Цитата (waldicom @ 26.02.2013 - 17:07)
SQL ... WHERE `questionId` = $_GET['quiestionId'] AND `answerId` = $_GET['answerId'] ...

смысл такой. В таком виде использовать нельзя из-за опасности как минимум SQL Injection

А разве это не спасает от sql инъекций?
$ans = (int)$_GET[answer];

Я указываю тип данных integer. Так как ответы будут приходить в числовом виде, т.е. идентификаторы ответов.
Я пробовал передать текст вместо числа, скрипт преобразует его в ноль.
waldicom
да, так спасает. Нельзя как я в примере написал (там напрямую $_GET в запросе используется)

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Dimaz
$row = $res->fetch_assoc();
if($row){
echo "Ответ правильный";
}
else{
echo "Ответ неверный";
}

На пустоту его можно так проверить? Или так лучше
if(is_null($row))
?
И еще вопросик. Нужно ли ставить в конце запроса LIMIT 1, чтобы он дальше не искал. Или он не будет?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.