Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как можно имитировать GET ?
 
 автор: Qiao   (13.09.2007 в 06:33)   письмо автору
 
 

Делаю словарь он-лайн. Всё примитивно - пользователь вводит слово, далее го и получает перевод. Данные отсылаются методом POST, использовать GET нельзя, так как в урл у многих вместо слова будет бяка.

Но очень хочется, чтобы у каждого слова был свой урл. Т.е. имел вид slovar.php?id=xxх . В базе данных у всех слов есть свои id.

Скажите, пожалуйста, можно ли это как-то реализовать?

   
 
 автор: sim5   (13.09.2007 в 07:02)   письмо автору
 
   для: Qiao   (13.09.2007 в 06:33)
 

Что-то вы не то говорите. Что пользователю нужно - знать id слова или само слово? Ищите слово в базе, а не его id, а как передать слово, тут разницы ни какой нет.

   
 
 автор: Qiao   (13.09.2007 в 07:14)   письмо автору
 
   для: sim5   (13.09.2007 в 07:02)
 

Нужно чтобы у каждого слова был свой урл. То есть вбил что-то типа slovar.php?id=555 и получил слово у которого это id. Реализовать это легко. Вопрос в том как сделать так, чтобы этот урл высвечивался, когда пользователь вводит слово через форму (которая использует POST).

   
 
 автор: sim5   (13.09.2007 в 07:42)   письмо автору
 
   для: Qiao   (13.09.2007 в 07:14)
 

Как вы можете знать, какое слово будет вводить пользователь? Если в вашем словаре 30000 слов, то думаю даже из это вы не угадаете. Зачем пользователю ваш ID, его он вообще не интересует. И почему вы решили, что в случае передачи методом GET вы получите "бяку"?
Проверьте:

<form>
<input type="text" name="word">
<input type="submit" value="GO">
</form> 
<?
if (isset($_GET['word'])) echo $_GET['word'];
?>

PS. ID могут быть полезны - если вы предоставляете пользователю весь список слов вашего словаря. Тогда да, выбрав, например, из списка SELECT слово, пользователь передаст вам его ID, вот тогда используйте его.

   
 
 автор: Qiao   (13.09.2007 в 07:58)   письмо автору
 
   для: sim5   (13.09.2007 в 07:42)
 

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

Пользователю нужен не id, ему нужна ссылка на слово. (это лучше чем довать ссылку на форму и приписывать "посмотри слово ххх"). Словарь будет интерактивным (с возможностью правки и добавления слов), поэтому это желательно.

Если бы словарь был англо-..., то проблем бы с GET не было. А тут китайско-русский. Далеко не все браузеры и настройки переваривают китайские иероглифы в урл (проверено).

   
 
 автор: sim5   (13.09.2007 в 08:13)   письмо автору
 
   для: Qiao   (13.09.2007 в 07:58)
 

Ну так бы и сказали, что китайско-русский. Но, если китайско-русский, то сразу предупреждайте пользователя, что он должен установить поддержку китайского языка у себя на компьютере. У меня все установлено, китайский отображается. Есть сайты, где я могу получить перевод с русского на китайский.
Если вы говорите о форме, значит вы даете возможность ввода пользователю слова для перевода. Сразу оговорюсь - с русского на китайский, ибо даже при установленной поддержке, например, я не знаю как ввести иероглифы с клавиатуры (не спец). В этом случае ID пользователю не нужен, ведь он может ввести слово, которого у вас нет в словаре - он имеет на это право, согласитесь? Значит вы должны в этом случае искать русское слово в своей базе (и пусть оно передвается POST).
В тоже время, вы можете предоставить пользователю список слов вашего словаря, например, разбитого по тематике. Ну, например, на странице это так:

<html>
<head>
</head>
<body>
<p>Это форма для ввода слова</p>
<form method="post" action="main.php">
<input type="text" name="word">
<input type="submit" value="GO">
</form> 
<p>А это слова из словарика</p>
<select name="words">
<option value="15">Мама</option>
<option value="32">Папа</option>
<option value="11">Дети</option>
</select>
</body>
</html>

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

