настройка формы как функция во внешнем php-файле

Я новичок в PHP (несколько), и я осмотрелся и не могу найти какую-либо информацию, которая подходит именно к моим вопросам, так что вот она;

Предположим, я объявляю форму, с двумя полями и кнопкой отправки;

<form name = "tryLogin" action = "logIn()" method = "post"> Username: <input type = "text" name = "username" placeholder = "username.."><br> Password: <input type = "text" name = "password" placeholder = "password.."><br> <input type = "submit" value = "Submit"> </form> 

Здесь вы можете увидеть, что я попытался установить действие как функцию «logIn ()», которую я уже включил в заголовок этого файла.

Во внешнем php-файле у меня есть следующее:

 function logIn() { if($_POST['username'] == "shane" && $_POST['password'] == "shane") { $_SESSION['loggedIn'] = '1'; $_SESSION['user'] = $_POST['username']; } header ("Location: /index.php"); } function logOut() { $_SESSION['loggedIn'] = '0'; header ("Location: /index.php"); } 

(Игнорируйте любые слова «y'shouldn't сделать это, сделайте это», я просто рисую картину здесь).

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

Как говорили другие, вы не можете автоматически направлять сообщение в функцию, но можете динамически решать, что делать на стороне PHP, в зависимости от того, какая форма отправлена ​​с кодом PHP. Один из способов – определить вашу логику с помощью скрытого ввода, чтобы вы могли обрабатывать различные действия на одной странице, например:

 <form name="tryLogin" action="index.php" method="post"> <input type="hidden" name="action" value="login" /> Username: <input type="text" name="username" placeholder="username.."><br /> Password: <input type="text" name="password" placeholder="password.."><br /> <input type="submit" value="Submit"> </form> <form name="otherform" action="index.php" method="post"> <input type="hidden" name="action" value="otheraction" /> Type something: <input type="text" name="something"><br /> <input type="submit" value="Submit"> </form> 

а затем в вашем PHP:

 if (isset($_POST['action'])) { switch($_POST['action']) { case 'login': login(); break; case 'otheraction': dosomethingelse(); break; } } 

Нет, вы отправляете форму на страницу, и вы запускаете свою функцию, если форма отправлена:

Html:

 <form action="index.php" method="post"> 

PHP (index.php):

 if ($_SERVER['REQUEST_METHOD'] == "POST"){ // Run your function login(); } 

Чтобы ответить на ваш вопрос, да , вы делаете что-то неправильно. Однако это легко устранить.

Действие в форме – это то, где оно отправляет форму – то есть страницу для отправки запроса. Поскольку вы говорите, что ваш код находится «в верхней части страницы», вам нужно отправить форму обратно на страницу, на которой она находится. Таким образом, вы можете либо поместить полный URL-адрес страницы в действие, либо просто оставить его пустым:

 <form name = "tryLogin" action = "" method = "post"> 

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

Например, в форме HTML попробуйте добавить:

 <input type="hidden" name="task" value="logIn" /> 

Затем в PHP-коде попробуйте добавить следующее:

 if (isset($_POST['task'])) { if ($_POST['task'] == 'logIn') { // the user is trying to log in; call the logIn() function logIn(); } else if ($_POST['task'] == 'logOut') { // the user is trying to log out; call the logOut() function logOut(); } } 

Этот код проверяет, была ли форма отправлена, проверяя, было ли поле task опубликовано. Затем он проверяет значение. Если это logIn , будет logIn() функция logIn() . Альтернативно, если это logOut , logOut() функция logOut() .

Чтобы создать форму выхода, вы соответствующим образом скорректировали действие и добавили скрытое поле к тому, что было указано выше, но со значением logOut .