[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как правельней и оптимальней делать проверку
koala
Как правильней и оптимальней делать проверку чего то с помощью базы данных. Тоисть проверять, нет ли уже такого в базе.

Что бы понять насколько хорошо я понял логику написания скриптов я не гуглил по этому вопросу и написал скрипт проверки на уникальность почты. Пожалуйста, эксперты, скажите где мне надо подучить или улучшить свои знания =)) Буду очень благодарен.

Код:

//Проверка на уникальность почты
$result = mysql_query ("SELECT `email` FROM `test`");
$myrow = mysql_fetch_array ($result);
do
{
if ($myrow['email'] == $_POST['email'] && $_POST['email'] == $_POST['email2']) // Вторая половина это проверка полей ввода почты на идентичность
{
echo 'В базе уже есть такой почтовый ящик ('. $_POST['email'] . ')';
exit();
}
}

while ($myrow = mysql_fetch_array ($result));




Спустя 1 минута, 23 секунды (9.11.2010 - 18:05) DmitryOpalev написал(а):
$result = mysql_query("SELECT * FROM WHERE id='$id' ") //К примеру
if ($result)
{
die('Запись с таким номером уже есть...');
}

Спустя 7 минут, 47 секунд (9.11.2010 - 18:13) koala написал(а):
DmitryOpalev, спасибо, ваш вариант более оптимальный и совершает всего один запрос к базе. Ну а мой скрипт будет совершать запросы пока не найдет адрес или цикл закончится =))

Мне еще есть чему учится =)

Спустя 5 минут, 41 секунда (9.11.2010 - 18:19) Sanchopansa написал(а):
ну для начала я тебе вроде уже говорил по поводу цыклов с пост условием...
$result = mysql_query ("SELECT `email` FROM `test`");

while ($myrow = mysql_fetch_array ($result))
{
if ($myrow['email'] == $_POST['email'] && $_POST['email'] == $_POST['email2']) // Вторая половина это проверка полей ввода почты на идентичность
{
echo 'В базе уже есть такой почтовый ящик ('. $_POST['email'] . ')';
exit();
}
}


вот так писать цыкл для обработки записей из БД правильно!
А что по поводу твоего вопроса то я делаю это так и не парюсь что лучше..smile.gif

$result = mysql_query ("SELECT COUNT(*) FROM `test` WHERE `email` = '{$_POST['email']}'");
if (mysql_result($result))
{
echo "такое мыло уже есть!";
} else {
echo "Все гуд!";
}

Спустя 36 секунд (9.11.2010 - 18:19) Slays написал(а):
$myrow, походу Попов опять user posted image

Спустя 2 минуты, 49 секунд (9.11.2010 - 18:22) Sanchopansa написал(а):
Slays
А этот Попов таким конструкциям с цыклом do while тоже учит?
do 
{
if ($myrow['email'] == $_POST['email'] && $_POST['email'] == $_POST['email2']) // Вторая половина это проверка полей ввода почты на идентичность
{
echo 'В базе уже есть такой почтовый ящик ('. $_POST['email'] . ')';
exit();
}
}

while ($myrow = mysql_fetch_array ($result));

если да то я бы плюнул ему в лицу за извращенный подход к обучению свежих и светлых умов smile.gif

Спустя 36 секунд (9.11.2010 - 18:23) DmitryOpalev написал(а):
Цитата
Ну а мой скрипт будет совершать запросы пока не найдет адрес или цикл закончится =))

Может я не правильно понял, но можно сделать запрос
$result = mysql_query("SELECT * FROM WHERE id='$id' ") //К примеру
if ($result)
{
die('Запись с таким номером уже есть...');
}

до того как делать основной... тогда сначала будет проверка, а потом, если она прошла, делать основной запрос...

Спустя 2 минуты, 11 секунд (9.11.2010 - 18:25) Slays написал(а):
$res = mysql_query("SELECT COUNT(*) AS `aux` FROM `test` WHERE `email` = '". $email."'");  

if(mysql_result($res, 0) > 0)
echo "уже есть";



Спустя 2 минуты, 58 секунд (9.11.2010 - 18:28) Slays написал(а):
Sanchopansa ак именно за такие извращения его и недолюбливают, мягко говоря =))
А молодежи чо, они все как попугаи копируют =)

Спустя 4 минуты, 29 секунд (9.11.2010 - 18:32) Invis1ble написал(а):
koala
лучше так
$result = mysql_query("SELECT COUNT(*) FROM `test` WHERE `email`='".$email."'");
$amount = mysql_result($result, 0, 0);
if ($amount != 0)
die('Есть такой e-mail');

Спустя 1 минута, 33 секунды (9.11.2010 - 18:34) Slays написал(а):
зачем вводить лишнюю переменную, итак все сработает =)

Спустя 3 минуты, 5 секунд (9.11.2010 - 18:37) Invis1ble написал(а):
Slays
Цитата
зачем вводить лишнюю переменную, итак все сработает =)

можно ваще так:
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `test` WHERE `email`='".$email."'"), 0, 0) != 0)
die('Есть такой e-mail');

но это не есть хороший тон..
Цитата
mysql_result() по-моему только 2 параметра принимает

нет, но тут можно и двумя обойтись

Спустя 2 минуты, 35 секунд (9.11.2010 - 18:40) Sanchopansa написал(а):
Slays
Я просто впервые тут на форуме услышал про этих Поповых и остальных... поэтому и спрашиваю smile.gif
Я лично не любитель таких методов обучения... http://php.net для меня в большенстве случаев лучший помошник...

Спустя 7 минут (9.11.2010 - 18:47) koala написал(а):
Извиняюсь за do while, я когда начинал изучать PHP скачал уроки Попова, ну вот и привязалось. Все, больше такого не буду применять =)))

P.S. Как правильней в запросе вставлять например $_POST['blabla']. У меня всегда ругается на что то.

Пробую так:

$result = mysql_query ("SELECT * FROM `test` WHERE id="'$_POST['a']'"");


Еще так пробую:

$result = mysql_query ("SELECT * FROM `test` WHERE id='$_POST['a']'");


Ну и так:

$result = mysql_query ("SELECT * FROM `test` WHERE id="$_POST['a']"");

Спустя 41 секунда (9.11.2010 - 18:47) DmitryOpalev написал(а):
Пиши
$blabla = $_POST['blabla'];

И потом вставлять куда хочется...

Спустя 1 минута, 25 секунд (9.11.2010 - 18:49) Slays написал(а):
$result = mysql_query ("SELECT * FROM `test` WHERE `id`=' " . $_POST['a'] . " ' ");

Спустя 1 минута, 48 секунд (9.11.2010 - 18:50) Invis1ble написал(а):
koala
$result = mysql_query ("SELECT * FROM `test` WHERE `id`='".mysql_real_escape_string($_POST['a'])."'");

Спустя 32 секунды (9.11.2010 - 18:51) Invis1ble написал(а):
ай, не успел, Slays опередил =)

Спустя 22 секунды (9.11.2010 - 18:51) Slays написал(а):
ну если с презервативом защитой, то даже так, да =)

Спустя 1 минута, 24 секунды (9.11.2010 - 18:53) koala написал(а):
А разве нельзя сразу без создания переменных? )

Спустя 24 секунды (9.11.2010 - 18:53) Slays написал(а):
выше смотри, нафик эту переменную =)

Спустя 1 минута, 19 секунд (9.11.2010 - 18:54) Invis1ble написал(а):
Slays
a вообще, судя по названию поля (id) - надо так
$id = intval($_POST['a']);
$result = mysql_query ('SELECT * FROM `test` WHERE `id`='.$id);

Спустя 1 минута, 52 секунды (9.11.2010 - 18:56) Slays написал(а):
$result = mysql_query ("SELECT * FROM `test` WHERE `id`=' " . (int)$_POST['a'] . " ' ");


user posted image

Спустя 7 минут, 52 секунды (9.11.2010 - 19:04) koala написал(а):
Спасибо, все работает, вот только осталось научится правильно пользоваться презервативом... biggrin.gif

Спустя 3 минуты, 8 секунд (9.11.2010 - 19:07) Slays написал(а):

Спустя 23 минуты, 34 секунды (9.11.2010 - 19:31) DmitryOpalev написал(а):
Цитата
осталось научится правильно пользоваться презервативом...

Цитата
http://phpforum.ru/index.php?showtopic=21213

laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif

Спустя 1 минута, 18 секунд (9.11.2010 - 19:32) nugle написал(а):
Люди, а как правильнее всего будет?
1.
$result = mysql_query ("SELECT * FROM `test` WHERE `id`=' " . $_POST['a'] . " ' ");

2.
$result = mysql_query ("SELECT * FROM `test` WHERE `id`='".mysql_real_escape_string($_POST['a'])."'");

3.
$result = mysql_query ("SELECT * FROM `test` WHERE `id`=' { $_POST['a'] }' ");

или как нибудь еще...?Или вообще разници нет?

Спустя 58 секунд (9.11.2010 - 19:33) DmitryOpalev написал(а):
1, 2.
Первое просто ищет, второе ищет и защищает от SQL-инъекций

Спустя 2 минуты, 14 секунд (9.11.2010 - 19:35) nugle написал(а):
то есть 3 это вообще лучше не использовать?
1,2 какое из них лучше тогда?

Спустя 49 секунд (9.11.2010 - 19:36) DmitryOpalev написал(а):
2...
Защита все-таки...
rolleyes.gif

Спустя 3 минуты, 1 секунда (9.11.2010 - 19:39) nugle написал(а):
А вы каким пользуетесь?

Спустя 3 минуты, 20 секунд (9.11.2010 - 19:43) DmitryOpalev написал(а):
Либо как только что писали...
Либо пишу:

$a = $_POST['a'];

Ну и заменяю:
$result = mysql_query ("SELECT * FROM `test` WHERE id=' $a ' ");


Спустя 5 минут, 55 секунд (9.11.2010 - 19:48) Slays написал(а):
тогда уж

$result = mysql_query ("SELECT * FROM `test` WHERE id=' . $a . ' ");

конкатенация работает быстрей

также не забывай про тип переменной, конструкция (int)$a позволит гарантировать что переменная будет числом, что собственно запрос и ждет

Спустя 51 минута, 22 секунды (9.11.2010 - 20:40) twin написал(а):
Апострофы зачем?

Спустя 4 минуты, 23 секунды (9.11.2010 - 20:44) Slays написал(а):
ну если число ждем, то наверно не за чем


_____________
Vi Veri Veniversum Vivus Vici
Быстрый ответ:

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