Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   переменная $_POST и JS (https://javascript.ru/forum/misc/50712-peremennaya-%24_post-i-js.html)

arimanecro 08.10.2014 15:59

переменная $_POST и JS
 
Приветствую.
В джаве я ноль, поэтому прошу не грузить терминологией :thanks:

<form method="post">
<input name="submit" type="submit" class='btn' id="submit"></form>


<?php if(empty ($_POST['login'])) {?>

<script>
document.querySelector('input.btn').onclick = function(){
swal("Password or Login incorrect!");
return false;
};
</script>

<?php
} else {echo 'login correct';}
?>

Данная ф-ия выполняет появление красивого окошка с предупреждением.

Проблемка состоит в следующем...

При else, все равно срабатывает скрипт и само else - echo 'login correct'; -- не срабатывает. Если убрать из функции return false, то будет тоже самое, только окошко будет появляться на миллисекунды и исчезать.

Как сделать так, чтобы данная ф-ия срабатывала, согласно указанным условиям PHP?

Заранее спасибо :thanks:

Viral 08.10.2014 16:06

Цитата:

Сообщение от arimanecro
При else, все равно срабатывает скрипт и само else - echo 'login correct'; -- не срабатывает.

так может быть это мифическое else не выполняется вовсе и $_POST['login'] пустой?

Safort 08.10.2014 16:10

Вряд ли тут помогут, ведь джаву тут мало кто знает.

arimanecro 08.10.2014 16:13

Viral,

else выполняется, как только я вписываю любые символы, но при этом джаву-функцию надо убрать.

Задумка здесь оч. простая, если логин пустой, должно вылезти окно с предупреждением, если непустой, то просто надпись 'login correct.

voral 08.10.2014 16:51

Цитата:

Сообщение от arimanecro (Сообщение 334078)
Viral,
Задумка здесь оч. простая, если логин пустой, должно вылезти окно с предупреждением, если непустой, то просто надпись 'login correct.

1. Закралось у меня сомнение: а файл то вы с сервера запрашиваете?
2. Если вам нужна только проверка на пустоту - зачем вообще доводить до php:
2.1 Сейчас у элементов input появился атрибут requred указываете и браузер сам заботится о заполненности
2.2. Обработайте событие сабимита формы. И перед отправкой в js проверьте заполненость. Если все ок отправляйте, иначе выводите свое красивое окно

Да и поля login что то не видно....

arimanecro 08.10.2014 17:05

voral,

мой пример это примитивный набросок :)
В оригинале, у меня в пхп-форме куча проверок, регулярки и т.д.

Так вот, когда при логировании не совпадает пароль или логин, я хочу чтобы срабатывала данная функция, а не выводилось тупо в css обработке, сообщение: incorrect pass or login, хочется именно красивое окошко :yes:

voral 08.10.2014 17:17

В этом приметиве заложена не понятная логика. Судя по ней: при первом обращении к скрипту на клик по кнопке вешается открытие вывода этого сообщения (empty от несуществующей переменной вроде true дает). Т.е. не зависимо от того заполнен логин или нет окно будет показано. А форма комитится не будет. ибо return false; Если убрать эту строку, то окно будет сразу заурываться т.е. пошел запрос на сервер и открывается страница по новой. У вас окно в любом случае может всплывать только после нажатия на кнопку отправить. А ваш elst должен быть только в одном случае. Вы убираете return false, заполняете поле login и отправляете форму.

Приведенный вами примитив должен быть минимально необходимым кодом требующимся для повторения ошибки. В данном случае у вас не хватает поля. Может вы его за пределами формы расположили......

voral 08.10.2014 17:18

По сути вам тут JS не нужен совсем тогда. По условию у вам просто нужно не скрипт в HTML рисовать, а прямо HTML код вашего окна, а уж css ом выводить его куда надо

voral 08.10.2014 17:26

Не поленился. Проверил. При доавлении в форму поля и убирании return false; все работает как я сказал. Если вы действительно хотите использовать js. Вам нужна толбко одна строчка (нафига вы на клик повесили?)

swal("Password or Login incorrect!");

С одним условием. Вы должны эту команду выполнить только после загрузки страницы.

arimanecro 08.10.2014 17:41

Извиняюсь, моя вина, создавая тему забыл скопировать ещё одно поле, естественно оно у меня есть :)

Вам нужна толбко одна строчка (нафига вы на клик повесили?)

а как его убрать?
если тупо стереть onclick = function(), то выдает ошибку.

А если просто выводить,как вы предложили: swal("Password or Login incorrect!");

то скрипт не срабатывает.

С одним условием. Вы должны эту команду выполнить только после загрузки страницы.

это как?

Я полный ноль в этом деле, так что не нужно делать круглые глаза на такие вопросы :no:

voral 08.10.2014 17:47

<form method="post">
	<input name="login" type="text">
	<input name="submit" type="submit" class='btn' id="submit"></form>
<?php
if(empty ($_POST['login'])) {?>	

<script>
  window.onload = function() {
    swal("Password or Login incorrect!");
  }
</script>
<?php 
} else {echo 'login correct';}
?>

arimanecro 08.10.2014 17:54

почти то что надо, огромное спасибо :thanks:

но сразу появляется проблема, как только я захожу на страницу, скрипт автоматом срабатывает(выскакивает окно), видимо поэтому и нужно было onclick = function(). Кажись тупиковая ситуация :(

voral 08.10.2014 17:58

Нет
Ну "онклик" же явно говорит, что функция срабатывает на клик. А вам это не надо. Соответсвенно ваша ошибка в php.
Вы проверяете пустой или нет $_POST['login'], а вам нужно проверить есть ли он вообще. if (isset($_POST['login']))..... и вы этом случае не выводить ни чего. В настоящий момент при этой ситуации php скрипт попадает в ваше условие заставляющее отобразить окно с ошибкой


<?php
  if (isset($_POST['login'])) {
    if(empty ($_POST['login'])) {?> 
       <script>
          window.onload = function() {
             swal("Password or Login incorrect!");
          }
       </script>
<?php
    }
    else {
       echo 'login correct';
   }
}
?>

arimanecro 08.10.2014 18:05

voral,
да, Вы совершенно правы, я по своей невнимательности, забыл сначала проверить на isset.
Благодарю ещё раз, за столь быстрые и правильные ответы :thanks:
В карму смог добавить только один плюсик, больше не получается, из-за того, что требуется ещё кому-нибудь поставить (

danik.js 08.10.2014 18:22

<input name="login" type="text" required> и фиг ты отправишь пустое поле, по крайней мере в современных браузерах)
Но это не отменяет необходимость серверной проверки.

kostyanet 09.10.2014 09:28

Так не делают, это уродство. Когда страница перезагружается то все сообщения валятся прямо в html, а когда страница не перезагружается, то все сообщения валятся в js-скрипт, который затем валит их в html.

В принципе можно и алерты втюхивать, onload тут вообще не при делах. Как только парсер дошел до алерта - показал. Потому что все уже решено до того как.

kostyanet 09.10.2014 10:12

Вот так сделайте, как людей:

В процессе валидации просто собираете ерроры в массив, например

if(!validate($var))
$error[]='Нет такого юзера, или юзер ввел пароль неправильно';

Затем в рендере у вас, например

Код:

<div class="error_message">
 ?>
  if(count($errors))
    echo '<ul><li>', join('</li><li>',$errors), '</li></ul>';
 <?php
</div>

и все. Если ошибки были - они в хтмле проявятся. А если не было, этот div вообще не будет виден, ибо это div, а пустой div занимает 0 целых Х десятых места.

Более того, если вы захотите запросить данные с того же скрипта, то попросту выделяете этот кусок в отдельный файл (или метод, или функцию) и вызываете его (его, ее) единственно когда случились ошибки. Тогда по XMLHttpRequest скрипт получит точно такой же кусок хтмля и вставит его в то же самое место. - Это для случая без перезагрузки.

danik.js 09.10.2014 10:24

Цитата:

Сообщение от kostyanet
ибо это div, а пустой div занимает 0 целых Х десятых места.

А если ему назначен padding и иконка/бэкграунд?

voral 09.10.2014 10:34

Цитата:

Сообщение от kostyanet (Сообщение 334231)
А если не было, этот div вообще не будет виден, ибо это div, а пустой div занимает 0 целых Х десятых места.

Ну уж если все "вылизывать" то зачем вообще этот div выводить? Это сейчас он пустой, а завтра обновят на сайте стили....

На вопрос "зачем". Тут все от общей задачи зависит. Так просто "это не правильно" говорить не надо. Возможно окно строится общим для сайта скриптом. И используется скрипт в различных ситуациях. А может шаблон окна уже есть в html.


Часовой пояс GMT +3, время: 05:58.