[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему такое происходит, с первого раза - ошибка!!
inpost
Вообщем, написал скрипт на 250 строк, доволен как слон, запустил...
Начало скрипта:
while($myrow = mysql_fetch_assoc($result))

Сервер обработал правильно, в итоге результат введет отлично. Переходит ко второму значению и на... Ошибка именно в той строке (пишет что-то про while). Обычно такую ошибку пишет, когда в таблице 0 данных, и нечему обрабатываться!!!
Выборка идет такая:
$result = mysql_query("SELECT * FROM bm_m_stavka WHERE active='1'",$db);

Тоесть в таблице на тот момент было 2 значения с active='1', после первого запуска - одно сообщение стало актив=0 (по скрипту), на втором возникла ошибка...

Я в шоке, как это бывает, вмыкаю пол минуты в надпись, жму F5, страница обновилась - снова ошибка эта же... я в недоумевании жму СНОВА F5 - скрипт пошел дальше и наконец ОБНОВИЛ ВТОРОЕ ЗНАЧЕНИЕ! И НИКАКИХ ОШИБОК!!!

ПРОШУ помощи советом, почему произошла ошибка, и почему после Третьей перезагрузки страницы - ошибка пропала и скрипт пошел дальше???
Может ли это быть какая-то блокировка на длинные скрипты??? Добавлю лишь, что внутри этого while идет обращение от 3-х до 7-и раз к базе данных через SELECT, UPDATE (на каждом круге)!!! При этом посещаемость этого сайта - 40 человек в сутки, и база, вроде, не перегружена, так как сайт открывается нормально!



Спустя 1 час, 25 минут, 54 секунды (27.02.2010 - 19:05) vasa_c написал(а):
Сообщение об ошибке стоило бы десяти страниц подобной писанины.

Спустя 8 минут, 41 секунда (27.02.2010 - 19:14) inpost написал(а):
vasa_c
Просто гениальный ответ, ты реально помог... Если не знаешь ответа, почему бы просто не промолчать?

Специально для тебя опишу проблему в двух строках:
Запустил страницу - ошибка, перезагрузил страницу - ошибка, перезагрузил страницу - скрипт заработал! По какой причине скрипт заработал с третьего раза? Вот код ошибки:


 ! 
[mod][/mod]sergeiss
Дальше было пустое пространство... На котором появился камент: впредь за такие ответы юзер попадет "в баню", минимум на сутки.

Спустя 1 минута, 50 секунд (27.02.2010 - 19:16) twin написал(а):
Текст ошибки в студию. Иначе ответа боюсь не знает не только vasa_c но и никто в мире. Вольф Мессинг скончался к прискорбию.

Спустя 1 час, 58 минут, 56 секунд (27.02.2010 - 21:15) inpost написал(а):
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/afbdpua/public_html/admin/bm_express_update.php on line 49

Попробовал снова, первый раз обновляется строка, вторая не обновляется, пишет ошибку! Второй раз загружаю - пишется эта же ошибка СНОВА!!! Третий раз обновляю - происходит сценарий...


48. $result = mysql_query("SELECT * FROM bm_m_stavka WHERE active='1'",$db);
49. while($myrow = mysql_fetch_assoc($result))
50. { // НАЧАЛО WHILE


Спустя 28 минут, 58 секунд (27.02.2010 - 21:44) inpost написал(а):
Все-таки я немного не так сказал.
Первый раз загружаю - обновляется первая строка, после пишется ошибка.
Перезагружаю страницу - обновляется следующая строка, после пишется ошибка!
Перезагружаю - отсутствуют строки - поэтому ошибки нету!!!

Как-будто проблема в цикле, но я ума не приложу, где может быть она, ведь скрипт начинает работу...

Может ли быть проблема в том, что внутри цикла WHILE обновляется таблица, из которой делается цикл? ВОТ:

$result = mysql_query("SELECT * FROM bm_m_stavka WHERE active='1'",$db);
while ($myrow = mysql_fetch_assoc($result)) { // НАЧАЛО WHILE
$result = mysql_query("UPDATE `bm_m_stavka` SET active='0',status='<span class=green>+".$vigrash."</span>' WHERE id='".$myrow['id']."'",$db);
} // КОНЕЦ WHILE

Спустя 53 минуты, 6 секунд (27.02.2010 - 22:37) sergeiss написал(а):
Я фигею с тебя... Для начала понаписал кучу слов, "послал" двух знающих людей... А сам хрень пишешь (в коде)! smile.gif Был бы поскромнее, то раньше бы тебе подсказали. Те люди, коих ты обидел. "Запросто так", потому что решил (с какого-то перепуКа), что можешь хамить. В следующий раз за ответ типа
Цитата (inpost @ 27.02.2010 - 20:14)
Если не знаешь ответа, почему бы просто не промолчать?

в ответ на
Цитата (vasa_c @ 27.02.2010 - 20:05)
Сообщение об ошибке стоило бы десяти страниц подобной писанины.


получишь бан. Сразу же, без разговоров.

По теме.
Естественно, у тебя ошибка будет. Потому что ты используешь переменную $result в 2-х разных местах. И, несмотря на то, что это изначально это указатель на ресурс, где содержатся выбранные данные, ты "ничтоже сумняшеся" используешь эту же переменную для записи результата апдейта.

Приходишь на начало цикла... И получаешь ошибку! Потому что в $result записано уже другое.
Так что замени (второй!!!) $result (используемый для апдейта) на $result2, $result10, $result_update или что-то другое. И ошибка уйдет. Если ты, конечно, не сделал еще других ляпов.

Спустя 23 минуты, 31 секунда (27.02.2010 - 23:00) inpost написал(а):
Я действительно не хотел обидеть Васа_с, просто ответ был ни о чем, почему бы просто не сказать, что твой вопрос не полный или чего-то не хватает! Ты считаешь, что после слов :"Сообщение об ошибке стоило бы десяти страниц подобной писанины. " я понял, что он имел ввиду, что я не показал главного? Если человек не хочет помогать, или считает себя выше или умнее - может просто промолчать, а не высказать негатив в такой форме.

Уважаемый Васа_с, извиняюсь, я не хотел Вас обидетЬ!

Двух знающих... покажи мне второго, перед кем мне надо извиниться за хамское поведение, если сможешь, конечно... зачем наговаривать, я не понимаю...

За ответ большое спасибо.
И вообще, моей скромности нет предела =(, я пишу в разделе для НОВИЧКОВ, я стараюсь пересказать всю проблему полностью. Я провозился по неопытности с ней пол дня. Днём, когда я с ней сталкнулся, написал один комментарий. Ближе к концу дня, заметил новые подробности, и написал их, которые и помогли решить в итоге проблему.

Спустя 14 минут, 16 секунд (27.02.2010 - 23:15) sergeiss написал(а):
Цитата (inpost @ 28.02.2010 - 00:00)
может просто промолчать, а не высказать негатив в такой форме

Это ты оценил как негатив. Не более того. В данном контексте высказывание vasa_c "Сообщение об ошибке стоило бы десяти страниц подобной писанины" является очень даже корректным.

Цитата (inpost @ 28.02.2010 - 00:00)
Двух знающих... покажи мне второго, перед кем мне надо извиниться за хамское поведение, если сможешь, конечно...

Рассуждаем логически smile.gif vasa_c сказал, что надо увидеть текст ошибки; ты его послал. Следом то же самое (только другими словами) сказал twin. Логически рассуждая, ты и его тоже "послал". Потому что он тоже не сказал ничего, кроме запроса у тебя текста ошибки smile.gif Ну, и еще сказал, что "телепатов нету".
Так что второй - это twin.

А сколько людей прошли мимо темы, увидев такой неадекватный ответ???

Цитата (inpost @ 28.02.2010 - 00:00)
Ближе к концу дня, заметил новые подробности, и написал их...

Ты не первый день на форуме. И заметил уже, я думаю, что очень часто после вопроса звучит встречный вопрос "покажи код!" (подразумевая, что все-таки большую "портянку" не нужно). Как ты думаешь, из простого любопытства спрашивают, или хотят украсть чей-то код? smile.gif

Спустя 2 минуты, 28 секунд (27.02.2010 - 23:17) sergeiss написал(а):
PS. А вообще - делать апдейт таким способом (внутри цикла), я думаю, не самое лучшее решение. Лучше сделать его одним запросом.
Опиши задачу, и подумаем вместе, как это сделать.

Спустя 3 часа, 1 минута, 24 секунды (28.02.2010 - 02:19) inpost написал(а):
sergeiss
Не серчай! Буду стараться быть добрее! =)

Я делаю букмекерскую контору (футбольную) на виртуальные деньги. Существует такое понятие, как Экспресс, где человек делает на определенное количество событий (2-3) ставки, и если все ставки выгрывают - получает огромную прибыль, если одна из них проиграла - проигрыш по ставке. Этот скрипт будет проверять все экспресс ставки 'bm_m_stavka' которые не сыграны (active='1'), после проверять результаты по этой ставке, и если все 2-3 матча сыграны - писать результат (победа или проигрыш), в конце цикла эта ставка становится неактивной (active='0') (первый апдейт), обновляться деньги пользователя (второй апдейт), который поставил эту ставку, и переходить на следующую ставку в цикле.
Сам скрипт можно будет запускать как вручную, так и раз в сутки автоматически.

А чем плохо делать апдейт внутри цикла? Или не мог бы ты подсказать другой способ, кроме как делать апдейт внутри цикла, если ты считаешь, что в данной ситуации был бы более рациональным другой способ. Зарание спасибо

Свернутый текст
завтра покажу скрипт =)

Спустя 4 часа, 37 минут, 5 секунд (28.02.2010 - 06:56) twin написал(а):
Чесно говоря ничего не понял ни про ставки, ни про футбол. Но то, что у тебя сверху, должно выглядеть примерно так:
    $result = mysql_query("SELECT `id` FROM `bm_m_stavka` 
WHERE `active` = '1'"
, $db);

while ($myrow = mysql_fetch_assoc($result))
$id[] = $myrow['id'];

if(count($id))
mysql_query("UPDATE `bm_m_stavka`
SET `active` = '0',
`status` = '<span class=green> + "
. $vigrash ."</span>'
WHERE `id` IN ("
. implode(', ', $id) .")", $db);


PS sergeiss, не, я не обижался. Но информации на самом деле не было никакой, хотя букаф было очень много.

Спустя 7 часов, 29 минут, 7 секунд (28.02.2010 - 14:25) inpost написал(а):
Я господина Твина не обижал, он всё доступно мне сказал, поэтому я попытался добавить...

Твин: Спасибо за такой код, но все же, чем же плох апдейт в цикле? В цикле происходит одно действие: апдейт. В твоём варианте, Твин, происходит сначала сохранение массива, а только после добавление апдейта, и это уже 2 действия, вроде как нагрузка будет больше, или нет?

Спустя 3 часа, 23 минуты, 21 секунда (28.02.2010 - 17:48) twin написал(а):
Ну чтоб было нагляднее, представь себе, что ты - это php, а форум - mysql.
Что лучше, написать одно слово, нажать кнопку - отправить. Дождаться результата, открыть топик в режиме редактирования, написать второе слово, отправить. И так далее, в цикле.
Или сразу написать весь топик и один раз отправить.

Примерно так же взаимодействуют PHP и MySQL.
Делай выводы.


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

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