Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подсказка для формы ввода

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Подскажите, почему так странно работает скрипт?
Roman4uk
Отправлено: 07 Июня, 2010 - 20:24:21
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




При создании сайта наткнулся на одну задачку. Хотелось при каждом обновлении рядом с формой для поиска появлялась бы подсказка (как у Яндекса). Создал текстовый файл test.txt (в данном примере с 4-мя строками: яблоко, груша, банан, апельсин). На странице разместил следующий код:

PHP:
скопировать код в буфер обмена
  1. <form name='form1' method='post' action=''>
  2. <input type="text" size=15 style="font-size:16px" name='text1' value=''>
  3. <input type="submit" name=go value=Go style="font-size:16px">
  4. <?PHP
  5. $file_array = file("test.txt");
  6.   $count=count($file_array);
  7.   $count--;
  8.   $rand=rand(0, $count);
  9.  ?>
  10. <br>Например:
  11. <a href=# onclick="document.form1.text1.value='<?=$file_array[$rand]?>'"><?=$file_array[$rand];?></a>
  12. </form>


Странность заключается в том, что случайная запись выводится, но в поле формы значение меняется ТОЛЬКО в том случае, если рандомится последняя строка из файла (в данном примере апельин). Та же петрушка и при использовании базы MySQL. В чем ошибка? Подскадите, пожалуйста!!!


Отредактировано модератором: JustUserR, 08 Июня, 2010 - 13:55:07
Обрамил PHP-код в соответствующий BB-тег
 
 Top
valenok Модератор
Отправлено: 07 Июня, 2010 - 20:55:30
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Посмотри исходники страницы когда из файлы выбирается не апельсин.
Если в них нет ничего подозрительного, можешь их приложить сюда.
(Ту часть со ссылкой, в том виде, в котором она находится в html)


-----
Truly yours, Sasha.
 
My status
 Top
Roman4uk
Отправлено: 07 Июня, 2010 - 21:05:44
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




функция onclick прекрасно работает, если параметром value передать строковую константу или любую другую объявленную через PHP переменную. Не понятно, почему, она работает только в случае последней строки (последнего элемента массива).
При использовании MySQL-способа, когда рандомится id записи, то опять же значение формы меняется ТОЛЬКО, если случайно выбрана крайняя (с бОльшим id) запись.
Я уже мозг сломал над простой (как мне казалось) задачей. Может это баг?
Хотя функции массивов в PHP и элементарные JS-функции уже много лет работают без ошибок.
(Добавление)
А ведь точно!
Если выбрана любая НЕ КОНЕЧНАЯ запись то код выглядит так:

<a href.... onclic=............'груша
'>? то есть с переводом каретки на новую строку, а при ПОСЛЕДНЕЙ записи возвращается нормальный код, т.к. нет в ней символа "/n".
Спасибо за направление мысли!!!!
А как избавиться от проблемы с переводом строки (каретки) при выборе НЕпоследней строки???
Плиз, поможите!
 
 Top
valenok Модератор
Отправлено: 07 Июня, 2010 - 21:24:57
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




trim
Странно правда. file() делит строки на элементы массивы автоматически обрезая символы перевода строки. Откуда перевод строки вообще появляется в БД я не догадываюсь.


-----
Truly yours, Sasha.
 
My status
 Top
Roman4uk
Отправлено: 07 Июня, 2010 - 21:27:56
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Ведь сама рандомная строка выводится без ощибок!!!
Проблема только в функции onclick
(Добавление)
Я уверн, вы профи в PHP-кодинге! Можно как-то иным способом оформить затею с подсказкой для поля ввода?
 
 Top
valenok Модератор
Отправлено: 07 Июня, 2010 - 22:23:18
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Скопируй сюда получающийся html при разных подсказках и содержимое файла .


-----
Truly yours, Sasha.
 
My status
 Top
Roman4uk
Отправлено: 07 Июня, 2010 - 22:32:44
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Вот файл test.txt:
яблоко
груша
банан
апельсин

Если выбрано банан:
<form name='form1' method='post' action=''>
<input type="text" size=15 style="font-size:16px" name='text1' value=''>
<input type="submit" name=go value=Go style="font-size:16px">
<br>Например:
<a href=# onclick="document.form1.text1.value='банан
'">банан
</a>
</form>

Если выбран апельсин (последний в файле):
<form name='form1' method='post' action=''>
<input type="text" size=15 style="font-size:16px" name='text1' value=''>
<input type="submit" name=go value=Go style="font-size:16px">
<br>Например:
<a href=# onclick="document.form1.text1.value='апельсин'">апельсин</a>
</form>
 
 Top
JustUserR
Отправлено: 08 Июня, 2010 - 14:03:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Roman4uk Получившаяся в вашем случае ошибка еще раз говорит о том что в on_event* аттрибутах не стоит указыть достаточно большой JS-код со вложенными кавычками и тем более подстановочными значениями - поскольку такой аттрибут является частью html-кода и сразу подвеграется ограничением по синтаксисву и экранированию как со стороны html-парсера так и со стороны JS-интерпретатора
Конкретно в вашем случае решение простое - а именно добавить переменную $rnd_text=preg_replace('/(\r?\n)+/igs','',$file_array[$rand]) и выводить в onclick именно ее саму - и желательно произвести ее экранирование с помощью addslashes и замену всех двойных кавычек на одиночные


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Roman4uk
Отправлено: 08 Июня, 2010 - 17:46:37
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Переделал код на выборку из SQL-базы, добавил функцию trim, и все заработало!
Спасибо вам.
 
 Top
JustUserR
Отправлено: 09 Июня, 2010 - 10:40:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Roman4uk пишет:
Переделал код на выборку из SQL-базы, добавил функцию trim, и все заработало!
В принципе при использовании текстовой базы данных из файла тоже несложно убрать лишние символы перевода стороки - например с помощью регулярных выражений или функции str_replace Однако при хранении данных в текстовой БД стоит проводить их предварительное шифрование для того чтобы символы в самих данных не могли смешаться с разделительными спецсимволами - и таким образом при обратном разделении данных и дешифровке вы не получите никаких лишних символов которые придется потом убирать


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB