За последние 24 часа нас посетили 17050 программистов и 1834 робота. Сейчас ищут 1637 программистов ...

Как присвоить значение переменной php по событию onclick

Тема в разделе "PHP для новичков", создана пользователем avt174, 1 авг 2013.

  1. avt174

    avt174 Активный пользователь

    С нами с:
    5 июл 2013
    Сообщения:
    7
    Симпатии:
    0
    Передо мной стоит задача: по событию onckick переменная $marka цепляет код из файла и впоследствии выдает его в всплывающем окне.
    Код (Text):
    1. <tr>
    2.     <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>
    3.     <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>
    4.     <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>
    5.     <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>
    6.     <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>
    7. </tr>
    Код (Text):
    1. <div id="w_marka">
    2.   <div id="w_marka_window">
    3.     <div class="w_marka_body">
    4.         <div class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand"></div>
    5.         <?echo $marka;?>
    6.     </div>
    7.   </div>
    8. </div>
    Проблема в том, что переменная $marka забирает все подряд, а не по событию onckick (как мне надо) в итоге её значение равно последнему присвоению. Помогите решить, заранее спасибо.
     
  2. kosinus2012

    kosinus2012 Активный пользователь

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    Опишите, что делает данная строка? и проанализируйте HTML, что выводится в браузере?
     
  3. avt174

    avt174 Активный пользователь

    С нами с:
    5 июл 2013
    Сообщения:
    7
    Симпатии:
    0
    Строка
    Присваивает значению $marka код, из файла /index_files/mark/saab.php и выводит всплывающее окно:
    Код (Text):
    1. <script type="text/javascript">
    2.   function wmarkablock(pokazat) {
    3.     document.getElementById('w_marka').style.display = pokazat;
    4.   }
    5.   </script>
    6.  
    7. <div id="w_marka">
    8.   <div id="w_marka_window">
    9.     <div class="w_marka_body">
    10.         <div class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand"></div>
    11.         <?echo $marka;?>
    12.     </div>
    13.   </div>
    14. </div>
    Моя задача, что бы в переменной $marka только по событию onckick присваивался код, который берется методом file_get_contents из подключаемого файла, в данном случае /index_files/mark/saab.php

    Проанализировав хтмл, я увидел, что переменной $marka постоянно присваивается последнее значение (выделил красным), независимо от того было событие onckick или не было.
     
  4. kosinus2012

    kosinus2012 Активный пользователь

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    Еще раз, что выводиться в браузере? не в файле с пхп кодом, а именно в браузере?
    Код (Text):
    1. onClick="wmarkablock('block'); ?????????" style="cursor: hand"><img src="./index_files/saab_logo.png">
     
  5. avt174

    avt174 Активный пользователь

    С нами с:
    5 июл 2013
    Сообщения:
    7
    Симпатии:
    0
    Код (Text):
    1. <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):
    1. <div class="w_marka_body">
    2.         <div class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand"></div>
    3.         <table>
    4.         <tbody><tr>
    5.     <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'); &lt;?$model=file_get_contents('./index_files/model/avtoteplo6.php');?&gt;;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>
    6.     <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>
    7.     <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>
    8.     <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>
    9.     <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>
    10.     <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>
    11.     <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>
    12. </tr>
    13. </tbody></table></div>
     
  6. kosinus2012

    kosinus2012 Активный пользователь

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    Ответ для себя не нашли? Задайте себе вопрос какое отличие веб-приложения от обычной программы?
     
  7. avt174

    avt174 Активный пользователь

    С нами с:
    5 июл 2013
    Сообщения:
    7
    Симпатии:
    0
    kosinus2012, благодарю за разъяснение, теперь мне стало понятно, почему код не работает.
    Могли бы вы подсказать, каким образом можно реализовать мою задачу?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.099
    Симпатии:
    1.243
    Адрес:
    там-сям
    понадобится новый запрос. т.е. нужен или переход по ссылке или отправка формы или аякс.
     
  9. kosinus2012

    kosinus2012 Активный пользователь

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    Как вариант, если подгружаемый объем информации не велик, повторюсь не велик, и нет условий по безопасности (например вывод пин кода который посетитель не должен видеть и т.п.), то можно выводить в диве (можно и в скрытом) весь контент. Конечно же это не выход, но решит вашу задачу целиком, зависит только от того какие данные вы собираетесь выводить, если html, тогда вариант подходит.

    Начало страницы html:
    Код (Text):
    1. <!DOCTYPE html>
    2. <html>
    3.  <head>
    4.   <meta charset="utf-8">
    5.   <title>Блоки</title>
    6.   <style>
    7.    h1 {
    8.     background: #569099;
    9.     padding: 10px;
    10.     color: #fff;
    11.    }
    12.    p {
    13.     background: #cad8d0;
    14.     padding: 10px;
    15.    }
    16.   </style>
    Блок JS:
    Код (Text):
    1. <script type="text/javascript">
    2.   function wmarkablock(pokazat, number) {
    3.         document.getElementById('block').style.display = pokazat;
    4.  
    5.     switch (number) {
    6.  
    7.       case 1:
    8.              document.getElementById('block').innerHTML = "<?php echo file_get_contents('saab.php');?>";     
    9.       break;
    10.  
    11.       case 2:
    12.              document.getElementById('block').innerHTML = "<?php echo file_get_contents('azlk.php');?>";     
    13.       break;
    14.  
    15.       default:
    16.              alert('Я таких значений не знаю')
    17.     }
    18.   }
    19.   </script>
    Продолжение страницы html:
    Код (Text):
    1.  </head>
    2.  <body>
    3. <table>
    4. <tr>
    5. <td align="center" onClick="wmarkablock('block',1);" style="cursor: hand"><b>Saab</b></td>
    6. <tr>
    7. <tr>
    8. <td align="center" onClick="wmarkablock('block',2);" style="cursor: hand"><b>Azlk</b></td>
    9. <tr>
    10. </table>
    11. <div id="w_marka">
    12.   <div id="w_marka_window">
    13.     <div class="w_marka_body">
    14.       <div id="block" class="w_marka_closebtn" onclick="wmarkablock('none'); return false" style="cursor: hand; "></div>
    15.     </div>
    16.   </div>
    17. </div>
    18.  </body>
    19. </html>
    Содержимое файлов saab.php и azlk.php
    Код (Text):
    1. <h1>Пример №1</h1><p>123456</p>
    Код (Text):
    1. <h1>Пример №2</h1><p>654321</p>
    Короткое описание. При нажатии на Saab
    Код (Text):
    1.  onClick="wmarkablock('block',1);"
    вызывается функция wmarkablock, которой в качестве параметра передается 1. Конструкция switch, которая служит для сравнения значений на равенство с различными вариантами, просматривая значении функции выбирает из списка case нужный блок для выполнения, в нашем случае это:
    Код (Text):
    1. document.getElementById('block').innerHTML = "<?php echo file_get_contents('saab.php');?>";
    В свою очередь он вставляет в див элемент данные выводимые из файла saab.php.

    Приведу html после обработки и выдачей сервером ответа:
    Код (Text):
    1. function wmarkablock(pokazat, number) {
    2. document.getElementById('block').style.display = pokazat;
    3. switch (number) {
    4. case 1:
    5. document.getElementById('block').innerHTML = "<h1>Пример №1</h1><p>123456</p>";
    6. break;
    7. case 2:
    8. document.getElementById('block').innerHTML = "<h1>Пример №2</h1><p>654321</p>";
    9. break;
    10. default:
    11. alert('Я таких значений не знаю')
    12. }
    13. }
    Вот в принципе и все;-) Нет ничего сложного, так же советую упростить вывод:
    используя таблицы стилей задав один стиль для всех <td>.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    А может проще аяксом, а?
     
  11. kosinus2012

    kosinus2012 Активный пользователь

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    А в чем будет простота решения?
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    во всём =) аякс очень удобен
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Тем, что вся предложенная вами простыня костылей никуда не годится. Если подключить ту же JQuery, то вся проблема будет решена примерно так:

    Код (Text):
    1. <script>        
    2.         $(document).ready(function(){  
    3.           $('#some_button').click(function(){          
    4.           $.ajax({  
    5.                 type: "POST",
    6.                 url: "some_script.php",  
    7.                 data: somedata,
    8.                 success: function(response){  
    9.                    foo(response);  
    10.                 }  
    11.               });
    12.           });  
    13.         });  
    14.     </script>  
    Это код, который по нажатию кнопки с id="some_button" пошлет POST-запрос с какими-то some_data на some_script.php сценарий, после чего, если получит не ошибку, а нормальный ответ, что-то с ним сделает методом foo(). Это, конечно, крайне короткая и простая реализация. Там можно прикрутить кучу интересных фич.

    Можно отсылать марку скрипту, а скрипт будет собирать сразу готовое "модальное окно" с нужной инфой (ну там, style ему наколдовать, чтобы смотрелось как модалка) и возвращать его в ответе, после чего нам нужно будет только сделать append полученного ответа, ну например к body. Все. Окно всплыло. Ну и закрытие окошка (то бишь выпиливание его как такового из DOM-а) прописать нужно тем же JS-ом.

    При этом, в отличие от вашего решения, будь хоть 2 марки, хоть 2000, код не разбухнет ни на строчку. Трафика лишнего не пойдет ни на байт. При добавлении новых марок не нужно ковырять вьюху, которая будет универсальной, а вся поддержка дальнейшая и правки будут всего в одной точке.

    Если это не проще, то я упоролся :)
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ой, ну какой ты замудрёный
    Код (Text):
    1. $.get('ajax/test.html', function(data) {
    2.   alert(data);
    3. });
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Я не замудренный, а приводящий более наглядный пример :)
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а ты фрилансишь?
     
  17. kosinus2012

    kosinus2012 Активный пользователь

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    Да, аяксом конечно же можно и нужно, если объем данных будет велик. А если пользователю необходимо вывести пару строк, то и этот код подойдет. Я предложил простой вариант исходя из тех данных, которые были предоставлены пользователем, без необходимости проверки POST и GET запросов, подключения сторонних библиотек, ведь любой запрос необходимо проверять, а это лишние телодвижения.
    Вы не упоролись;-)
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    ноуп, в плане программирования я работаю на себя. Хотя, если оно того будет стоить и будет свободное время, могу и фриланс взять.

    Добавлено спустя 3 минуты 36 секунд:
    Ну вот беда в том, что в контексте задачи, там виднеется что-то вроде эдакого справочника, где будет не две и три марки машин. Так что, боюсь, строк там будет очень очень много.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Это сколько? =)
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Есть конкретное предложение? Тогды в личку, там видно будет. А то флудим-с :)