Как вызвать PHP-файл из HTML или Javascript

Я долго смотрел вокруг, и я не могу найти нигде, который отвечает на этот, казалось бы, основной вопрос. Меня не волнует, будет ли страница перезагружать или отображать результаты немедленно; Я просто хочу, чтобы на моем веб-сайте кнопка запускала файл PHP. Вот и все. И я обнаружил, что на всех веб-сайтах либо рассказывается, как напрямую запустить PHP-код в вашем HTML-коде, либо сказать вам использовать ajax. Я буду использовать ajax, если это окажется необходимым, но было время до того, как существовал ajax, используемый PHP, поэтому я думаю, что есть более простой способ. Если я могу написать код внутри HTML просто отлично, почему я не могу просто ссылаться на файл для него там или сделать простой вызов для него в Javascript?

Если окажется, что ajax – единственный путь вперед, что мне нужно знать о нем, чтобы вызвать PHP-файл, который будет создавать текстовый файл при нажатии кнопки? Я делаю простой блог-сайт для себя, и у меня есть код для сайта и javascript, который может занять пост, который я пишу в textarea и сразу его отображать. Я просто хочу связать его с файлом PHP, который создаст постоянную запись в блоге на сервере, чтобы при перезагрузке страницы сообщение все еще там.

Спасибо, что нашли время, чтобы прочитать и ответить.


Как сделать кнопку вызова PHP?

Меня не волнует, будет ли страница перезагружать или отображать результаты немедленно;

Хорошо!

Примечание . Если вы не хотите обновлять страницу, смотрите « Хорошо … но как я могу использовать Ajax в любом случае? » Ниже.

Я просто хочу, чтобы на моем веб-сайте кнопка запускала файл PHP.

Это можно сделать с помощью одной кнопки:

 <form action=""> <input type="submit" value="my button"/> </form> 

Вот и все.

Довольно много. Также обратите внимание, что есть случаи, когда ajax – это действительно путь.

Это зависит от того, чего вы хотите. В общих чертах вам нужен только ajax, если вы хотите избежать загрузки страницы. Тем не менее вы сказали, что вас это не волнует.


Почему я не могу напрямую вызвать PHP из JavaScript?

Если я могу написать код внутри HTML просто отлично, почему я не могу просто ссылаться на файл для него там или сделать простой вызов для него в Javascript?

Потому что PHP-код не в HTML just fine . Это иллюзия, созданная тем, что работает большинство языков сценариев на стороне сервера (включая PHP, JSP и ASP). Этот код существует только на сервере, и он недоступен для клиента (браузера) без какого-либо удаленного вызова.

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

Если вы не используете форму (как показано выше), вы можете сделать этот удаленный вызов с JavaScript с помощью маленькой вещи Ajax . Вы также можете подумать, можно ли сделать то, что вы хотите сделать в PHP, непосредственно в JavaScript.


Как вызвать другой файл PHP?

Используйте форму для вызова. Вы можете заставить его направить пользователя к файлу участника:

 <form action="myphpfile.php"> <input type="submit" value="click on me!"> </form> 

Пользователь попадет на страницу myphpfile.php . Чтобы заставить его работать для текущей страницы, установите действие на пустую строку (это то, что я сделал в примере, который я дал вам раньше).

Я просто хочу связать его с файлом PHP, который создаст постоянную запись в блоге на сервере, чтобы при перезагрузке страницы сообщение все еще там.

Вы хотите сделать операцию на сервере, вы должны внести свою форму в нужные поля (даже если type="hidden" и использовать POST ):

 <form action="" method="POST"> <input type="text" value="default value, you can edit it" name="myfield"> <input type="submit" value = "post"> </form> 

Что мне нужно знать об этом, чтобы вызвать PHP-файл, который будет создавать текстовый файл при нажатии кнопки?

см.: Как записать файл в PHP .


Как вы получаете данные из POST на сервере?

