Гибрид PHP и JS срабатвает со 2-ой попытки

Статус
В этой теме нельзя размещать новые ответы.

kukuikar

Новичок
Связка из PHP и JS срабатвает со 2-ой попытки

Есть гибрид из PHP и JS.

Форму можно посмотреть здесь - http://shop.perepetsky.ru/order.php?action=put&item=69

Так вот при удалении пункта из заказа выполняется функция JS:


Код:

function delProduct(form_item)
{
document.getElementById(form_item).value = 0;
document.forms['order_form'].action.value = 'recalc';
document.getElementById('order_form').submit();
}



При значении параметра action="recalc" выполняется следующий PHP код:


Код:

PHP:
foreach($order as $id => $count)
        {
        if ($$id == 0)
            unset($order[$id]);
        else
            {
            if (is_numeric($$id))
                $count = ceil(abs($$id));
            else
                $count = 1;
            $order[$id] = $count;
            }
        }

Так вот при попытке что-либо удалить, первая попытка ничего не дает. Функция JS срабатывает, потому что я вижу, как в поле text появляется 0, а после перезагрузки страницы остается старое значение поля. При следующем нажатии все срабатывает как надо, т.е. удаляется сразу. Причем независимо от того сколько в заказе позиций. Вообщем вывихнул мозг.

Заранее спасибо.
 

Фанат

oncle terrible
Команда форума
не бывает "гибридов из PHP и JS".
есть пхп скрипты есть яваскрипт в браузере.
и все это работает по очереди.
вот запускай по очереди и смотри - что у тебя там в какой момент не срабатывает.
 

kukuikar

Новичок
2Фанат
Вот я в своем посте и написал что у меня не срабатывает
 

Фанат

oncle terrible
Команда форума
ты ничего не написал.
"у меня есть кусок кода он не работает" - это не описание проблемы.
а, главное, ЕДИНСТВЕННЫЙ ответ, который можно получить на этот вопрос - это "у тебя где-то в коде ошибка".

Никто не знает, как устроены внутри твои скрипты и как они друг с другом взаимодействуют.
поэтому просить, чтобы тебе показали, где у тебя в них ошибка - не самая лучшая идея.

-~{}~ 09.05.07 16:25:

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

почитай вот здесь: PHP FAQ: Ничего не работает! Что делать???
не столько с целью вычитать, где у тебя в скрипте ошибка, а в общефилософском.
попробуй просто посмотреть на свой вопрос со стороны, и понять, выглядит ли он как вопрос, на который могут ответить совершенно посторонние люди.
 

kukuikar

Новичок
хорошо. Тогда начнем.

Скрипт order.php (в нем и проблема)

начало
PHP:
//Считываем текущее время
$mtime = microtime();
//Разделяем секунды и миллисекунды
$mtime = explode(" ",$mtime);
//Составляем одно число из секунд и миллисекунд
$mtime = $mtime[1] + $mtime[0];
//Записываем стартовое время в переменную
$tstart = $mtime;
session_start();
далее идет всякая html-ная хрень, JS скрипты.
вот тот который нужен для исследования:

function delProduct(form_item)
{
document.getElementById(form_item).value = 0;
document.forms['order_form'].action.value = 'recalc';
document.getElementById('order_form').submit();
}

дальше определяем что у нас в переменной action из $_POST[]
PHP:
switch ($action)
{
case "recalc":
	foreach($order as $id => $count)
		{
		if ($$id == "0")
			unset($order[$id]);
		else
			$order[$id] = $$id;
		}
break;

case "put":
	//добавляем в заказ
break;
}
далее идет еще всякая html-ная хрень.

потом показываем заказ:

PHP:
if (count($order) > 0)
    {
    foreach ($order as $id => $count)
        {
         echo "<input id=\"$id\" type=\"text\" name=\"$id\" value=\"$count\" />";
         echo "<a href=\"$_SERVER['PHP_SELF']#\" onclick=\"delProduct('$id')\"><img src=\"b_drop.gif\"></a>";
        }
    echo "<input id=\"action\" type=\"hidden\" name=\"action\" value=\"sendorder\" />";
    }
далее при клике по ссылке "Удалить" выполняется JS функция delProduct('$id'), где $id это у меня идентификатор продукта плюс input type="text" с этим именем.

