|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.07.2008, 14:05 | #1 |
Пользователь
Регистрация: 20.10.2007
Сообщений: 29
|
Взаимодействие между переменными в JavaScript и РНР
Доброе время суток!
Недавно вновь взялся за изучение JavaScript, так что я можно сказать новичек, но основы ООП, Си++, РНР мне известны. Сейчас начал переделывать сайт из html в РНР и MySQL, но понял, что без JavaScript не обойтись. Суть задачи: У меня есть меню на сайте, которое формируется при помощи РНР и MySQL. Так же я сделал страницу, которая редактирует это меню, в частности меняет строки местами. По началу я сделал так: при нажатии кнопки "вверх" на определённой строке, то строка меняется местами с верхней, но механизм слишком медленный, т.к. изменения сначала заносятся в базу, а потом вытаскиваются оттуда и отображаются. Это конечно не практично и я хочу использовать JavaScript, который будет менять локально строки местами, а конечные изменения будут зафиксированы в БД нажатием кнопки "Сохранить" уже с использованием РНР. В РНР я использовал массивы, т.к. количество пунктов меню может меняться и у меня не было проблем с именами элементов, например <INPUT type='text' name='content[]' value='".$content[$i]."'> или почти тоже самое <INPUT type='text' name='content[".$i."]' value='".$content[$i]."'>, где каждому текстовому полю соответствовала своя переменная content[0], content[1],..., и т.д. при попытке применить тоже самое к javascript: <INPUT type='text' id='content[".$i."]' name='content[".$i."]' value='".$content[$i]."'>, у меня выскакивает ошибка. Оказывается, что content[х]=undefined. Не буду описывать, что я пробовал, но результата я не добился и понял что имена элементов в JavaScript не могут быть массивами. Это так? И как правильно осуществить взаимодействие между переменными в JavaScript и РНР? |
04.07.2008, 15:12 | #2 |
Laravel/Vue expert
Старожил Подтвердите свой е-майл
Регистрация: 08.08.2007
Сообщений: 2,832
|
Взаимодействия как такого - нет из-за среды "обидания" скриптом - одни выполняются на серверной стороне, а другие - на клиентской. МОжно передать посредством РНР в джаваскриптовый код приблизительно так:
Код:
Код:
|
04.07.2008, 15:47 | #3 |
Пользователь
Регистрация: 20.10.2007
Сообщений: 29
|
Мне бы наоборот из JavaScript в PHP перенести данные.
В PHP создаётся страница с таблицой в ячейках которой находятся текстовые поля (<INPUT type='text' name='content[]' value='".$content[$i]."'>) с данными из MySQL, которые надо поменять и в конце концов сохранить. Менять данные, в частности менять местами строки, хочется локально, не обращаясь к серверу (т.е. не использовать PHP) и только сохранить данные в MySQL при помощи PHP. Чтобы поменять данные я буду использовать JavaScript и разультаты мне надо передать в PHP. Вот в чём вопрос. И основная загвоздка в том, что количество строк в таблице (меню) может меняться, значит и количество текстовых полей будет меняться, а мне надо обратиться к тому или иному полю из JavaScript и поменять его значение. Для этого отлично подходят массивы: echo "<INPUT type='text' id='content[".$i."]' value='".$content_123[$i]."'>", но в этом случае я не могу изменить значение текстового поля из JavaScript обращением content[3]=(чего-то там), могу только в этом случае: echo "<INPUT type='text' id='content".$i."' value='".$content_123[$i]."'>", обращением content3=(чего-то там), но это уже будет не массив и работать не удобно. Последний раз редактировалось Timpi; 04.07.2008 в 16:56. |
04.07.2008, 18:16 | #4 |
Laravel/Vue expert
Старожил Подтвердите свой е-майл
Регистрация: 08.08.2007
Сообщений: 2,832
|
Я уже сказал выше, как передать данные - или полным запросом с перехродом, или аджаксом, что не требует перезагрузки страницы.
|
04.07.2008, 21:13 | #5 |
Форумчанин
Регистрация: 20.06.2007
Сообщений: 144
|
Точно не знаю, будет ли это работать, не пробовал сам. Но возможно есть такой вариант:
Создаешь форму Код:
А вот при передвижении пункта меню menu_item0 вниз через javascript меняем местами значения соответствующих пунктов меню в соответствующих input: Код:
|
05.07.2008, 14:00 | #6 |
Пользователь
Регистрация: 20.10.2007
Сообщений: 29
|
SkyM@n, что такое аджакс? И не совсем понял про переход.
Что делает этот код: Код:
Romanbl4, я обдумывал этот вариант. А если я буду менять местами не самые верхние, а 2-ю и 3-ю строки местами, то мне надо написать функцию в 3 строки, но с другими цифрами? А если у меня 15 пунктов в меню, то мне надо сделать 14 функций? :-) А если я подобное захочу применить, скажем, к товарам из 200 пунктов? многовато..... :-( В ближайшем будующем я так и хочу сделать. Опять поясню почему я хочу сделать обработку локально. Вы пробовали в беспорядочном меню навести порядок нажатием кнопок "вверх" ("вниз" я посчитал, что не надо делать) напротив пунктов, при этом каждое нажатие сохраняет данные на удалённом сервере, загружает их обратно и опять отображает? Думаю и не такое бывало у вас. Это можно сравнить с работой на Пне-133, в то время когда работаешь на двухядерном 2200. Мне надо, чтобы как можно более проще было обращаться тем или иным текстовым полям из JS и чтобы потом эти изменённые данные можно было передать в PHP. Возможно ли сделать в элементе в виде id=массив[номер] (или что-нибудь подобное, примеры писал выше) ? Если этот вариант возможен, то я думаю, что задачу решу, если нет, то как сделать по другому? Вариант предложеный Romanbl4 мне нравится, но не нравится количество функций которые придётся составлять (хоть это и будет делать автоматически PHP), это сильно увеличит трафик и будет просто мусором! Хотя функции все однотипные! Не хватает у меня ещё знаний в JS, чтобы осуществить предложеный вариант и использовать при этом только 1 функцию. Подскажите. Последний раз редактировалось Timpi; 05.07.2008 в 14:05. |
05.07.2008, 21:13 | #7 |
Antimoderаtoris
Участник клуба
Регистрация: 08.02.2008
Сообщений: 1,251
|
Господа не слышали про рекурсию? Господа где вообще изучали программирование? Господа не знают теории алгоритмов?
Мне честно сейчас некогда за вас писать код, но я напишу как это осуществляется. - создаётся массив, где ключ каждого элемента = ссылке на каждый пункт меню (это может быть цифра как часть id пункта меню или полный id) - каждому элементу массива при создании страницы посредством PHP присвается определённое целое число, обуславливающее порядок данного пункта в меню. - кнопки вверх-вниз-в начало-в конец, вызывают функцию, которой передаётся ключ в массиве и новое обозначение порядка данного элемента в меню. - функция в свою очередь вызывает себя столько раз, сколько нужно, дабы сдвинуть все остальные элементы куда нужно и "подготовить" новое место для передвинутого пункта. Фактически функция занимается тем, что изменяет циферки в массиве. В конце работы и при нажатии кнопки "Сохранить", данный массив сериализуется и отсылается серверу. Сервер (PHP) десериализирует данную строку снова в массив, и уже обрабатывая данные из массива вносит их в БД. Простейший скрипт сериализации и десериализации в PHP: PHP код:
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
|
05.07.2008, 22:53 | #8 | |
Пользователь
Регистрация: 16.12.2006
Сообщений: 82
|
Цитата:
Код:
Последний раз редактировалось komex; 05.07.2008 в 22:56. |
|
06.07.2008, 05:39 | #9 | |
Пользователь
Регистрация: 20.10.2007
Сообщений: 29
|
Цитата:
komex, твой вариант обращается к элементам как к массивам? У меня как раз с этим и проблема. Мне не удаётся сопоставить элемент массива с элементом формы. Посмотрю можно ли использовать document.forms[] или document.all Ещё раз: Вы все прекрасно рассказываете о массивах. Мне о них столько же известно (не в обиду будет сказано). О рекурсии мне тоже известно только не понятно в каком месте её применять. Вопрос в большей части по языку (или по связке 2-х языков). При помощи PHP делаю любую страницу. Если делаю PHP код:
PHP код:
Как заставить JS воспринимать обращения к элементу через массив? Например, чтобы alert(content[3].innerText) давало "5". Вот нерабочий пример, который легко можно сделать рабочим следуя коментариям в коде. PHP код:
P.S. * Господин Johnatan, вы внимательно прочитали топик? (итальянский). Я завёл этот топик не потому что у меня не получается написать программу или алгоритм обработки, а потому что у меня пробелы в знании языка JavaScript, которые не дают создать оптимальный алгоритм и по нему составить программу. |
|
06.07.2008, 12:50 | #10 |
Antimoderаtoris
Участник клуба
Регистрация: 08.02.2008
Сообщений: 1,251
|
Как насчёт уберать квадратные скобки? А в массив передавать ВСЕ имена полей? Я же написал...
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
взаимодействие с QIP | Toxa | Общие вопросы Delphi | 5 | 20.06.2008 19:39 |
Что то не так с переменными.. | adwaer | Помощь студентам | 1 | 19.06.2008 08:42 |
Работа с переменными в DLL | Zeraim | Общие вопросы Delphi | 3 | 14.05.2008 23:10 |
Взаимодействие форм | mauar | Общие вопросы Delphi | 7 | 05.05.2008 11:36 |
Взаимодействие с виндой и еще кое-что | Manitu | Помощь студентам | 5 | 25.03.2008 09:28 |