<a href=slovar.php?id=15>Мама</a> 

Я так себе представляю такое.

   
 
 автор: Loki   (13.09.2007 в 13:28)   письмо автору
 
   для: Qiao   (13.09.2007 в 07:58)
 

>. Далеко не все браузеры и настройки переваривают китайские иероглифы в урл (проверено).
имя, сестра!

http://www.google.co.jp/search?hl=ja&q=%E5%BA%83%E5%91%8A%E6%8E%B2%E8%BC%89&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=

   
 
 автор: Бамси   (13.09.2007 в 07:54)   письмо автору
 
   для: Qiao   (13.09.2007 в 06:33)
 

Я не очень понял вопроса, но попробуйте посомтреть функцию output_add_rewrite_var - http://ru2.php.net/manual/ru/function.output-add-rewrite-var.php. Позволяет переписывать URL.

   
 
 автор: ec_stasis   (13.09.2007 в 08:28)   письмо автору
 
   для: Qiao   (13.09.2007 в 06:33)
 


<?php

if (isset($_POST['word'])
{
    
//eto slovo
    
$word $_POST['word'];

    
//vibiraem id iz bazi
    
header("Location: {adres skripta}?id=$id;
}

if (isset(
$_GET['id']))
{
    //tut pokazivaem perevod
}
?>

   
 
 автор: Qiao   (13.09.2007 в 09:28)   письмо автору
 
   для: ec_stasis   (13.09.2007 в 08:28)
 

Да, скорее всего через location именно так и реализуется.
Я вначале тоже пытался использовать заголовок, но делал неправильно.


Словарь на более чем 200 тыс слов, так что выводить их список и классифицировать по тематике не получится..

Если я правильно понял функцию output_add_rewrite_var, то в моем случае она не подходит - id заранее неизвестно (хотя может через условия её и можно как-то приспособить).

   
 
 автор: sim5   (13.09.2007 в 09:36)   письмо автору
 
   для: Qiao   (13.09.2007 в 09:28)
 

>Всё примитивно - пользователь вводит слово, далее го и получает перевод.

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

   
 
 автор: Qiao   (13.09.2007 в 09:46)   письмо автору
 
   для: sim5   (13.09.2007 в 09:36)
 

А что будет если вы у БД запросите строку которой не существует? Ничего не будет! (т.е. вернётся пустая таблица)
И если делать цивилизованно, то пишем if(!$results) echo "Такого слова в словаре нет".

   
 
 автор: sim5   (13.09.2007 в 10:03)   письмо автору
 
   для: Qiao   (13.09.2007 в 09:46)
 

Это понятно. Я не об этом. Вы меня извините, но вы пытаетесь узнать - есть ли в коробке спички, не методом встряхивания коробка, а тряся головой рядом с коробком.
Вместо того, чтобы непосредственно обратиться к базе по известному слову, либо произвести поиск по нему, вы этому слову хотите присвоить его id, которого не знаете. Значит вам надо будет сперва найти это id (а как, опять таки поиском по искомому слову), потом уже вствить этот id в url, чтобы наконец-то найти слово в базе. Ну не бред ли это?
Мне не понятна логика вашей затеи. К чему вся эта кухня?

   
 
 автор: Qiao   (13.09.2007 в 10:38)   письмо автору
 
   для: sim5   (13.09.2007 в 10:03)
 

Мне нужно основное приемущество метода GET - возможность возврата к странице через адрессную строку путём копирования адресса.

В моём случае это требует жертв. Стоит ли овчинка выделки я узнаю при тестировании. Если запрос будет долгим, то придётся от затеи отказаться. Но я всё же надеюсь, что нагрузка ляжет на сервер (т.е. базу данных), а не на пользователей и разницу между 0.2 сек и 0.6 сек они не ощутят. (если сервак, конечно, тупить не будет часто, что изредка бывает).

Т.е. пока всё в эксерементальном варианте.

   
 
 автор: sim5   (13.09.2007 в 10:53)   письмо автору
 
   для: Qiao   (13.09.2007 в 10:38)
 

Возврата к какой странице и зачем? Если вы говорите о том, чтобы пользователь получил перевод просто запросом к базе, без перерезагрузки страницы, то используйте AJAX, можно и "имитацию" AJAX. Это гораздо лучше будет. Кстати вывод словаря (всего) можно организовать и по буквам алфавита (правда это только для русско-китайского, в обратном случае не знаю), а выводить можно блоками по N-слов. Это не проблема, и не будет зависить от количества слов в вашем словаре.

PS. Впрочем можно вообще без всякого AJAX, либо так (если у вас одна и таже станица делает запросы к базе, выводит перевод и форму)

<html>
<head>
</head>
<body>
<form method="post" action="main.php">
<input type="text" name="word">
<input type="submit" value="GO">
</form> 
<?php
if (isset($_POST['word'])) {
//запрашиваем слово в базе
if ($word) echo "Перевод слова";
else echo 
"Такого слова нет в словаре!"
}
?>
</body>
</html>

Считайте что это и будет возвратом в страницу. Либо

<?
header
('location: имя вашего скрипта?сколько хотите параметров и условий')
//и не обязательно свет клином сошелся на id, тем более неизвестных

   
 
 автор: Qiao   (13.09.2007 в 11:27)   письмо автору
 
   для: sim5   (13.09.2007 в 10:53)
 

Нужно чтобы каждому слову соответствовала отдельная вёб-страница (т.е. со своим адрессом). Не критически, но желательно. Это просто удобно. Например, вы нашли или добавили/исправили интересное слово и можете его адресс поместить себе в закладки или скинуть кому-нибудь. (в китайском отношение к словам немного другое чем в алфавитных языках)


POST и AJAX - все слова имеют одну и ту же страницу.

Словари-списки приемлимы только к маленьким по обьёмам или каким-то особым словарям. Совсем не мой случай - большой общий словарь.

>и не обязательно свет клином сошелся на id, тем более неизвестных
А что тут такого? Каждому слову соответсвует определённое число. А что кроме этого можно использовать?

   
 
 автор: sim5   (13.09.2007 в 11:49)   письмо автору
 
   для: Qiao   (13.09.2007 в 11:27)
 

Ну тогда совсем проблемы не вижу. Запросил у вас пользователь слово для перевода (через форму). Ищите это слово (не id) в базе. Если нет этого слова, возвращаете черех хидер (если требуется) на страницу ввода с добавлением сообщения о не найденном слове. При поиске слова в базе вам никто не мешает обратиться к полю содержащему его id. А далее, думаю, лучше куки установить и применить JS, а не нервировать перезагрузкой (а иначе как) пользователя.
PS. Время спустя. Всеравно это глупость - не будет пользователь сохранять у себя в избранном ссылки на ваши несколько сот слов. Не нужно этого ему. Достаточно ссылки на страницу с формой ввода для перевода.

   
 
 автор: kasmanaft   (13.09.2007 в 12:35)   письмо автору
 
   для: sim5   (13.09.2007 в 11:49)
 

> А далее, думаю, лучше куки установить и применить JS
Зачем куки? В смысле "применить JS" ?

> а не нервировать перезагрузкой пользователя.
Ну.. он её и не заметит.

   
 
 автор: sim5   (13.09.2007 в 12:40)   письмо автору
 
   для: kasmanaft   (13.09.2007 в 12:35)
 

Ну да, не заметит, как и ссылку для избранного. Не нужно этого наверное.

   
 
 автор: Qiao   (13.09.2007 в 12:48)   письмо автору
 
   для: sim5   (13.09.2007 в 11:49)
 

Реализовал использование заголовка:
http://www.qiaojiao.ru/bkrs/xinsheng/slovo.php
Результат противоричивый. Сначала жутко тормазило, а затем нормально пошло. То ли сервак грузанулся то ли у меня на сеть куча китайцев насела. Буду тестировать.

Вводите слово - в результате появляется значение и урл типа http://www.qiaojiao.ru/bkrs/xinsheng/slovo.php?id=133737 . Меняете там цифорки - выподают другие слова.

Специально для вас занёс два русских слова - "пхп" и "форум". А если у вас иероглифы отражаются, то можно их по одному копировать в форму (или просто цифорки менять).
Помоему вполне терпимо (я о скорости).

// просьба ничего не трогать - всё в тестовом варианте, ещё ядро недописал.

>не будет пользователь сохранять у себя в избранном ссылки на ваши несколько сот слов
Не несколько сот, а более 200 тыс. Между прочем самый большой китайско-русский словарь (БКРС). 4 года его оцифровывали.
Главное предназночение проекта - не словарь, а редактирование и пополнение словаря, с последующим периодическим преобразованием в Лингво. Поэтому меня интересуют не проблемы пользователей словаря, а тех нескольких человек, которые его будут редактировать. Под них всё и строится.

   
 
 автор: sim5   (13.09.2007 в 13:49)   письмо автору
 
   для: Qiao   (13.09.2007 в 12:48)
 

Тем более - 200000 ссылок у себя в избранном я уж точно сохранять не намерен :)

   
 
 автор: Poison   (13.09.2007 в 14:00)   письмо автору
 
   для: Qiao   (13.09.2007 в 12:48)
 

Я тоже что-то не очень понял, зачем такое извращение? может зделать просто slovo.php?word=пхп , в чем пролема? почему так вас не устраивает?

   
 
 автор: Qiao   (13.09.2007 в 16:07)   письмо автору
 
   для: Poison   (13.09.2007 в 14:00)
 

>Тем более - 200000 ссылок у себя в избранном я уж точно сохранять не намерен :)
Что-то вы меня совсем не так понимаете. Встретили слово, которое захотели запмнить - бросили в избранное или на стол (потом ещё в title это слово пропишу). Захотел на форуме что-то спросить - пишите "а почему вот так вот [урл]ссылка на слово[/урл]...". А для разработчика словаря эта вещь вообще очень хорошая. Просто удобная фитча.