при выполнении этой функции значению поля с именем $id назначается 0, а значению input type="hidden" action назначается recalc (что значит пересчитать заказ) и document.getElementById('order_form').submit(); отправляет форму на сервер. Ее там подхватывает PHP и обрабатывает.
Функция JS срабатывает, потому что я успеваю увидеть, как в поле появляется 0, а после перезагрузки страницы остается старое значение поля. При следующем нажатии все срабатывает как надо, т.е. удаляется сразу.
 

Фанат

oncle terrible
Команда форума
Ё.
ты действительно считаешь, что оно так вот и исполняется, как ты здесь написал?
сначала кусочек пхп, потом кусочек явваскрипта, потом ещзё пхп, а потом какая-то хрень?

-~{}~ 09.05.07 19:42:

Вроде, нет.
Но зачем ты мне тогда рассказываешь о том, что происходит до загрузки страницы с формой?
почему такая дурацкая форма выбрана для описания происходящих процессов?
потому что у тебя так скрипт написан?
А думать не линейным скриптом, а ЗАПРОСАМИ, которые у тебя ходят от формы к серверу не хочешь попровать?

слушай, если ты с яваскриптом не можешь разобраться - сделал бы сначала без него, а?
ведь самому же будет проще?
 

Фанат

oncle terrible
Команда форума
Нет.

-~{}~ 09.05.07 19:50:

Делай без яваскрипта

-~{}~ 09.05.07 19:58:

вообще, тебе надо пересмотреть свой подход к отладке программ.
утверждение
Функция JS срабатывает, потому что я вижу, как в поле text появляется 0
не выдерживает никакой критики.
если в поле текст появляется ноль, то это значит толко, что в поле текст появляется ноль.
а тебе надо проверить даже не то - сработала ли функция, а, был ли вызван пхп с нужными параметрами!

проверить, был ли вызван пхп скрипт с нужными параметрами, можно толко ВЫВЕДЯ эти параметры на экран.
и если они ненужные, значит разбираться с яваскриптом.
а если все правильно - то разбираться с функцией которая удаляет.
чтобы она ВЫВЕЛА НА ЭКРАН все что удалила.
если с ней все правильно, то разбирася дальше с функцией, которая рисует тебе твои данные - все ли она правильно выводит

ферштеен?
 

Фанат

oncle terrible
Команда форума
пожалуйста, заходите ещё.

никто не запрещает делать тебе с джс (хотя утверждение про "надо" - очень спорное. Один клиент тоже кричал, что ему надо. Сделать кастрацию. А потом выяснилось, что на самом деле ему нужно было обрезание.)

пожжалуйста - хочешь - делай с жс.
НО. Если ты не умеешь работать с яваскриптом - сделай сначала БЕЗ него. И разберись с функционированием своей программы.
после того, как она заработает - можешь привешивать на неё примочки из яваскрипта.
Но я бы на твоем сесте этого делать не стал. Не умеешь - не берись.

А делать так, как ты сделал сейчас - "вот я наваял 20 килобайт кода, в которо сам ничего понять не могу - исправьте мне его" - так дело не пойдет.
 

kukuikar

Новичок
Да не прошу я ничего мне исправить. Не прошу ничего мне написать или чего-то за меня сделать.
А код я свой писал сам и знаю как и что там работает. Что за чем идет.

И ничего я не умею, дуб дубом... потому сюда и пришел, думаю а вдруг мне добрый дядя увидев мой вопрос скажет, а давай я тебе напишу все заново да еще и бесплатно......
 

Фанат

oncle terrible
Команда форума
Вот и учись. Отладка - это основная работа программиста.
и знаю как и что там работает. Что за чем идет.
Вот и прекрасно.
осталось только на каждом этапе проконтролировать.

-~{}~ 09.05.07 20:21:

у тебя в сессию ведь записывается что-то?
и отображается - из сессии?
ты хоть проверил - записывается?

это я тебе должен об этом говорить?
 

kukuikar

Новичок
у тебя в сессию ведь записывается что-то?
да в сессию записывается что-то.
и отображается - из сессии?
да отображается.
ты хоть проверил - записывается?
проверил уже давно - записывается.
это я тебе должен об этом говорить?
нет, Вы мне об этом не должны говорить.



Я что просил отладить программу?
 

Фанат

oncle terrible
Команда форума
Я вижу, у тебя совсем настроение испортилось.
Пойди, отдохни.
Если у тебя ещё останутся вопросы - приходи завтра.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху