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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: PHP+HTML

Сообщения:  [1-10]    [11-20]  [21-23] 

 
 автор: confirm   (25.04.2016 в 16:56)   письмо автору
 
   для: sasha12342   (25.04.2016 в 15:01)
 

Сюда, а Денвер выбросить, умер он уже давно.

  Ответить  
 
 автор: sasha12342   (25.04.2016 в 15:01)   письмо автору
 
   для: confirm   (25.04.2016 в 06:08)
 

Денвер, версия: Денвер-3 2010-11-07

  Ответить  
 
 автор: confirm   (25.04.2016 в 06:08)   письмо автору
 
   для: sasha12342   (24.04.2016 в 23:13)
 

На чем вы тестируете скрипты?

  Ответить  
 
 автор: sasha12342   (24.04.2016 в 23:13)   письмо автору
 
   для: confirm   (24.04.2016 в 06:20)
 

Спасибо за примеры, но они у меня не работают. Двух индексных файлов я нигде не использую. Здесь-же я привел их в пример потому что мне кажется странным, что один файл обработчик, получает один и тот-же запрос(строка которую отдают индексные файлы) ведет себя по разному в зависимости от того с какого файла прилетает этот запрос.

Что касается примеров выше, то в первом случае ничего не происходит после нажатия(если по умолчанию ставлю запись в #response, то после отправки текст просто исчезает). Во втором случае просто игнорируется php код. После добавления записей в файл .htaccess ничего не изменилось.

  Ответить  
 
 автор: confirm   (24.04.2016 в 06:20)   письмо автору
 
   для: sasha12342   (22.04.2016 в 23:31)
 

А вы можете пояснить зачем вам коллекция индексных файлов?

index.* - это индексный файл по умолчанию, который прописан в конфигурации сервера, и если у вас .php, то кем-то набранный .html будет все таки перенаправлен на .php. Если на сервере бардак, что вряд ли, то для решения такой проблемы есть .htaccess.

Трудно представить, чтобы у сайта с динамическим содержанием индексный файл был чисто html, а из php только какой-то заголовок, который в общем то в данном случае и не нужен.

Но чтобы наконец-то вы поняли логику работы асинхронного обмена клиент->сервер показываю простые примеры, хотя данное по своей логике ни чем не отличается от примера "Скачать файл".

В первом случае пусть это будет чистый html, который отдает форму и содержит сценарий клиента, а обработка асинхронного запроса, это отдельный файл.

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    var frm = $('#myform').submit(function(e) {
        e.preventDefault();
        $.post('send.php', frm.serialize(), function(d) {
            if(!!d) $('#response').html(d)
        })
    })
});
</script>     
</head> 
<body>
<p>Server response</p>
<pre id="response"></pre>
<form id="myform">
<input name="fld1" value="5" />
<input name="fld2" value="12" />
<input name="fld3" value="55" />
<button>Send</button>
</form>
</body> 
</html>


Примечание - serialize(), а не var input = this.elements, i = input.length, array = []; while(i--)... и прочая хрень в данном случае совсем не нужная. Метод асинхронного запроса взят упрощенный, собственно и вы используете $.ajax не понятно с какой целью. Но в данном случае не важен метод. О всех ajax-методах JQ читать тут.

Файл обработчик send.php простой - он просто возвращает содержимое $_POST.


<?php
print_r
($_POST)
?>


Запустите, проверьте - все работает и лишнего не возвращает?

А теперь изменим структуру кода - запрос клиента будет к текущей странице, то есть html, которая содержит и форму, и клиентский сценарий. Файл обработчик будет подключаться по условию запроса клиента, и в данном случае php-код размещен в самом начале файла, а после окончания работы файла обработчика находится инструкция выхода, которая по умолчанию ремирована. Адрес асинхронного запроса изменяем на location, поэтому исполняя пример можете давать файлу .html любое имя:


<?php
if($_POST) {
    include 
'send.php';
    
//exit;
}
?>
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    var frm = $('#myform').submit(function(e) {
        e.preventDefault();
        $.post(location, frm.serialize(), function(d) {
            if(!!d) $('#response').html(d)
        })
    })
});
</script>     
</head> 
<body>
<p>Server response</p>
<pre id="response"></pre>
<form id="myform">
<input name="fld1" value="5" />
<input name="fld2" value="12" />
<input name="fld3" value="55" />
<button>Send</button>
</form>
</body> 
</html>


Выполните теперь - вместе с содержимым $_POST сервер возвращает и код страницы. Уберите ремирование у exit. А теперь все работает как положено.

Вот и вся соль. Если же и данный пример будет не выполняться, и сервер возвращает не просто и то, и другое, а код страницы как есть, включая и строки php-кода, то причина этого банальна - не разрешено выполнение php-кода в файлах html (по умолчанию, это не исполняемый файл). Эта проблема также решается через .htaccess, добавьте в него строки:


RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml


PS. К чему у вас biblioteka.js не понятно, хотя я не смотрел код во вложении, может там подключение. Но не надо и этим заниматься - библиотеку jQuery лучше подключать с ресурсов Google, в этом случае большая вероятность того, что у клиента она уже есть в кеше и закачивать ее опять не потребуется.

  Ответить  
 
 автор: sasha12342   (22.04.2016 в 23:31)   письмо автору
2.8 Кб
 
   для: confirm   (22.04.2016 в 12:11)
 

Ладно, делаю следующим образом:

Имеем в корне следующие файлы:
obrabotchic.php - файл обработчик (его содержимое выложено выше);
index.php
<?php 
header
('Content-Type: text/html; charset=utf-8');
setlocale(LC_ALL'ru_RU.65001''rus_RUS.65001''Russian_Russia. 65001''russian');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<title></title>

<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="keywords" content="">
<meta name="description" content="">

<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>

<script type="text/javascript" language="javascript">
$(document).ready(function() {

    $('.table_calc').change(function() {

        $('.len').each(function(){
            var input = this.elements, i = input.length, array = [];
            while(i--){
                str_1=$(input[i]).val();
                array.push("pol"+i+"="+str_1.replace(/[&]+/g,'.'));
            }

                  $.ajax({
                  type: "POST",
                  url: "obrabotchic.php",
                  data: {post_z: array.reverse().join()},
                  dataType: "html",
                  cache: false,
                  success: function(data) {

                     $('#echo_change_text').html(data);

                                      }
                     });   
         
        });    

    });
    
 });
</script>

</head>

<body>


<div style='border: 1px solid green; overflow:auto;'>
    <div id='echo_change_text'>
    <p align='center'><b>Итого: <font color='green'>0</font> рублей</b></p>
    </div>
</div>

<form action="" method="POST" id='len' class='len'>
<table class='table_calc' cellspacing="1" id='otvet'>

<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>
<tr class='tab_tr'>
<td class='tab_td1'>$table_tr1</td>
<td class='tab_td2'><input class='input_change' name='pol' type='text' size='2' value='0'>$table_tr2</td>
<td class='tab_td5'>$table_tr3</td>
</tr>

</table>
</form>


</body>
</html>

index.html - код аналогичен, за исключением <?php header...
biblioteka.js - библиотека Jquery

Когда я меняю значения полей в файле index.php то результат возвращается ожидаемый(скрипт в обработчике php срабатывает нормально).
Когда я делаю тоже самое в файле index.html, то в ответ получаю исходный код php обработчика.
Если я на первую строку php обработчика(obrabotchic.php) ставлю
<?php
exit("stop");
....
то ajax возвращает в html файл исходный код обработчика(вместе с exit("stop");) а файл index.php показывает в блоке вывода ответа надпись: "stop".
Файл обработчик один, но ведет себя по разному, в зависимости от того с какого файла приходит запрос, а запрос одинаков с обеих файлах. Как так может быть?

Файлы прикрепил.

  Ответить  
 
 автор: confirm   (22.04.2016 в 12:11)   письмо автору
 
   для: indexer   (22.04.2016 в 12:02)
 

А кто сказал что это ненависть?

Каков коммент, таков и ответ, а он глуп до костей мозгов, просто вы написали всякой херни, лишь бы языком ляпнуть. Я бы вообще прошел мимо так как в вашем комменте ничего полезного ни для кого нет, если бы не снисхождение ко мне - простить за резкость..., но как бы она позволительна вам, как же, дока... И смех и грех. Есть что сказать по делу - говорите, нет - не путайтесь под ногами.

  Ответить  
 
 автор: indexer   (22.04.2016 в 12:02)   письмо автору
 
   для: confirm   (22.04.2016 в 11:47)
 

от куда столько ненависти? Не все родились со знанием кода, но все когда то умрут. Поэтому какая разница? все же кругом условно-согластно-стандартно.

  Ответить  
 
 автор: confirm   (22.04.2016 в 11:47)   письмо автору
 
   для: indexer   (22.04.2016 в 11:08)
 

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

Это не резкое высказывание, а глупое.

  Ответить  
 
 автор: indexer   (22.04.2016 в 11:08)   письмо автору
 
   для: confirm   (22.04.2016 в 10:13)
 

=) хм... слова не лишены логики и в случае с загрузкой понятно, но почему отдается php код в браузер? Даже если скрипт продолжает работать он может вывалить мусор или ошибки. как он отдает собственный код?

Честно говоря, я не сталкивался с таким поведением, когда при ошибке в коде/логике вываливается весь код php в браузер и не знал, что делать в таком случае. У меня была бы паника, что при хитро составленном запросе можно весь сервер через эту "дырочку" поиметь.

for ts:
exit() конечно важен Но как говорится "не лепи куда попало" и "чем крепче сожмешь, тем сильнее рванет".

Код должен быть кодом, красивым кодом, код надо любить. Это не только к php относится.
а простите не "Бууэ-э-э-э,,, о0, да тут еще и марковка есть, а от куда она тут"?

p/s извините если мое высказывание несколько резко, я не хочу никого обижать этим.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-23] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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