Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2011, 21:36   #1
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию Плохой цикл

Здравствуйте, я вас буду пытать по конкретному примером, так что прошу извинить за какую либо не ясность!
Вот код!
PHP код:
$ruls mysql_query("SELECT id FROM zapros ORDER BY id DESC LIMIT 1");
$myrr mysql_fetch_array($ruls);
$zap_id $myrr['id'];
$result666 mysql_query("SELECT id FROM users WHERE dhtmlgoodies_city='$mod' and dhtmlgoodies_country='$mod1'");
$myrow666 mysql_fetch_array($result666);
do
{
$prod_id $myrow666['id'];
$res1 mysql_query("INSERT INTO zapros_for_prod (zap_id,marka,god,dvig,korobka,privod,vin,kuzov_num,kuzov_tip,dvig_num,dvig_tip,koplectacia,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,vopros,status,name,email,icq,gorod2,telefon,model,user_id,prod_id) 
VALUES ('
$zap_id','$b1','$b2','$b3','$b4','$b5','$b6','$b7','$b8','$b9','$b10','$b11','$b12','$b13','$b14','$b15','$b16','$b17','$b18','$b19','$b20','$b21','$b22','$b23','$b24','$b25','$b26','$b27','$b28','$b29','$userid','$prod_id')");
if (
$res1 != 'true') {
exit(
"<html><head><meta    http-equiv='Refresh' content='5;    URL=order.php'></head><body>Ваш запрос не был правельно обработан!</body></html>");
}    
}
while(
$myrow666 mysql_fetch_array($result666)); 
Все переменные 'рабочие", и имеют нужные значения!
Если $myrow666['id']; имеет два или более значений, то в базу добавляется первое и все, код останавливается, т.е. $res1 принимает fals. Если же $myrow666['id']; не существует то в базу все равно все добавляется. Убирал exit все равно не помогло т.е. в базу добавлялось одно значение.

Несколько раз проверял правильность кода, все норм. В чем дело понять не могу, надеюсь на вашу помощь.
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана
Rost93 вне форума Ответить с цитированием
Старый 21.09.2011, 22:05   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

На поле zap_id не стоит какой-нибудь PRIMARY KEY, UNIQUE...?

Цикл do{...} while() предназначен для чего угодно - но только не для обработки результатов запроса.
Была б моя воля - я б его вообще выпилил из PHP - бесполезнейшая конструкция...
Andkorol вне форума Ответить с цитированием
Старый 21.09.2011, 22:17   #3
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
На поле zap_id не стоит какой-нибудь PRIMARY KEY, UNIQUE...?
Если честно хз стояло там что-то или нет, но я полез в PHPmyadmin и в эту таблицу, смотрю он что-то подчеркнуты, пытался понять в чем дело, потом удалил и снова создал как INT подчеркивание убралось, проверил скрипт и все сработало!

Очередное, большое спасибо)) Даже хз чтобы бы я делал, на это бы посмотрел дня через два!
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана
Rost93 вне форума Ответить с цитированием
Старый 22.09.2011, 00:34   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Достаточно одного запроса
PHP код:
$res1 mysql_query("INSERT INTO zapros_for_prod (zap_id,marka,god,dvig,korobka,privod,vin,kuzov_num,kuzov_tip,dvig_num,dvig_tip,koplectacia,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,vopros,status,name,email,icq,gorod2,telefon,model,user_id,prod_id) 
VALUES (
(SELECT id FROM zapros ORDER BY id DESC LIMIT 1)
,'
$b1','$b2','$b3','$b4','$b5','$b6','$b7','$b8','$b9','$b10','$b11','$b12','$b13','$b14','$b15','$b16','$b17','$b18','$b19','$b20','$b21','$b22','$b23','$b24','$b25','$b26','$b27','$b28','$b29','$userid','$prod_id')"); 
Еще я бы задумался об sql инъекциях.
Cronos20 вне форума Ответить с цитированием
Старый 22.09.2011, 13:17   #5
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию

Одним запросом, тут не удастся, так как нужно вписать всем пользователям этот запрос которые удвалитворяют условию!

А что есть явные дырки?
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана
Rost93 вне форума Ответить с цитированием
Старый 22.09.2011, 14:43   #6
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

В sql все можно сделать одним запросом !!!
Ваши поля marka,god,dvig,korobka,privod,vin и т.д. наверняка из базы берутся
Тогда все просто делается конструкцией INSERT INTO () SELECT ... FROM .. WHERE ...
По поводу безопасности .. я надеюсь вы фильтруете все свои переменные или используете mysq_real_escape_string().
А вообще пора уже переходить на mysqli или PDO и использовать Prepare Statements. К тому же старый драйвер mysql скоро уберут.
Cronos20 вне форума Ответить с цитированием
Старый 22.09.2011, 15:37   #7
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию

Если честно в качестве безопасности я вообще нечего не знаю. Единственное к чему я придерживаюсь, это не оставлять переменные которые не имеют значения! Больше я нечего не знаю в плане безопасности( Да и чтобы изучать нужен какой нить стимул и проверка в реальных условиях, пока несчем подобным не сталкивался!
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана
Rost93 вне форума Ответить с цитированием
Старый 22.09.2011, 16:00   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Безопасность PHP скриптов
Экранирование запросов, SQL-injection

Не нужно ждать, пока это произойдет - нужно заранее исключить такую возможность...
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34