Что делать, если...

Dam

Guest
Что делать, если...

Что делать, если я нашёл способ передачи данных из JS в PHP для подготовки запроса к таблице MySQL путём простого перебора всех возможных вариантов, но возникла другая проблема - хотя запрос и обрабатывается правильно, но ...
лучше я приведу текст проги

function expanded(num) {
<? for ($i = 0; $i <= 79; $i++): ?>
if (num == <?=$i?>) {
<? $query = sprintf("SELECT * FROM otrasl_2 WHERE ID_1_LEVEL=\"%s\"", $i);
$result = mysql_query($query);
while ($row = mysql_fetch_row($result)): ?>
document.write(<? echo $row[2]?> "<BR>");
<? endwhile; ?>
}
<? endfor; ?>
}

otrasl_2 - таблица из 3 полей,
$row[0], $row[1] - это IDки,
$row[2] - это текст (только он мне нужен из таблицы)

Эта функция работает только тогда, когда JS выводит IDки, т.е. если вместо строчки

document.write(<? echo $row[2]?> "<BR>");

вставить

document.write(<? echo $row[0]?> "<BR>"); или
document.write(<? echo $row[1]?> "<BR>");

всё работает.
Если же написать для выдачи текста

document.write(<? echo $row[2]?> "<BR>");

то выдаётся ошибка JS "Ошибка в 3000-какой-то строке (хотя их у меня всего 150)". Т.е. наименование не передаётся. Почему?
 

Demiurg

Guest
В первых посмотри, что у тебя получается за яваскрипт. А во-вторых зачем использовать document.write ?
 

Alex2003

Новичок
Читать правила.
Ошибку целиком.
ИМХО в тексте, который ты рисуешь есть спецсимволы, интерпретируемые JS.

[offtop]
А вообще - такого решения мне даже с похмелья не могло прийти в голову...
[/offtop]
 

Alkinoy

Guest
А что делает строчка
<? $query = sprintf("SELECT * FROM otrasl_2 WHERE ID_1_LEVEL=\"%s\"", $i);
нафига там sprintf?
А строк 3000 - это наверное по тому, что у тебя if рисует весь цикл while для всех 80 значений.
 

Alex2003

Новичок
Ну посмотри страничку как текст( в блокноте) и увидишь - какие!!
 

Barlone

Guest
Тебе же сказали посмотри какой JS у тебя получился - сделай в браузере "view source"
 

Dam

Guest
Если вкратце, то я создал приложение для работы с БД типа "тревью", но чтоб не пересылать все данные юзеру,
часть данных (большую) оставил на сервере.
Т.е. некоторые ссылки работают на юзерской машине, а некоторые обращаются к серверу.
 

Demiurg

Guest
Dam, мы рады, что ты сделал такую систему, поздравляем!
 

Dam

Guest
Хорош прикалываться, 2 дня потратил на поиск ошибки.
Кстати, действительно что-то не то выходит в "view source",
я как то не додумался там посмотреть.

Может ещё децл поможете по той же проблеме

function expanded(num) {
<? for ($i = 0; $i <= 79; $i++): ?>
if (num == <?=$i?> ) { <?$g=$i;?>}
<? endfor; ?>
document.write(<?=$g;?>);
}

Почему у меня здесь выдаётся $g=79, а если сделать так:

function expanded(num) {
<? for ($i = 0; $i <= 79; $i++): ?>
if (num == <?=$i?> )
{ <?$g=$i;?> document.write(<?=$g;?>); }
<? endfor; ?>
}

То ответ выдаётся правильный.
 

Crazy

Developer
Dam, твоя проблема в том, что ты путаешь, что у тебя выполняется на сервере, а что -- на клиенте.

Кстати, странно, что view source полученной страницы тебе не помогло в решении этой проблемы.
 

Alex2003

Новичок
Crazy Прав. Смотри - какой JS у тебя получается и на сколько он соответствует твоим требованиям.


ЗЫ
то-есть ты отсылаешь клиенту 100-150 К JS, который ему может никогда не понадобиться? Ведь он может не ткнуть в эти линьки? Забавная забота о пользователях :)
 

Crazy

Developer
BTW, я не раз замечал, что мало кто знает, что скрипт на JS может генерить другой скрипт, который, в свою очередь, также будет исполнен. :)

PHP:
<script>
document.write('<'+'script>');
document.write('function expanded(num) {\n');
for (i = 0; i <= 79; i++) {
  document.write('if (num == '+i+') document.write("'+i+'");\n');
} 
document.write('}</'+'script>');
</script>

<script>
expanded(10);
</script>
 

Alkinoy

Guest
А зачем выносить if в скрипт, если все это можно на серваке сделать в РНР? И вообще, лучше если ты напишешь не "вот как я сделал и не получилось", а что ты собственно хочешь? А потом уже твои варианты достижения ЭТОГО.
 

RU$LAN

Guest
Автор оригинала: Alkinoy
А зачем выносить if в скрипт, если все это можно на серваке сделать в РНР? И вообще, лучше если ты напишешь не "вот как я сделал и не получилось", а что ты собственно хочешь? А потом уже твои варианты достижения ЭТОГО.
100% поддерживаю..
 

Dam

Guest
CRAZY, "View sorce" мне показал, где ошибка, но проблема так и не решилась.
Я хотел передать переменную из JS в PHP для запроса к MySQL.
Как это сделать?
 

Crazy

Developer
Поскольку лично я вообще не вижу никакой связи между тем кодом, что ты привел, и текстом этого письма, то советую: осмысли, что ты хотел сделать, и изложи это связно.
 

Dam

Guest
Хорошо, Crazy, забудь тот код и подскажи лучше возможна ли всё-таки передача переменной num из JS каким-либо способом в запрос MySQL:

SELECT * FROM otrasl_2 WHERE ID_1_LEVEL=\"%s\"", $www

в качестве переменной $www.
Заранее спасибо.
 

Crazy

Developer
Естественно, возможна. Для начала осознай, что JS и PHP выполняются в РАЗНОЕ время на РАЗНЫХ компьютерах и определись, каким способом ты хочешь ОТПРАВИТЬ HTTP-ЗАПРОС из JS к PHP-скрипту.
 
Сверху