Передо мной стоит задача: по событию onckick переменная $marka цепляет код из файла и впоследствии выдает его в всплывающем окне. Код (Text): <tr> <td align="center" onMouseOver="this.style.background='rgba(255, 255, 255, 0.28)'" onMouseOut="this.style.background='rgba(0, 0, 0, 0)'" onClick="wmarkablock('block'); <?$marka=file_get_contents('./index_files/mark/saab.php');?>" style="cursor: hand"><img src="./index_files/saab_logo.png"><b>Saab</b></td> <td align="center" onMouseOver="this.style.background='rgba(255, 255, 255, 0.28)'" onMouseOut="this.style.background='rgba(0, 0, 0, 0)'" onClick="wmarkablock('block'); <?$marka=file_get_contents('./index_files/mark/azlk.php');?>" style="cursor: hand"><img src="./index_files/azlk_logo.png"><b>АЗЛК</b></td> <td align="center" onMouseOver="this.style.background='rgba(255, 255, 255, 0.28)'" onMouseOut="this.style.background='rgba(0, 0, 0, 0)'" onClick="wmarkablock('block'); <?$marka=file_get_contents('./index_files/mark/linkoln.php');?>" style="cursor: hand"><img src="./index_files/linkoln_logo.png"><b>Lincoln</b></td> <td align="center" onMouseOver="this.style.background='rgba(255, 255, 255, 0.28)'" onMouseOut="this.style.background='rgba(0, 0, 0, 0)'" onClick="wmarkablock('block'); <?$marka=file_get_contents('./index_files/mark/haima.php');?>" style="cursor: hand"><img src="./index_files/haima_logo.png"><b>Haima</b></td> <td align="center" onMouseOver="this.style.background='rgba(255, 255, 255, 0.28)'" onMouseOut="this.style.background='rgba(0, 0, 0, 0)'" onClick="wmarkablock('block'); <?$marka=file_get_contents('./index_files/mark/vaz.php');?>" style="cursor: hand"><img src="./index_files/irankhodro_logo.png"><b>Iran Khodro</b></td> </tr> Код (Text): <div id="w_marka"> <div id="w_marka_window"> <div class="w_marka_body"> <div class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand"></div> <?echo $marka;?> </div> </div> </div> Проблема в том, что переменная $marka забирает все подряд, а не по событию onckick (как мне надо) в итоге её значение равно последнему присвоению. Помогите решить, заранее спасибо.
Строка Присваивает значению $marka код, из файла /index_files/mark/saab.php и выводит всплывающее окно: Код (Text): <script type="text/javascript"> function wmarkablock(pokazat) { document.getElementById('w_marka').style.display = pokazat; } </script> <div id="w_marka"> <div id="w_marka_window"> <div class="w_marka_body"> <div class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand"></div> <?echo $marka;?> </div> </div> </div> Моя задача, что бы в переменной $marka только по событию onckick присваивался код, который берется методом file_get_contents из подключаемого файла, в данном случае /index_files/mark/saab.php Проанализировав хтмл, я увидел, что переменной $marka постоянно присваивается последнее значение (выделил красным), независимо от того было событие onckick или не было.
Еще раз, что выводиться в браузере? не в файле с пхп кодом, а именно в браузере? Код (Text): onClick="wmarkablock('block'); ?????????" style="cursor: hand"><img src="./index_files/saab_logo.png">
Код (Text): <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="wmarkablock('block'); " style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/saab_logo.png"><b>Saab</b></t При нажатии открывается всплывающее окно: Код (Text): <div class="w_marka_body"> <div class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand"></div> <table> <tbody><tr> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="wmodelblock('block'); <?$model=file_get_contents('./index_files/model/avtoteplo6.php');?>;return false" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2101.png"><b>2101</b></td> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="document.location='1.html'" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2104.png"><b>2104</b></td> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="document.location='1.html'" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2105.png"><b>2105</b></td> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="document.location='1.html'" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2106.png"><b>2106</b></td> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="document.location='1.html'" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2107.png"><b>2107</b></td> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="document.location='1.html'" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2108.png"><b>2108</b></td> <td align="center" onmouseover="this.style.background='rgba(255, 255, 255, 0.28)'" onmouseout="this.style.background='rgba(0, 0, 0, 0)'" onclick="document.location='1.html'" style="cursor: pointer; background-color: rgba(0, 0, 0, 0); background-position: initial initial; background-repeat: initial initial;"><img src="./index_files/models/vaz2109.png"><b>2109</b></td> </tr> </tbody></table></div>
kosinus2012, благодарю за разъяснение, теперь мне стало понятно, почему код не работает. Могли бы вы подсказать, каким образом можно реализовать мою задачу?
Как вариант, если подгружаемый объем информации не велик, повторюсь не велик, и нет условий по безопасности (например вывод пин кода который посетитель не должен видеть и т.п.), то можно выводить в диве (можно и в скрытом) весь контент. Конечно же это не выход, но решит вашу задачу целиком, зависит только от того какие данные вы собираетесь выводить, если html, тогда вариант подходит. Начало страницы html: Код (Text): <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Блоки</title> <style> h1 { background: #569099; padding: 10px; color: #fff; } p { background: #cad8d0; padding: 10px; } </style> Блок JS: Код (Text): <script type="text/javascript"> function wmarkablock(pokazat, number) { document.getElementById('block').style.display = pokazat; switch (number) { case 1: document.getElementById('block').innerHTML = "<?php echo file_get_contents('saab.php');?>"; break; case 2: document.getElementById('block').innerHTML = "<?php echo file_get_contents('azlk.php');?>"; break; default: alert('Я таких значений не знаю') } } </script> Продолжение страницы html: Код (Text): </head> <body> <table> <tr> <td align="center" onClick="wmarkablock('block',1);" style="cursor: hand"><b>Saab</b></td> <tr> <tr> <td align="center" onClick="wmarkablock('block',2);" style="cursor: hand"><b>Azlk</b></td> <tr> </table> <div id="w_marka"> <div id="w_marka_window"> <div class="w_marka_body"> <div id="block" class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand; "></div> </div> </div> </div> </body> </html> Содержимое файлов saab.php и azlk.php Код (Text): <h1>Пример №1</h1><p>123456</p> Код (Text): <h1>Пример №2</h1><p>654321</p> Короткое описание. При нажатии на Saab Код (Text): onClick="wmarkablock('block',1);" вызывается функция wmarkablock, которой в качестве параметра передается 1. Конструкция switch, которая служит для сравнения значений на равенство с различными вариантами, просматривая значении функции выбирает из списка case нужный блок для выполнения, в нашем случае это: Код (Text): document.getElementById('block').innerHTML = "<?php echo file_get_contents('saab.php');?>"; В свою очередь он вставляет в див элемент данные выводимые из файла saab.php. Приведу html после обработки и выдачей сервером ответа: Код (Text): function wmarkablock(pokazat, number) { document.getElementById('block').style.display = pokazat; switch (number) { case 1: document.getElementById('block').innerHTML = "<h1>Пример №1</h1><p>123456</p>"; break; case 2: document.getElementById('block').innerHTML = "<h1>Пример №2</h1><p>654321</p>"; break; default: alert('Я таких значений не знаю') } } Вот в принципе и все;-) Нет ничего сложного, так же советую упростить вывод: используя таблицы стилей задав один стиль для всех <td>.
Тем, что вся предложенная вами простыня костылей никуда не годится. Если подключить ту же JQuery, то вся проблема будет решена примерно так: Код (Text): <script> $(document).ready(function(){ $('#some_button').click(function(){ $.ajax({ type: "POST", url: "some_script.php", data: somedata, success: function(response){ foo(response); } }); }); }); </script> Это код, который по нажатию кнопки с id="some_button" пошлет POST-запрос с какими-то some_data на some_script.php сценарий, после чего, если получит не ошибку, а нормальный ответ, что-то с ним сделает методом foo(). Это, конечно, крайне короткая и простая реализация. Там можно прикрутить кучу интересных фич. Можно отсылать марку скрипту, а скрипт будет собирать сразу готовое "модальное окно" с нужной инфой (ну там, style ему наколдовать, чтобы смотрелось как модалка) и возвращать его в ответе, после чего нам нужно будет только сделать append полученного ответа, ну например к body. Все. Окно всплыло. Ну и закрытие окошка (то бишь выпиливание его как такового из DOM-а) прописать нужно тем же JS-ом. При этом, в отличие от вашего решения, будь хоть 2 марки, хоть 2000, код не разбухнет ни на строчку. Трафика лишнего не пойдет ни на байт. При добавлении новых марок не нужно ковырять вьюху, которая будет универсальной, а вся поддержка дальнейшая и правки будут всего в одной точке. Если это не проще, то я упоролся
Да, аяксом конечно же можно и нужно, если объем данных будет велик. А если пользователю необходимо вывести пару строк, то и этот код подойдет. Я предложил простой вариант исходя из тех данных, которые были предоставлены пользователем, без необходимости проверки POST и GET запросов, подключения сторонних библиотек, ведь любой запрос необходимо проверять, а это лишние телодвижения. Вы не упоролись;-)
ноуп, в плане программирования я работаю на себя. Хотя, если оно того будет стоить и будет свободное время, могу и фриланс взять. Добавлено спустя 3 минуты 36 секунд: Ну вот беда в том, что в контексте задачи, там виднеется что-то вроде эдакого справочника, где будет не две и три марки машин. Так что, боюсь, строк там будет очень очень много.