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

HTML+CSS+JavaScript

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

 

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

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

тема: Как можно осуществить запуск PHP обработчика, по клику в фоновом режиме
 
 автор: Dinya_1   (20.10.2011 в 12:14)   письмо автору
 
 

Здравствуйте.
Уперся в проблему: Есть галлерея изображений...
Нужно сделать подсчет кликов по каждой картинке, с занесением в базу...
Подсчет кликов хочу сделать на PHP, с помощью обработчика, а вот как передать этому самому обработчику переменную(в фоновом режиме, без перезагрузки страници, и без открытия в новом окне) методом Гет не могу взять в толк...

Например выводятся ссылки

<a href="/click.php?id=1">foto1.jpg</a>
<a href="/click.php?id=2">foto2.jpg</a>
<a href="/click.php?id=3">foto3.jpg</a>
....
<a href="/click.php?id=183">foto183.jpg</a>

  Ответить  
 
 автор: Владимир55   (20.10.2011 в 17:10)   письмо автору
 
   для: Dinya_1   (20.10.2011 в 12:14)
 

А что у Вас происходит при клике на картинку? Переход на click.php ?

  Ответить  
 
 автор: sl1p   (20.10.2011 в 17:32)   письмо автору
 
   для: Dinya_1   (20.10.2011 в 12:14)
 

ajax

iframe

  Ответить  
 
 автор: АЯС   (20.10.2011 в 18:10)   письмо автору
 
   для: Dinya_1   (20.10.2011 в 12:14)
 

На каждую из ссылок надо повесить обработчик события onclick, вот так:
<a href="/click.php?id=1" onclick="myFunc (this.href)">foto1.jpg</a>