>может зделать просто slovo.php?word=пхп , в чем пролема? почему так вас не устраивает?
об этом уже писалось - иероглифы в адресной строке не есть гуд. (словарь с китайского на русский). По крайне мере ?word=пхп точно не пройдёт, а вот ?word=%D0%BF%D1%85%D0%BF очень даже может. Только узнал о функциях urlencode, urldecode и, надо сказать, это альтенатива извращениям типа location. Единстенный большой минус - форма страшная, mod_rewrite не применишь. А то я уже прланировал www.xxxx.ru/slovar/12345 - красота. Буду думать что выбрать.

   
 
 автор: Loki   (13.09.2007 в 16:59)   письмо автору
 
   для: Qiao   (13.09.2007 в 16:07)
 

читаю эту тему, и не перестаю удивляться... реврайт-то теперь чем провинился?

   
 
 автор: Qiao   (13.09.2007 в 21:49)   письмо автору
 
   для: Loki   (13.09.2007 в 16:59)
 

Кто провинился? В чём? Я говорю, что если urldecode|incode использовать, то адресс некрасивым будет. Поэтому я его использовать не буду. Люблю когда красиво ...

   
 
 автор: Faraon   (14.09.2007 в 09:21)   письмо автору
 
   для: Qiao   (13.09.2007 в 21:49)
 

В данном случае важнее функциональность, красоту надо наводить на странице (в смысле дизайна и читабельности информации), а не в адресной строке, которая для обычного пользователя вообще по барабану, и его не волнует какие там закорючки
К примеру возьмем

http://www.lingvo.ru/lingvo/Link.asp?Ln=1&CardId=43c;430;448;438;43d;430;0;4c;69;6e;67;76;6f;55;6e;69;76;65;72;73;61;6c;20;28;52;75;2d;45;6e;29
и никто не заморачивается про адресную строку

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования