функция Load и GET
Здравствуйте, не могу никак разобрать, как передать имеющий GET в php..
Имеется код который загужает one.php в него. Но при этом ему надо отправить имеющий GET параметр в One.php и уже загрузить обратно(обработанный). Как это можно реализовать? $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); <div id="cc"><img id="loader" src="/images/ajax-loader.gif" alt="Loading, Loading!"></img></div> <script type="text/javascript"> $(window).load(function() { setTimeout(function(){ $('#loader').hide(); $('#cc').load('/inc/info/one.php'); }, 1000); }); </script> к примеру 1.php : $projectx = "http://".$project.""; echo $projectx; |
Запрос не содержит GET-параметров. Определяйте его, обрабатывайте на сервере и возвращайте. Или в чем проблема?
|
не могли бы показать? Была бы благодарна =)
|
А что тут показывать:
$('#cc').load('/inc/info/one.php?name=xxxxxx'); Куда интереснее как он попадает в url, но это должно быть виднее вам. :) PS. Если затруднения именно в этом, то методу .get() можно задавать передаваемые серверу параметры в опции. |
Цитата:
|
Цитата:
|
Цитата:
$project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); мне надо чтобы он отправлял чему равен $project в файл one.php и возвращял уже обработанный с ним. |
Какое отношение php-код:
$project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); имеет к JS? Вы показываете код, который запрашивает файл one.php без параметров, а значит, если php-строка, что выше, принадлежит этому файлу, то ничего она не будет делать, ну кроме как будут выдано предупреждение о неопределенной переменной, если вывод предупреждений включен. Если этот файл до ajax-запроса запрашивался клиентом из другой страницы и с параметром "name", и это означает обработать и вернуть, то в этом случае эту обработанную переменную нужно хранить на сервере для ajax-запроса. А вам чего надо? |
у меня получается так что клиент переходит /info/lalala где lalala и есть GET.
Как мне тогда чтобы он передавал get в тот файл? |
Миледи, давайте так:
1) Есть страница one.php, на которой обрабатывается GET-параметр "name". Эта страница может запрашиваться с любой страницы (кроме ajax-запроса), и если да, то GET-параметр "name" приходит с некой "ХХ" страницы? Каково назначение этой страницы? 2) Есть некая страница "Х" содержащая ajax-запрос без GET-параметров. Каково назначение этой страницы? 3) Что в итоге должны "родить" совместные усилия страниц one.php и Х? |
Цитата:
|
Цитата:
Во-первых - если файл закрыт для прямого доступа, то не сможет никакой ajax-запрос достучаться до него, возврат будет 404. Этот файл будет доступен только владельцу - php-сценарию выполняющемуся от имени владельца. Во-вторых вы не ответили на вопросы - откуда берется на этой странице GET["name"] если ajax-запрос не передает такого параметра? Абстрагируйтесь от кода серверного и клиентского, просто описать словами задачу выполняющую этими скриптами можете? |
давате я напишу что я хотела в начале сделать.
Я хотела сделать чтобы данный php код загружался после полной загрузки страницы. Вот сам пхп код (хотела впихнуть в one.php). <? $projectx = "http://".$project.""; function isSiteAvailable($projectx) { // проверка на валидность представленного url if(!filter_var($projectx, FILTER_VALIDATE_URL)) { return 'error'; } // создаём curl подключение $cl = curl_init($projectx); curl_setopt($cl,CURLOPT_CONNECTTIMEOUT,10); curl_setopt($cl,CURLOPT_HEADER,true); curl_setopt($cl,CURLOPT_NOBODY,true); curl_setopt($cl,CURLOPT_RETURNTRANSFER,true); // получаем ответ $response = curl_exec($cl); curl_close($cl); $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); if ($response){ return '<img style="vertical-align:-5px;" src="/images/online.png"></img> <font color="#0dd82e">Работает</font>'; }else{ if(file_exists('../../images/screens/'.$project.'.png')) unlink('../../images/screens/'.$project.'.png'); $r=mysql_query("update `ca` set `type`='0' where `link`='".$project."'"); return '<img style="vertical-align:-5px;" src="/images/offline.png"></img> <font color="red">Не работает</font>'; }} if(isset($projectx)){ $response = isSiteAvailable($projectx); $message = ''.$response.''; } if (isset($message)) echo $message; ?> Может я не том путём пошла? Как тогда такое чудо сделать? |
Этот код не поясняет откуда берется злополучный $_GET["name"], а тем более того, что вообще вы хотите сделать. Ну есть cURL запрос к ресурсу, это понятно, но как это связано с $_GET["name"] и с остальным, загадка.
У вас есть локальный сервер для отладки? Загрузите в него два скрипта: a.php <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { var o = $('#box').click(function() { var p = o.data('p') ^ 1; //инвертируем значение переключателя o.data({p: p}); //в зависимости от значения переключателя будет передавать или нет get-параметр в запросе o.load('b.php' + (p ? '?name=var_name' : '')) }).data({p: 1}) //определим переключатель }); </script> <div id="box" style="padding:20px;border:1px solid #444;"></div> b.php <?php //если запрос содержит get-параметр, то возвращаем его, иначе сообщаем, что его не было exit($_GET['name'] ?: 'Not name') ?> Запустите файл a.php и щелкайте по DIV, можете следить за запросом и в отладчике. Как видите сервер будет возвращать $_GET['name'] или же сообщать что его не было с каждым щелчком по DIV. То есть, даже если бы вместо $_GET['name'] ?: 'Not name' был наворочен невероятный по сложности код обработки $_GET['name'], он бы ничего не делал, если такового параметра нет. Вот тоже самое и у вас в коде содержащем ajax-запрос - вы ожидаете "манны небесной" совсем не имея на то оснований, ибо никакого параметра 'name' в запросе к серверу по этому URL у вас нет. Это понятно? Теперь пусть у нас будет еще третий игрок - файл c.php, который до файла a.php делает запрос также к странице b.php, но с передачей этого параметра - 'name'. Мы знаем, что значение этого параметра хочет получить и файл a.php, поэтому запомним его в сессии. Теперь код скрипта a.php будет таким: <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { $('#box').load('b.php') }); </script> <div id="box"></div> то есть просто подгружаем страницу b.php, код которой теперь будет таким: <?php session_start(); if(!$_SESSION['mem']) $_SESSION['mem'] = $_GET['name']; exit($_SESSION['mem']) ?> которая перед тем как будет запрошена страницей a.php сперва должна быть запрошена старницей c.php с таким кодом: <a href="b.php?name=send_name">Send name</a> Теперь загрузив эти три файла вызовите сначала файл c.php и перейдите в нем по ссылке. Это передаст в url get-параметр. В файле b.php значение этого параметра будет запомнено в сессии. После этого запросите файл a.php. Теперь этот файл получит запомненный get-параметр переданный ранее другим сценарием. Иначе никак, нельзя из ничего получить что-то, ну это же элементарно, Ватсон. :) А вот что вы пытаетесь сделать, я так и не понял. И дополнение - если некий скрипт, к которому нужно обратиться клиенту, закрыт от прямого доступа, то клиент должен обращаться не к нему, а к скрипту имеющему к нему доступ, дабы его подключить, исполнить и вернуть результат клиенту. |
а как вставить вместо var_name имеющее значение GET?
|
Цитата:
Например, чтобы у вас в файле представленном выше, был обработан этот запрос $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); то некто должен обратиться к этому файлу с этим запросом. Так ли у вас это работает я и пытался выяснить, но увы, пояснений нет. ) А это может быть просто параметр в ссылке тега А, а это может быть и поле ввода формы с именем "name", кторая передается методом GET на страницу, и т.п... Механизм я показал, что собственно можно было и не делать, ибо все просто. Поясните в конце концов просто словами - есть страница А, на которой нужно получить то-то и то-то, причем она может получать некий параметр "name" (от кого?), Есть страница Б, которая может также обращаться к этой странице, если был параметр "name", то получить его. То есть типа такого, что собственно я и описывал. Может быть поясняя на словах и ответ "самой себе" будет сразу из этого и получен? :) |
Ну вроде получилось передать гет.
вот готовый $(function() { var o = $('#box').click(function() { var p = o.data('p') ^ 1; //инвертируем значение переключателя var csstop = "<?php echo $project;?>"; o.data({p: p}); //в зависимости от значения переключателя будет передавать или нет get-параметр в запросе o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : '')) }).data({p: 1}) //определим переключатель }); Не могли бы пожалуйста чтобы не по клику открывалось, а как я писала в виде $(window).load(function() { var a = "<?php echo $project; ?>"; setTimeout(function(){ $('#loader').hide(); $('#cc').load('/inc/info/one.php'); }, 1000); }); |
:D
И зачем вы берет код, который я написал ради пояснения "есть/нет параметра запроса" берет себе как рабочий? Поясняю детально его: var o = $('#box') //в переменной "o" кешируем объект #box, так как мы к нему будет не раз обращаться .click(function() { //устнавливем обработку щелчка по объекту #box var p = o.data('p') ^ 1; //получаем значение переключателя "p" и изменяем его бит - 0 будет меняться на 1, и наоборот - 1 меняться на 0 var csstop = "<?php echo $project;?>"; //это ваше не понятно почему здесь взялось, и что есть "плохо" o.data({p: p}); //запоминаем изменение бита "p" //запрашиваем сервер и, если, "p" равно 1, то подставляем в запрос get-параметр, иначе запрос будет без него //то есть get-параметр будет передаваться на сервере черз один раз o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : '')) }) .data({p: 1}) //определим бит переключателя определяющего передачу get-параметра, который будет храниться в объекте #box То есть этот код работает как триггер - есть на выходе сигнал, нет на выходе сигнала. А оно вам надо? Суть ведь не в том чтобы впихнуть ваш $project в JS код, а в том как он завязан на логике работы вашего скрипта, что от него зависит. А что у вас теперь получилось? Ваш серверный код так же обилует множеством ненужных промежуточных переменных. А ведь все проще: <?php $projectx = "http://".$project; function isSiteAvailable($projectx) { // проверка на валидность представленного url if(!filter_var($projectx, FILTER_VALIDATE_URL)) return 'error'; // создаём curl подключение $cl = curl_init($projectx); curl_setopt($cl,CURLOPT_CONNECTTIMEOUT,10); curl_setopt($cl,CURLOPT_HEADER,true); curl_setopt($cl,CURLOPT_NOBODY,true); curl_setopt($cl,CURLOPT_RETURNTRANSFER,true); // получаем ответ $response = curl_exec($cl); curl_close($cl); $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); if ($response) return '<img style="vertical-align:-5px;" src="/images/online.png"></img> <font color="#0dd82e">Работает</font>'; else { if(file_exists('../../images/screens/'.$project.'.png')) unlink('../../images/screens/'.$project.'.png'); mysql_query("update `ca` set `type`='0' where `link`='".$project."'"); return '<img style="vertical-align:-5px;" src="/images/offline.png"></img> <font color="red">Не работает</font>'; } } if(isset($projectx)) echo isSiteAvailable($projectx); ?> И теперь у вас этот код будут работать через раз по разному сценарию, так как используя мой пример $_GET["name"] будет через раз, и обновление: mysql_query("update `ca` set `type`='0' where `link`='".$project."'"); просто бессмысленное. А ведь должна же быть некая логика. А ее нет сейчас вообще. |
суть я поняла) а как сделать чтобы выводилось оно само к примеру через 5 сек после полной загрузки страницы?
|
Цитата:
|
Сейчас стоит - при клике на div c id = box отображает (грузится) файл one.php
Как сделать, чтобы при открытий страницы (после загрузки страницы $(window).load ) запустился через 5 сек. div c id = box |
Таймер установить, и если добавлять сам контейнер принимающий запрос, то:
$(function() { var tm = setTimeout(function() { $('#box').appendTo('body или иной селектор куда этот блок нужно вставить').load('url запроса'); clearTimeout(tm) }, 5000); }); |
Цитата:
$(window).load(function() { var o = $('#box') //в переменной "o" кешируем объект #box, так как мы к нему будет не раз обращаться .click(function() { //устнавливем обработку щелчка по объекту #box var p = o.data('p'); //получаем значение переключателя "p" и изменяем его бит - 0 будет меняться на 1, и наоборот - 1 меняться на 0 var csstop = "<?php echo $project;?>"; //это ваше не понятно почему здесь взялось, и что есть "плохо" o.data({p: p}); //запоминаем изменение бита "p" //запрашиваем сервер и, если, "p" равно 1, то подставляем в запрос get-параметр, иначе запрос будет без него //то есть get-параметр будет передаваться на сервере черз один раз o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : '')) }) .data({p: 1}) //определим бит переключателя определяющего передачу get-параметра, который будет храниться в объекте #box }); |
Цитата:
Сюда никак, вернее смысла нет, это должно выполняться по таймеру, то есть, зачем вам щелкать по '#box' (да и не возможно, ибо вы хотите его добавлять в документ), так как надо по истечении времени сделать запрос. При этом один раз есть параметр, а другой раз нет, этого я просто не понимаю, к чему вы притулили это в код.... Остается, что параметр запроса должен быть всегда и и фиксированный, ибо <?php echo $project;?> - уже на клиенте никак изменяться не будет. А значит o.load('/inc/info/one.php?name=<?php echo $project;?>') $(function() { var tm = setTimeout(function() { $('#box').appendTo('body или иной селектор куда этот блок нужно вставить').load('/inc/info/one.php?name=<?=$project?>'); clearTimeout(tm) }, 5000); }); Если inc/info - это закрытая папка, то не получится, если ради этого запроса вы ее открываете, то это очень плохо. <?=$project?> - в случае, если разрешен короткий php-тег. В последних версиях РНР такая конструкция доступна всегда и не зависит от разрешения короткого тега. |
а чем это плохо? Если речь идет о уязвимости one.php. То можно сделать таким образом - Сделать проверку, есть ли значение $_GET (название) в базе или нет), если нету то die() :)
|
Цитата:
Пака с подключаемыми файлами, в коей могут быть и файлы конфигураций должна быть закрыта по прямой ссылке и баста, это даже не обсуждается. Более того, проверку этого параметра производит только ваш бедолага файл, а вряд ли каждый. Да дело даже и не в этом. |
Цитата:
|
Я вам уже сказал - клиент должен обращать не к скриптам закрытого каталога, а к скриптам имеющим к нему доступ. Как закрыть каталог средствами .htaccess думаю вы в курсе.
|
Можете пример привести? .(хотела бы сравнить свои мысли с вашей)
|
Чего, что должно быть в .htaccess?
Deny from all Сравнивайте, но это не мои мысли, это "мысли" авторов этой разработки :) |
Спасибо большое) Держите плюсик :)
|
у вас скайп есть?
|
Есть, а что?
|
Цитата:
|
Без обид, но я не даю консультаций по Скайп.
Скайп я даю заказчикам, ибо с ними приходится общаться по делу, и у меня есть заказы, которые нужно выполнять. А есть время свободное или отдохнуть охота, тогда можно и на форуме "лясы поточить" :) Если проблемы серьезные, то по ссылке на форум именно по проблемам .htaccess. Ибо это можно долго рассказывать, но если не могут еще и пояснить проблемы (как это было с $_GET['name'], что до сих пор загадка), то разговор превратиться в вечность, а на нее у меня точно нет времени. ) |
ну я добавила .htaccess deny from all
теперь не грузится one.php (что и следовало ожидать). Можно ведь как разрешить? |
И вы хотите чтобы я еще и Скайп "заморил" :lol:
Ну правильно, для этого и закрывается каталог, чтобы никто не могу получить к нему прямой доступ. Еще раз повторяю - клиент уже не может обратиться к этому файлу напрямую, для этого он должен обращаться к скрипту, имеющему доступ к закрытому каталогу. Например, ваш индексный файл прежде чем делать запросы к базе, должен сперва подключиться к ней. А параметры подключения к ней как раз и "прячут" в закрытый каталог, где также могут храниться и подключаемые функции или файлы ядра системы. Например, в индексном файле будет нечто типа такого: //подключение скрипта из закрытого каталога include_once '/inc/connect.php'; //параметры подключения к базе //далее можно выполнять запросы к базе Знакомо такое? Подобным образом можно подключить и файл-скрипта one.php в индексном файле, но по условию, и в самом начале его, и если подключаемый файл производит и выход из выполнения, то достаточно только подключить его: //параметры подключения к базе так как срипт подключаемый по условию работает с ней include_once '/inc/connect.php'; //параметры подключения к базе //подключение скрипта по условию if(isset($_GET['name'])) include '/inc/nfo/one.php'; //далее остальной код индексного файла а файл one.php должен производить и выход, то есть последняя строка в нем (если учесть ее так, как я правил) if(isset($projectx)) echo isSiteAvailable($projectx); должна быть такой if(isset($projectx)) exit(isSiteAvailable($projectx)); А Ajax запрос с клиента производить к индексному файлу: ....load('index.php?name=<?=$project?>'); Но может быть и не стоит прятать one.php в закрытый каталог, с чего такая надобность возникла я не знаю. Аналогично можно обращаться к любому не закрытому по прямой ссылке файлу и подключать в нем необходимое из закрытого каталога. PS. Действие .htaccess распространяется на все файлы в нем, а также на файлы вложенных в него каталогов. То есть, если .htaccess установлен на каталог inc (что разумно), то и файлы его каталога info также будут недоступны по прямой ссылке. |
Поняла) спасибо.
|
Можно из этого когда сделать, чтобы сперва обработался файл /mon1.php а потом только выводилось из него?
В каком смысле? mon1.php будет обрабатываться на сервере, клиент только получает ответ от него. а то получается, что сайт загрузился потом идет Loader, пропадает и только тогда грузится /mon1.php Ту так запрос к серверу и должен производиться после того, как страница будет загружена, то есть готов DOM. $('#loader1').hide(); никак не влияет на $('#mon1').appendTo... оба эти действия будут выполняться асинхронно, и выполнение их начнется почти одновременно. Чего вы хотите? |
ну смотрите, задача сложная. :) делала по такому-же принципу.
Код в Mon1.php <? include_once '../config.php'; $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); $str = substr($project, 0, strlen($project)-4); $headers_array = array(); $headers_array = get_headers("http://monhyip.net/monitor/".$str);//отсылаем запрос $request = $headers_array[0];//выбираем главный ответ сервера if ($request == 'HTTP/1.1 404 Not Found') { }else{?><a target="_blank" href="http://monhyip.net/hyip/<?=$str?>"><img src="/images/monitors/monhyip.png"></a> <?} $page = file_get_contents ( "http://gsmonitor.org/?a=search&content=".$project.""); $count_words = preg_match_all ( '/Currently there are no items founded!/i', $page, $matches ); if ($matches[0]){}else{?><a target="_blank" href="http://gsmonitor.org/?a=search&content=<?=$project?>"><img src="/images/monitors/gsmonitor.gif"></a><?} $page = file_get_contents ( "http://ihyips.com/?a=search&content=".$str.""); $count_words = preg_match_all ( '/Currently there are no items founded!/i', $page, $matches ); if ($matches[0]){}else{?> <a target="_blank" href="http://ihyips.com/?a=search&content=<?=$str?>"><img src="/images/monitors/ihyips.png"></a><?} $page = file_get_contents ( "http://uhyips.com/search?q=".$project.""); $count_words = preg_match_all ( '/No results were found./i', $page, $matches ); if ($matches[0]){}else{?> <a target="_blank" href="http://uhyips.com/search?q=<?=$project?>"><img src="/images/monitors/uhyips.png"></a><?} $page = file_get_contents ( "http://mega-hyip.ru/?a=search&content=".$str.""); $count_words = preg_match_all ( '/Currently there are no items founded!/i', $page, $matches ); if ($matches[0]){}else{?> <a target="_blank" href="http://mega-hyip.ru/?a=search&content=<?=$str?>"><img src="/images/monitors/mega-hyip.png"></a><?} $page = file_get_contents ( "http://investoday-monitor.ru/?a=search&content=".$str.""); $count_words = preg_match_all ( '/Ничего не найдено!/i', $page, $matches ); if ($matches[0]){}else{?> <a target="_blank" href="http://investoday-monitor.ru/?a=search&content=<?=$str?>"><img src="/images/monitors/investoday-monitor.png"></a><?} ?> Как заметили имеется там file_get_contents. Фишка в том что сперва загружается страница полностью ($(window).load(function() ) потом появляется loader1, потом он исчезает и только тогда загружается file_get_contents... :( Можно ведь как то сделать, чтобы когда шла загрузка loader1 обрабатывался mon1.php, и после исчезновения loader1 сразу появлялся результат? |
Часовой пояс GMT +3, время: 13:58. |