Функция myFunc обработает HREF, вытащит из него значение id и передаст это значение программе на PHP посредством технологии AJAX. Вот так:
function myFunc (x)
{
//вытаскиваем id
var myId = x.split ('?id=') [1];

//создаём объект HttpRequest
if (navigator.appName == 'Microsoft Internet Explorer') htReq = new ActiveXObject ('Microsoft.XMLHTTP');
else htReq = new XMLHttpRequest ();

//Отсылаем id серверу
htReq.open ('get', 'file.php?' + myId);
htReq.send (null);

Файл file.php обрабатывает QUERY_STRING и записывает данные в соответствующий текстовой файл на сервере.

PS. Что там далее будет делать ссылка - открывать новую страницу (тут же, или в ифрейме, либо будет запускать какой-то скрипт (который надо тогда будет прописать ПОСЛЕ вызова функции, через точку с запятой: onclick="myFunc (this.href); ваш_скрипт") - это НЕ ВАЖНО. Ибо onclick срабатывает РАНЬШЕ, чем происходит реальный переход по HREF ссылки.

  Ответить  
 
 автор: Dinya_1   (20.10.2011 в 20:02)   письмо автору
 
   для: АЯС   (20.10.2011 в 18:10)
 

>Файл file.php обрабатывает QUERY_STRING и записывает данные в соответствующий текстовой файл на сервере.

В данном месте не совсем понятно..
Файл PHP должен содержать какойто специальный код QUERY или там уже будет мой код (например Оператор UPDATE на PHP ) ?

А переменную Гет id так и принимать в виде $_GET["id"] ?

  Ответить  
 
 автор: АЯС   (20.10.2011 в 20:34)   письмо автору
 
   для: Dinya_1   (20.10.2011 в 20:02)
 

1. Функция myFunc () вызовет файл file.php?НОМЕР, где НОМЕР - это "вытащенный" из HREF ссылки id

2. Всё, что написано в URL после символа вопроса - это и есть QUERY_STRING

3. Файл file.php должен "вытащить" эту самую QUERY_STRING и таким образом получить НОМЕР ссылки, по которой кликнули.

4. Инструкция по "вытаскиванию" - простейшая: $nomer = $_SERVER['QUERY_STRING'];

5. Счётчики (в самом простом виде) организуются так:
-- у вас, положим, 22-е разные ссылки с разными id (от 1 до 22) и клики по ним всем вы хотите посчитать.
-- для этого вам на сервере надо создать 22 текстовых файла, название которых будет содержать этот самый id. Например, файлы id1.txt, id2.txt, id3.txt,.. id22.txt
-- в каждый из файлов надо изначально прописать цифру 0 (кликов по соответствующей ссылке не было).
-- как только клиент кликнет, например, по ссылке с id=3, то функция myFunc () передаст файлу file.php этот самый номер 3 в виде QUERY_STRING; файл file.php вытащит эту цифру 3, откроет соответствующий файл под названием id3.txt; прочитает имеющуюся в нём цифру (в первый раз это будет 0), прибавит к этой цифре единицу и полученное запишет обратно в файл id3.txt (таким образом после первого клика в файле будет уже цифра 1, после второго - 2 и т. д.).
-- когда вам надо будет УЗНАТЬ - сколько кликали по какой-то ссылке, просто открываете соответствующий файл и читаете его значение.

Для организации всего вышенаписанного вам нужны несколько методов языка PHP для работы с файлами:
fopen (); flock (); fread (); fputs (); fclose () - открыть, запереть, читать, записывать, закрывать.

Теперь понятно?

  Ответить  
 
 автор: Dinya_1   (20.10.2011 в 21:38)   письмо автору
 
   для: АЯС   (20.10.2011 в 20:34)
 

Спасибо. Буду пробывать реализовать

А можно еще вопрос нельзя зделать запись прямо в базу?

Р/s В общем плане понятно. Спасибо.

  Ответить  
 
 автор: sl1p   (20.10.2011 в 23:28)   письмо автору
 
   для: Dinya_1   (20.10.2011 в 21:38)
 

можно, вы просто в фоновом режиме вызываете обычный php файл.

  Ответить  
 
 автор: Timchik_   (02.11.2011 в 13:38)   письмо автору
 
   для: АЯС   (20.10.2011 в 20:34)
 

Можно ли к этому еще прибавить, чтоб после фонового выполнения php скрипта, в контейнере менялась информация, например возле картинки отображалось то самое количество кликов? или как пример менялся весь контейнер, например: "Спасибо за клик!"?

  Ответить  
 
 автор: KPETuH   (02.11.2011 в 15:20)   письмо автору
 
   для: Timchik_   (02.11.2011 в 13:38)
 

можно только тогда вашь php файл еще и должен что выдать на вывод, это что-то вы обработаете с помощью javascript и вставите в нужное место )

  Ответить  
 
 автор: Timchik_   (02.11.2011 в 15:43)   письмо автору
 
   для: KPETuH   (02.11.2011 в 15:20)
 

Вот это уже интересно!

А можно пример подобного привести? Я в принципе применяю iframe - но это как то уже не модно ) хотелось бы с помощью java сделать.

  Ответить  
 
 автор: KPETuH   (02.11.2011 в 22:46)   письмо автору
 
   для: Timchik_   (02.11.2011 в 15:43)
 

Я для этого использую jquery в нем с AJAX становиться все просто.

Вот к примеру у меня есть функция которая обращается к файлу php, передает методом post в него данные, принимает из него html код который я вставляю в определенное место на странице. Функция в общем то реализует мини чат.

function show_chat(){  
           //Получаем время последнего сообщения
            n = $("#message p:last").html();
            time=n.split('<br>');
            //Обращаемся к файлу message.php отправляем туда переменную time (в message.php это будет $_POST['time'])
            $.post("message.php",  
                {time: time[0]},
           //Обрабатывем и помещаем полученный html в элемент с id = message
                function(html){  
                    if (html!="False") {//По задумке возвращается либо новые сообщения либо просто текст False если новых сообщений не было

                        $("#message").html(html); //Здесь помещаем полученный html в контейнер
                    } 
                }, "html" //Здесь указывается тип получаемых данных, если почитаете про jquery и AJAX увидите что данные можно получить разные и не только html
            );  
        }


http://jquery-docs.ru/ajax/jquery-post/

  Ответить  
Rambler's Top100
вверх

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