Доброго времени суток! Может я задам совсем глупый вопрос, но как можно с помощью тега <a> вызвать функцию из php? Объясню более подробнее: у меня есть 2 php файла index.php и functions.php. Думаю про индексный файл особо объяснять не надо (там только разметка на html и немного php), а файлик функций содержит: Код (Text): <?php function addClient(){ echo 'Добавление пользователя'; } То есть по нажатию на ссылку в индексном файле, должна вызваться функция, как это реализовать? P.S. Заранее прошу прощения за возможную путаницу в описании вопроса и/или за глупость вопроса. Заранее спасибо за ответы!
Если вы хотите выполнить какой-нибудь серверный сценарий без перезагрузки страницы, то смотрите в сторону Ajax. Знакомо такое?
В двух словах не рассказать... Гляньте статейки в этом направлении для начинающих. Там в основном расписано, как это делать с помощью библиотеки jQuery, но и на чистом JS описание тоже присутствует (кстати, с примерами).
Можно попытаться так: Жмем на ссылку. Далее проверка, что кнопка нажата. Если проверка прошла, Тогда require_once functions.php Если нет, то не подгрузится.
Есть ссылка или кнопка на index.php Нажимаем, проверяем, что она isset Тогда require_once нужный файл. Тогда код в этом файле будет включен в исходный. Конечно, произойдет перезагрузка страницы, но не перенаправление P.S. код php формируется на лету По сему такая конструкция должна работать. Допустим файл index.php. В нем какие-то данные, ссылки и такая конструкция, условно: Добавлено спустя 14 минут 44 секунды: 1.php Код (Text): <?php echo "<a href=?a>Ссылка</a>"; if(isset($_GET['a'])) { require_once '2.php'; } ?> 2.php Код (Text): <?php echo 'Some code'; ?> Добавлено спустя 47 минут 10 секунд: Совсем страшная вещь, перезагрузка с сохранение значений и подгрузкой файла через require_once Код (Text): <?php if(isset($a)) { echo "<form> <input type=\"text\" name=\"user\" value=\"$user\"> <input type=\"text\" name=\"password\" value=\"$password\"> <input type=\"submit\" name=\"a\" ></form>"; require_once '2.php'; } else { echo "<form><input type=\"text\" name=\"user\"> <input type=\"text\" name=\"password\"> <input type=\"submit\" name=\"a\" ></form>"; } ?>
Код (PHP): //Установка дефолтных значений $user = ''; $password = ''; if(isset($_GET['a'])) { $user = $_GET['user']; //Условно тут происходит чистка, проверка и прочие важные операции $password = $_GET['password']; //Условно тут происходит чистка, проверка и прочие важные операции require_once '2.php'; } echo "<form> <input type=\"text\" name=\"user\" value=\"$user\"> <input type=\"text\" name=\"password\" value=\"$password\"> <input type=\"submit\" name=\"a\" ></form>";
Я не говорил про GET У нас только (isset($a)) Нам единственное, нужно сохранить данные, введенные ранее, чтобы пользователь мог что-то поправить. И вернуть контент главной страницы. Добавлено спустя 45 секунд: require_once '2.php'; Кладем над формой. Добавлено спустя 24 минуты 51 секунду: Для полной наглядности: 1.php Код (Text): <?php if(isset($a)) { require_once '2.php'; echo "<form method=\"post\"> <input type=\"text\" name=\"user\" value=\"$user\"> <input type=\"text\" name=\"password\" value=\"$password\"> Try for 30 times <input type=\"text\" name=\"countt\" value=\"$countt\"> <input type=\"submit\" name=\"a\" ></form>"; } else { $countt=0; echo "<form method=\"post\"><input type=\"text\" name=\"user\"> <input type=\"text\" name=\"password\"> <input type=\"submit\" name=\"a\" ></form>"; } ?> 2.php Код (Text): <? echo 'Some code'; if($password==="123" && $user==="admin") { echo "That's ok"; ++$countt; } else { ++$countt; echo "Nothing done"; } if($countt==3) { echo " <strong>You have done it!</strong>"; } if($countt==5) { echo " <strong>You have done it Again!</strong>"; } if($countt==8) { echo " <strong>Very well!</strong>"; } ?> В итоге: страница та же. Введенные данные остались в форме... Вопрос был, как с помощью тега а вызвать функцию, а вы сразу про ajax Igordata, начальные данные - первая загрузка страницы - будут до условия и после else.
Автор не указывает, важна ли перезагрузка страницы. 1. Если важно, чтобы страница не перезагружалась, тогжа ajax, не спорю. 2. Если все равно, но нужно остаться на той же странице, то имеем такую конструкцию. Для примера привел с формой: Код (Text): Данные, html Условие если переменная установлена, выполнить вложенный файл или еще что-то Подгрузить форму с сохранением значения value Иначе Не выполнять вложенный файл Просто загрузить ту же форму (без значений) При первом открытии страницы выполняется Код (Text): Начало скрипта, Данные, html И то, что идет после Иначе Так как переменная не установлена. Пишем в поля данные, нажимаем, страница перезагружается, но данные в полях есть, поэтому выполнится условие до Иначе, выполнится вложенный скрипт и вернется форма, но с сохранение введенных данных в форму. P.S. Естественно вернуть заполненные поля, вероятно, можно более простым способом. Повторюсь, вопрос звучал: Код (Text): как можно с помощью тега <a> вызвать функцию из php? Ответ: Код (Text): <?php echo "<a href=?a>Ссылка</a>"; if(isset($_GET['a'])) { require_once '2.php'; } ?>
ну я вроде такой же код написал примерно. Просто там else блок не требуется. я вот к чему твой код подправил. не более того.
Я понял, просто у меня else был нужен для того, чтобы форма грузилась только один раз, независимо от условия - фокус, для примера того - что можно таким способом сделать + в форме метод post что избавляется от лишних вещей в адресно строке
Если убрать форму 2-ую за блок else, и убрать сам else загрузит две формы, одну по дефолту, вторую из условия. Короче фокус, не заморачивайся, просто пример такой в голову пришел В принципе, как у тебя правильно, но я заморил этот пример пока думал над ним... Мой пример с формой для реального применения вряд ли подойдет... Хотя если надо вывести еще одно или несколько полей снизу после первой отправки, то можно, наверное, использовать.
Прошу прощения, конечно же, я перемудрил, засиделся с другим кодом, поэтому начал изобретать всякие обманки-велосипеды. Конечно, таким должен быть код. Код (Text): <?php ++$countt; echo "<form method=\"post\"> <input type=\"text\" name=\"user\" value=\"$user\"> <input type=\"text\" name=\"password\" value=\"$password\"> Try for 30 times <input type=\"text\" name=\"countt\" value=\"$countt\"> <input type=\"submit\" name=\"a\" ></form>"; if(isset($a)) { if($countt>2) { echo "<input type=\"text\" name=\"countt\" value=\"Some2\">"; } if($countt>3) { echo "<input type=\"text\" name=\"countt\" value=\"Some3\">"; } if($countt>4) { echo "<input type=\"text\" name=\"countt\" value=\"Some4\">"; } if($countt>5) { echo "<input type=\"text\" name=\"countt\" value=\"Some5\">"; } if($countt>5) { echo "<input type=\"text\" name=\"countt\" value=\"Some5\">"; } } ?>
Не. Всё равно надо форму после обработки цеплять. А то лишаешься нуля в $countt. И условия надо делать через case или elseif и от большего к меньшему. Иначе они у тебя все сразу отработают на пятерке, а не один наибольший.
Нуль пропадает. Просто если мы убрали else, то уже нельзя поставить count=0 в начало . Тогда инкремент работать не будет. Это факт, количество проверок увеличивается с каждой перезагрузкой, если идет инкремент. Т.е. возвращаемся предыдущей к конструкции. Switch ведь для выбора. А есть вариант, чтобы по счетчику дописывать поля по одному за щелчок, любые данные, текст графика еще что-то, при том, чтобы дописывалось вниз, то опять та же конструкция с двумя формами.
Хотя... вообще count=0 где бы то ни было не имеет смысла. Поэтому остается конструкция, когда форма одна вне условия, наверху.
Если идет так : переменная=0 ++переменная Мы сбрасываем до нуля, икрементируем, при перезагрузке снова сбрасываем. Тогда переменная в 0 должна быть в каком-то условии. Т.е. можно: ++$i; $$i-=1;