Я рад, что вы спросите … Так как вы новичок , я дам вам небольшой шаблон, который вы можете использовать:

 <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { //Ok we got a POST, probably from a FORM, read from $_POST. var_dump($_PSOT); //Use this to see what info we got! } else { //You could assume you got a GET var_dump($_GET); //Use this to see what info we got! } ?> <!DOCTYPE html> <html lang="en"> <head> <meta char-set="utf-8"> <title>Page title</title> </head> <body> <form action="" method="POST"> <input type="text" value="default value, you can edit it" name="myfield"> <input type="submit" value = "post"> </form> </body> </html> 

Примечание: вы можете удалить var_dump , это просто для целей отладки.


Как мне…

Я знаю следующий этап, вы будете спрашивать, как:

  1. как передать переменные из файла PHP в другой?
  2. как запомнить пользователя / сделать логин?
  3. как избежать этого анонимного сообщения появляется при перезагрузке страницы?

Для этого есть один ответ: сеансы.

Я дам более обширный шаблон для Post-Redirect-Get

 <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_PSOT); //Do stuff... //Write results to session session_start(); $_SESSION['stuff'] = $something; //You can store stuff such as the user ID, so you can remeember him. //redirect: header('Location: ', true, 303); //The redirection will cause the browser to request with GET //The results of the operation are in the session variable //It has empty location because we are redirecting to the same page //Otherwise use `header('Location: anotherpage.php', true, 303);` exit(); } else { //You could assume you got a GET var_dump($_GET); //Use this to see what info we got! //Get stuff from session session_start(); if (array_key_exists('stuff', $_SESSION)) { $something = $_SESSION['stuff']; //we got stuff //later use present the results of the operation to the user. } //clear stuff from session: unset($_SESSION['stuff']); //set headers header('Content-Type: text/html; charset=utf-8'); //This header is telling the browser what are we sending. //And it says we are sending HTML in UTF-8 encoding } ?> <!DOCTYPE html> <html lang="en"> <head> <meta char-set="utf-8"> <title>Page title</title> </head> <body> <?php if (isset($something)){ echo '<span>'.$something.'</span>'}?>; <form action="" method="POST"> <input type="text" value="default value, you can edit it" name="myfield"> <input type="submit" value = "post"> </form> </body> </html> с <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_PSOT); //Do stuff... //Write results to session session_start(); $_SESSION['stuff'] = $something; //You can store stuff such as the user ID, so you can remeember him. //redirect: header('Location: ', true, 303); //The redirection will cause the browser to request with GET //The results of the operation are in the session variable //It has empty location because we are redirecting to the same page //Otherwise use `header('Location: anotherpage.php', true, 303);` exit(); } else { //You could assume you got a GET var_dump($_GET); //Use this to see what info we got! //Get stuff from session session_start(); if (array_key_exists('stuff', $_SESSION)) { $something = $_SESSION['stuff']; //we got stuff //later use present the results of the operation to the user. } //clear stuff from session: unset($_SESSION['stuff']); //set headers header('Content-Type: text/html; charset=utf-8'); //This header is telling the browser what are we sending. //And it says we are sending HTML in UTF-8 encoding } ?> <!DOCTYPE html> <html lang="en"> <head> <meta char-set="utf-8"> <title>Page title</title> </head> <body> <?php if (isset($something)){ echo '<span>'.$something.'</span>'}?>; <form action="" method="POST"> <input type="text" value="default value, you can edit it" name="myfield"> <input type="submit" value = "post"> </form> </body> </html> 

Пожалуйста, посмотрите на php.net для вызова любой функции, которую вы не узнаете. Также – если вы еще этого не сделали – получите хороший учебник по HTML5.

Кроме того, используйте UTF-8, потому что UTF-8 !


Примечания :

Я делаю простой блог-сайт для себя, и у меня есть код для сайта и javascript, который может занять пост, который я пишу в текстовом поле, и сразу его отображать.

Если вы используете CMS (Codepress, Joomla, Drupal … и т. Д.)? Это наводит некоторые ограничения на то, как вы должны что-то делать.

