@4ex0V

Помогите разобраться с Action в form?

Здравствуйте!

Помогите, пожалуйста, понять:

<form action="login.php" method="POST" >
     <input type="submit" name="a" value="enter">
</form>


Собственно, вопрос такой: пользователь вводит свои данные (логин и пароль) на index.php, к примеру. Каким образом необходимо задать action и организовать авторизацию, чтобы не перенаправлять авторизацию в другой файл, а обработать ее в index.php?

<form action="index.php" method="POST" onsubmit="check_dataLogin()">
...
</form>


Что-то такого типа? То есть, по нажатию кнопки, будем вызывать php-функцию внутри index.php?

Спасибо!

С уважением.
  • Вопрос задан
  • 33294 просмотра
Решения вопроса 2
DevMan
@DevMan Куратор тега PHP
onsubmit – событие javascript и никакого отношения к PHP не имеет.

Что касается вашего вопроса, то разместите код проверки логина в index.php.
Ваша форма:
<form action="login.php" method="post" >
      login:<input type="text" name="login" value="">
      password:<input type="text" name="password" value="">
     <input type="submit" name="dologin" value="enter">
</form>

index.php:
if( isset( $_POST[ 'dologin' ] ) ) {
     // выполняем авторизацию
}
Ответ написан
Комментировать
@victimofbrainlessness
Помоему автор не совсем удачно задал вопрос.

Для любого программиста замена action и «не перенаправлять авторизацию в другой файл, а обработать ее в index.php» означает: вместо запроса к login.php сделать запрос к index.php и внутри него подгрузить модуль авторизации.
В этом случае ответ DevMan вполне себе приемлемое решение.

Но наличие onsubmit=«check_dataLogin()» настораживает и наводит на мысль, что автор все таки хочет прикрутить авторизацию через ajax.

Конкретные примеры кода приводить не буду, ибо вы не указали пользуетесь каким либо JS фреймворком или пишите все от руки в ноутпэде.

Могу только обратить внимание на несколько подводных камней.
1. ваша функуция check_dataLogin() должна всегда возвращать false, в противном случае после того как она отработает бразуер пошлет стандартный post запрос на сервер (не ajax)
2. оставьте form action=login.php. это ваш fallback на случай если в браузере отключен JavaScript.
3. результат у login.php должен личный для обыного post запроса и для ajax: может быть редирект на index.php, либо снова форма логина ( если пароль не верный), или же json для вашего ajax запроса (а может и не json, как реализуете так и будет)

П.С. Я человек новый на хабре и не совсем уверен что в Q&A это у местно, но в мирей айти есть некая этика как задавать вопросы. Практически на всех irc каналах или maillist, в которых я учавствую, подобный вопрос могут проигнорирывать или заклевать вас за «отсутсвие культуры общения». Если повезет с вами сыграют в 10 вопросов, пытаясь выяснить чего же вы все таки добиваетесь.
Для того чтобы вам помогали, ответы были развернутые и быстрые, научитесь формулирывать вопросы в понятной для других форме. Ведь не даром говорят что правильно поставленный вопрос содержит в себе половину ответа.

может это поможет вам goo.gl/EiskH
и еще (без перевода прадва) whathaveyoutried.com
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Tramvai
Делайте как и делали. Внутри индекс проверяете, если это пост запрос, валидируете данные из формы. Если форма валидная, то логините пользователя. После успешного логина, нужно делать редирект, куда вам нужно, хоть это даже тот самый файл.
Фишка в том, что после «сохранения» форм, нужно делать редиректы. Иначе, если пользователь обновит страницу, она снова будет отправлять порс запросы скрипту. Так всегда нужно делать.
Если форма не валидная, заполняете ее сообщениями об ошибках и введенными данными, и опять показываете пользователю.
Когда освоите такие подходы, тогда и смотрите в сторону Ajax. Если а form action ничего не укажите или укажите index.php ничего не измениться, по умолчанию должен отработать index.php, но это зависит от настроек на сервере. Лучше указывать action конкретно и проблем никогда не будет.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Нужно оставить атрибут пустым. Хотя обрабатывать запрос на той же странице не совсем по феншую, ну да ладно.
Ответ написан
dekameron
@dekameron
А может стОит сделать передачу авторизационных данных с помощью Ajax?
Ввели логин + пароль,
фоновый сабмин на нужный контроллер,
если все ОК — обновляем страницу (если нужно, конечно), а если нет — выводим ошибки.
Ответ написан
Комментировать
@4ex0V Автор вопроса
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы