За последние 24 часа нас посетили 18022 программиста и 1599 роботов. Сейчас ищут 877 программистов ...

Вызов функции в html

Тема в разделе "PHP для новичков", создана пользователем job3507, 5 сен 2014.

  1. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Доброго времени суток!
    Может я задам совсем глупый вопрос, но как можно с помощью тега <a> вызвать функцию из php?
    Объясню более подробнее: у меня есть 2 php файла index.php и functions.php. Думаю про индексный файл особо объяснять не надо (там только разметка на html и немного php), а файлик функций содержит:
    Код (Text):
    1. <?php
    2. function addClient(){
    3.     echo 'Добавление пользователя';
    4. }
    То есть по нажатию на ссылку в индексном файле, должна вызваться функция, как это реализовать?

    P.S. Заранее прошу прощения за возможную путаницу в описании вопроса и/или за глупость вопроса.
    Заранее спасибо за ответы!
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Если вы хотите выполнить какой-нибудь серверный сценарий без перезагрузки страницы, то смотрите в сторону Ajax. Знакомо такое?
     
  3. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Название то знакомое, вот только опыта и знаний нет.))))
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В двух словах не рассказать... Гляньте статейки в этом направлении для начинающих. Там в основном расписано, как это делать с помощью библиотеки jQuery, но и на чистом JS описание тоже присутствует (кстати, с примерами).
     
  5. job3507

    job3507 Новичок

    С нами с:
    31 дек 2013
    Сообщения:
    16
    Симпатии:
    0
    Спасибо за помощь!
     
  6. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Можно попытаться так:
    Жмем на ссылку. Далее проверка, что кнопка нажата.
    Если проверка прошла,
    Тогда
    require_once functions.php
    Если нет, то не подгрузится.
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    что вы имеете в виду?
     
  8. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Есть ссылка или кнопка на index.php
    Нажимаем, проверяем, что она isset
    Тогда require_once нужный файл. Тогда код в этом файле будет включен в исходный.
    Конечно, произойдет перезагрузка страницы, но не перенаправление

    P.S. код php формируется на лету
    По сему такая конструкция должна работать. Допустим файл index.php.
    В нем какие-то данные, ссылки и такая конструкция, условно:
    Добавлено спустя 14 минут 44 секунды:
    1.php
    Код (Text):
    1.  
    2. <?php
    3. echo "<a href=?a>Ссылка</a>";
    4.  if(isset($_GET['a'])) {
    5.    require_once '2.php';
    6. }
    7. ?>
    2.php

    Код (Text):
    1. <?php
    2. echo 'Some code';
    3. ?>
    Добавлено спустя 47 минут 10 секунд:
    Совсем страшная вещь, перезагрузка с сохранение значений и подгрузкой файла через require_once :)
    Код (Text):
    1. <?php
    2.  if(isset($a)) {
    3.  
    4. echo   "<form>
    5. <input type=\"text\" name=\"user\" value=\"$user\">
    6.  <input type=\"text\" name=\"password\" value=\"$password\">
    7.   <input type=\"submit\" name=\"a\" ></form>";
    8.  
    9.  require_once '2.php';
    10.  
    11. } else {
    12.  
    13. echo   "<form><input type=\"text\" name=\"user\">
    14.         <input type=\"text\" name=\"password\">
    15.          <input type=\"submit\" name=\"a\" ></form>";
    16. }
    17. ?>
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1. //Установка дефолтных значений
    2. $user = '';
    3. $password = '';
    4. if(isset($_GET['a'])) {
    5.   $user = $_GET['user']; //Условно тут происходит чистка, проверка и прочие важные операции
    6.   $password = $_GET['password']; //Условно тут происходит чистка, проверка и прочие важные операции
    7.   require_once '2.php';
    8. }
    9. echo   "<form>
    10.   <input type=\"text\" name=\"user\" value=\"$user\">
    11.   <input type=\"text\" name=\"password\" value=\"$password\">
    12.   <input type=\"submit\" name=\"a\" ></form>";
     
  10. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Я не говорил про GET
    У нас только (isset($a))
    Нам единственное, нужно сохранить данные, введенные ранее, чтобы пользователь мог что-то поправить. И вернуть контент главной страницы.

    Добавлено спустя 45 секунд:
    require_once '2.php';
    Кладем над формой.

    Добавлено спустя 24 минуты 51 секунду:
    Для полной наглядности:
    1.php
    Код (Text):
    1. <?php
    2.  
    3.  
    4.  if(isset($a)) {
    5.  
    6.   require_once '2.php';
    7.  
    8. echo   "<form method=\"post\">
    9. <input type=\"text\" name=\"user\" value=\"$user\">
    10.  <input type=\"text\" name=\"password\" value=\"$password\">
    11.  Try for 30 times
    12.   <input type=\"text\" name=\"countt\" value=\"$countt\">
    13.   <input type=\"submit\" name=\"a\" ></form>";
    14.  
    15.  
    16.  
    17. } else {
    18. $countt=0;
    19. echo   "<form method=\"post\"><input type=\"text\" name=\"user\">
    20.         <input type=\"text\" name=\"password\">
    21.          <input type=\"submit\" name=\"a\" ></form>";
    22. }
    23. ?>
    2.php
    Код (Text):
    1. <?
    2. echo 'Some code';
    3.  if($password==="123" && $user==="admin") {
    4. echo "That's ok";
    5. ++$countt;
    6. }
    7. else {
    8. ++$countt;
    9. echo "Nothing done";
    10.  
    11. }
    12. if($countt==3) {
    13.  
    14. echo " <strong>You have done it!</strong>";
    15.  
    16. }
    17.  
    18. if($countt==5) {
    19.  
    20. echo " <strong>You have done it Again!</strong>";
    21.  
    22. }
    23.  
    24. if($countt==8) {
    25.  
    26. echo " <strong>Very well!</strong>";
    27.  
    28. }
    29. ?>
    В итоге: страница та же. Введенные данные остались в форме...
    Вопрос был, как с помощью тега а вызвать функцию, а вы сразу про ajax

    Igordata, начальные данные - первая загрузка страницы - будут до условия и после else.
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понял
     
  12. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Автор не указывает, важна ли перезагрузка страницы.
    1. Если важно, чтобы страница не перезагружалась, тогжа ajax, не спорю.
    2. Если все равно, но нужно остаться на той же странице, то имеем такую конструкцию.
    Для примера привел с формой:
    Код (Text):
    1.  
    2. Данные, html
    3.   Условие если переменная установлена,
    4.    выполнить вложенный файл или еще что-то
    5.      Подгрузить форму с сохранением значения value
    6.  Иначе
    7. Не выполнять вложенный файл
    8.   Просто загрузить ту же форму (без значений)
    При первом открытии страницы выполняется
    Код (Text):
    1.  
    2. Начало скрипта, Данные, html
    3. И то, что идет после Иначе
    Так как переменная не установлена.
    Пишем в поля данные, нажимаем, страница перезагружается,
    но данные в полях есть, поэтому выполнится условие до Иначе, выполнится вложенный скрипт
    и вернется форма, но с сохранение введенных данных в форму.

    P.S. Естественно вернуть заполненные поля, вероятно, можно более простым способом.

    Повторюсь, вопрос звучал:
    Код (Text):
    1.  как можно с помощью тега <a> вызвать функцию из php?
    Ответ:
    Код (Text):
    1. <?php
    2. echo "<a href=?a>Ссылка</a>";
    3.  if(isset($_GET['a'])) {
    4.    require_once '2.php';
    5. }
    6. ?>
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну я вроде такой же код написал примерно. Просто там else блок не требуется. я вот к чему твой код подправил. не более того.
     
  14. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Я понял, просто у меня else был нужен для того, чтобы форма грузилась только один раз, независимо от условия - фокус, для примера того - что можно таким способом сделать :)
    + в форме метод post :) что избавляется от лишних вещей в адресно строке
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    она у тебя в обоих случаях есть. не понял опять.
     
  16. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Если убрать форму 2-ую за блок else, и убрать сам else загрузит две формы, одну по дефолту, вторую из условия.
    Короче фокус, не заморачивайся, просто пример такой в голову пришел
    В принципе, как у тебя правильно, но я заморил этот пример пока думал над ним...

    Мой пример с формой для реального применения вряд ли подойдет...
    Хотя если надо вывести еще одно или несколько полей снизу после первой отправки, то можно, наверное, использовать.
     
  17. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Прошу прощения, конечно же, я перемудрил, засиделся с другим кодом, поэтому начал изобретать всякие обманки-велосипеды. Конечно, таким должен быть код.
    Код (Text):
    1. <?php
    2.  ++$countt;
    3. echo   "<form method=\"post\">
    4. <input type=\"text\" name=\"user\" value=\"$user\">
    5.  <input type=\"text\" name=\"password\" value=\"$password\">
    6.  Try for 30 times
    7.   <input type=\"text\" name=\"countt\" value=\"$countt\">
    8.   <input type=\"submit\" name=\"a\" ></form>";  
    9.  
    10.  if(isset($a)) {
    11.  
    12.   if($countt>2) {
    13.    echo "<input type=\"text\" name=\"countt\" value=\"Some2\">";
    14.  }
    15.   if($countt>3) {
    16.   echo "<input type=\"text\" name=\"countt\" value=\"Some3\">";
    17.  }
    18.    if($countt>4) {
    19.  echo "<input type=\"text\" name=\"countt\" value=\"Some4\">";
    20.  }
    21.     if($countt>5) {
    22.  echo "<input type=\"text\" name=\"countt\" value=\"Some5\">";
    23.  }
    24.   if($countt>5) {
    25.  echo "<input type=\"text\" name=\"countt\" value=\"Some5\">";
    26.  }
    27.  
    28. }
    29.  
    30. ?>
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Не. Всё равно надо форму после обработки цеплять. А то лишаешься нуля в $countt. И условия надо делать через case или elseif и от большего к меньшему. Иначе они у тебя все сразу отработают на пятерке, а не один наибольший.
     
  19. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Нуль пропадает. Просто если мы убрали else, то уже нельзя поставить count=0 в начало .
    Тогда инкремент работать не будет.
    Это факт, количество проверок увеличивается с каждой перезагрузкой, если идет инкремент.

    Т.е. возвращаемся предыдущей к конструкции.
    Switch ведь для выбора.
    А есть вариант, чтобы по счетчику дописывать поля по одному за щелчок, любые данные, текст графика еще что-то, при том, чтобы дописывалось вниз, то опять та же конструкция с двумя формами.
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А инкремент можно после делать.
     
  21. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Хотя... вообще count=0 где бы то ни было не имеет смысла. Поэтому остается конструкция, когда форма одна вне условия, наверху.
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Имеет такое же как и 1 у тебя сейчас. Ты просто теряешь одно значение.
     
  23. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Если идет так :
    переменная=0
    ++переменная
    Мы сбрасываем до нуля, икрементируем, при перезагрузке снова сбрасываем.
    Тогда переменная в 0 должна быть в каком-то условии.
    Т.е. можно:
    ++$i;
    $$i-=1;
     
  24. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты можешь сначала делать всё, а потом только плюсовать и отправлять переменную на страницу.