Кроме того, если вы используете фреймворк, вы должны посмотреть их документацию или спросить на своем форуме / списке рассылки / странице обсуждения / контакте или попросить авторов.


Хорошо … но как я могу использовать Ajax?

Ну … Ajax облегчается некоторыми библиотеками JavaScript. Поскольку вы начинаете, я буду рекомендовать jQuery .

Итак, давайте отправим что-то на сервер через Ajax с помощью jQuery, я буду использовать $ .post вместо $ .ajax для этого примера.

 <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_PSOT); header('Location: ', true, 303); exit(); } else { var_dump($_GET); header('Content-Type: text/html; charset=utf-8'); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta char-set="utf-8"> <title>Page title</title> <script> function ajaxmagic() { $.post( //call the server "test.php", //At this url { field: "value", name: "John" } //And send this data to it ).done( //And when it's done function(data) { $('#fromAjax').html(data); //Update here with the response } ); } </script> </head> <body> <input type="button" value = "use ajax", onclick="ajaxmagic()"> <span id="fromAjax"></span> </body> </html> 

Вышеприведенный код отправит запрос POST на страницу test.php .

Примечание . Вы можете смешать sessions с ajax и ajax вещами, если хотите.


Как мне…

  1. Как подключиться к базе данных?
  2. Как предотвратить SQL-инъекцию?
  3. Почему я не должен использовать функции Mysql_ *?

… для этих или любых других, пожалуйста, задайте еще вопросы. Это слишком много для этого.

Вы ищете jQuery Ajax . Он создает асинхронное соединение с вашим php-скриптом

Я просто хочу, чтобы кнопка на моем веб-сайте делала запуск PHP-файла

 <form action="my.php" method="post"> <input type="submit"> </form> 

Вообще говоря, однако, если вы не отправляете новые данные на сервер, который нужно сохранить, вы просто используете ссылку.

 <a href="my.php">run php</a> 

(Хотя вы должны использовать текст ссылки, который описывает, что происходит с точки зрения пользователя, а не с серверами)


Я делаю простой блог-сайт для себя, и у меня есть код для сайта и javascript, который может занять пост, который я пишу в текстовом поле, и сразу его отображать. Я просто хочу связать его с файлом PHP, который создаст постоянную запись в блоге на сервере, чтобы при перезагрузке страницы сообщение все еще там.

Это трюк.

Во-первых, вам нужно использовать форму и POST (поскольку вы отправляете данные для хранения).

Затем вам нужно где-то хранить данные. Обычно это делается с использованием базы данных. Читайте в библиотеке PDO для PHP. Это стандартный способ взаимодействия с базами данных.

Затем вам нужно снова вытащить данные. Самый простой способ – использовать строку запроса для передачи первичного ключа для строки базы данных с записью, которую вы хотите отобразить.

 <a href="showBlogEntry.php?entry_id=123">...</a> 

Убедитесь, что вы также прочитали SQL-инъекцию и XSS.

Как вы уже сказали в своем вопросе, у вас есть несколько вариантов. Очень простой подход – использовать тег, ссылающийся на ваш PHP-файл в атрибуте метода. Однако, как можно более эзотерически, AJAX является более полным подходом. Учитывая, что вызов AJAX (в сочетании с jQuery) может быть таким простым, как:

 $.post("yourfile.php", {data : "This can be as long as you want"}); 

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

Вам просто нужно отправить данные формы в функцию php-файла вставки, см. Ниже 🙂

 class DbConnect { // Database login vars private $dbHostname = ''; private $dbDatabase = ''; private $dbUsername = ''; private $dbPassword = ''; public $db = null; public function connect() { try { $this->db = new PDO("mysql:host=".$this->dbHostname.";dbname=".$this->dbDatabase, $this->dbUsername, $this->dbPassword); $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "It seems there was an error. Please refresh your browser and try again. ".$e->getMessage(); } } public function store($email) { $stm = $this->db->prepare('INSERT INTO subscribers (email) VALUES ?'); $stm->bindValue(1, $email); return $stm->execute(); } }