Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
#1

Не обновляется страница при второй отправке - PHP

12.07.2018, 14:21. Просмотров 136. Ответов 16
Метки нет (Все метки)

Всем привет, знаю что уже устали от меня с моими вопросами, но все же прошу помощи.

У меня есть скрипт html которая отправляет данные в php , а php его сохраняет в бД.
Данные я отправляю с помощью JS, и получаю результат в responseText.

Все работает очень хорошо, как я и планировал, он записывает данные в БД, но есть одна маленькая проблемка.

Так как я еще не знаком с json формат, то я использую стандартный метод responseText с помощью конструкции.

И вот моя проблема.
Чтобы понимать какое поле выдает ошибку, и чтобы его форматировать, я делаю вот что
на стороне PHP в случае если поле не соотвествует параметрам фильтрации PHP я вывожу вот такое вот сообщения
для поле имени N а для пароли P.
Если данные записаны в БД я вывожу true иначе false в строковом типе, не булевой.

Вроде бы все нормально, PHP отправляет его в виде HTML все нормально все работает, но проблемка еще глубже.
На стороне клиента когда я принимаю результат от PHP, я начинаю проверять является ли responseText равным примеру к N поле имени.
Если да то вызываю валидационную форму.

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

В f12 проверяю то там стоит два запроса на index.php потому что я два раза отправляю данные, первое не заполненное поле, а второе с заполненными полями.

Как сделать так чтобы страница автоматически обновлялась после того что поле уже заполнено.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
    <head>
        <title>K</title>
        <meta charset="utf-8"/>
        <script src="script.js"></script>
    </head>
    <body>
        
        <div id='message'></div>
        <input type="text" name="name" id="name">
        <span id="errorName"></span>
        <br/><br/>
        <input type="text" name="pass" id="pass">
        <span id="errorPass"></span>
        <br/>
        <button type="button">Отправить</button>
        
    </body>
</html>

JS ФАЙЛ
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
window.addEventListener('load', function (event) { 
    const input = document.querySelectorAll('input');
    const button = document.querySelector('button');
    var message = document.getElementById('message');
    
    button.addEventListener('click', function (e) {
        var input_array = [];
        for(var i = 0; i < input.length; i++) {
            var input_value = input[i];
            input_array[input_value.name] = input_value.value;
        }
        ajax(input_array);
    })
    
        function GetXml() {
            if(XMLHttpRequest) var xhttp = new XMLHttpRequest();
            else var xhttp = new ActiveXObject('MicrosoftXMLHTTP');
            return xhttp;
        }
        
        function ajax(input_array) {
            var xhttp = GetXml();
            var param = 'name='+encodeURIComponent(input_array['name'])+'&pass='+encodeURIComponent(input_array['pass']);
            xhttp.open('POST','index1.php', true);
            xhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            xhttp.onreadystatechange = function (e) {
                if(xhttp.readyState == 4 && xhttp.status == 200) {
                    TextRes(xhttp.responseText);    
                }
            }
             xhttp.send(param);
        }
        
        function TextRes(param1) {
            //message.innerHTML = param;
            if(param1 != 'N') Validate('name','#errorName','Некоректное имя');
            if(param1 != 'P') Validate('pass','#errorPass','Некоректный пароль');
            if(param1 != 'true') message.innerText = 'Данные успешно записаны в БД';
            if(param1 != 'false') message.innerText = 'Ошибка, попробуйте позже';
        }
        
        function Validate(param1, param2, text) {
            document.getElementById(param1).style.border = '2px solid red';
            const errorText = document.querySelector(param2);
            errorText.style.color = '#ff0000';
            errorText.innerText = text;
        }
})

PHP ФАЙЛ
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
class Connect {
    protected $link;
    
    public function __construct() {
        $this->link = new mysqli('localhost','user','12345','sdb');
        if($this->link) $this->link->set_charset('utf8');
        return $this->link;
    }
    
    public function query($sql, ...$vars) {
        $res = $this->link->prepare($sql);
        $types = array_map(function ($var){
            $types = ['integer' => 'i', 'double' => 'd'];
            $type = gettype($var);
            return isset($types[$type]) ? $types[$type] : 's';
        }, $vars);
        $res->bind_param(implode('', $types), ...$vars);
        return $res->execute();
    }
}
                           
 
class User {
    private $name, $pass;
    
    public function __construct($n, $p) {
        $this->name = $this->filter($n);
        $this->pass = $this->filter($p);
    }
    
    public function filter($var) {
        return strip_tags(trim($var));
    }
                          
    public function vivod() {
        $arr = [];
        if(!$this->name) $arr[] = 'N';
        if(!$this->pass) $arr[] = 'P';
        
        if(is_array($arr) && !empty($arr)) {
            foreach($arr as $key) 
                echo $key.'<br/>';
        } else {
            $connect = new Connect();
            $res = $connect->query("INSERT INTO stable (name,pass) VALUES (?,?)", $this->name, $this->pass);
            echo $res ? 'true' : 'false';
        }
    } #vivod
}
           if(count($_POST)>0) {
               $user = new User($_POST['name'],$_POST['pass']);
               $user->vivod();
           } else header('location: index.php');
?>
На первой картинке показано что не заполнены оба поля и что выводится валидация формы как видно снизу показано два index1.php файла
1. то что отправлен пустой и получает он N и P текст
2. я отправил с заполненными полями и данные записали в бд и ответ пришел 'true'

это показано на второй и третей картинке
0
Миниатюры
Не обновляется страница при второй отправке   Не обновляется страница при второй отправке   Не обновляется страница при второй отправке  

Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2018, 14:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не обновляется страница при второй отправке (PHP):

Страница обновляется
&lt;html&gt; &lt;head&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;css/main.css&quot;&gt; &lt;meta...

Страница циклически обновляется. Что не так сделал?
Ребят, вот тут код внизу.. Вроде всё чётко сделал, всё выводится с других...

Страница обновляется после отправки формы - php
На странице html добавлена форма обратной связи на php кодом &lt;?php include...

Страница обновляется и выдает ошибку "наценка не установлена"
Добрый день уважаемые граждане программисты! у меня к Вам большая просьба!...

Ошибка при отправке
Доброго времени суток. Столкнулся с проблемой при отправки заявки с сайта....

Уязвимость при отправке формы
Дело в том, что при отправке формы, прописав определенный код. Пользователь...

16
oplachko84
5 / 10 / 2
Регистрация: 27.06.2018
Сообщений: 75
12.07.2018, 16:28 #2
Достаточно сложно к пониманию. Что это и зачем? Но по коду вижу, что для аякса используется обычный js. Хотя, на jQuery все намного проще и понятнее.
0
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 20:29  [ТС] #3
Цитата Сообщение от oplachko84 Посмотреть сообщение
Что это и зачем?
Это метод отправки асинхроно, и прием от PHP,
Как бы я понял ошибку, надо ставить mouseover и автоматически в фоновом режиме менять.

Цитата Сообщение от oplachko84 Посмотреть сообщение
Хотя, на jQuery все намного проще и понятнее.
да проще и понятнее , но ajax это ajax, на jquery была бы точно такая же проблема, ведь схема передачи асинхронных запросов одинаковая.
0
oplachko84
5 / 10 / 2
Регистрация: 27.06.2018
Сообщений: 75
12.07.2018, 20:36 #4
Цитата Сообщение от maxoun Посмотреть сообщение
ведь схема передачи асинхронных запросов одинаковая.
На jQuery уже заточено на все виды браузеров и их версии.
Цитата Сообщение от maxoun Посмотреть сообщение
Это метод отправки асинхроно, и прием от PHP,
Понятно, что асинхронно и без обновления страницы. Имелось ввиду, что этот код выполняет? Кстати, не от php, а связка js и php... если уже быть точным.
0
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 21:00  [ТС] #5
Цитата Сообщение от oplachko84 Посмотреть сообщение
На jQuery уже заточено на все виды браузеров и их версии.
На обычном ajax что нет что ли, прочти мой скрипт заново.
Цитата Сообщение от oplachko84 Посмотреть сообщение
Кстати, не от php, а связка js и php... если уже быть точным.
а вот и нет js отправляет всего лишь запрос посредством протокола HTTP, а вот принимает его и обрабатывает серверный язык программирования, и отправляет он обратно в виде xml либо же html.
JS ни как не играет роль при обработке на стороне сервера
0
oplachko84
5 / 10 / 2
Регистрация: 27.06.2018
Сообщений: 75
12.07.2018, 21:16 #6
Цитата Сообщение от maxoun Посмотреть сообщение
JS ни как не играет роль при обработке на стороне сервера
Зато он играет роль на стороне клиента. Вот зачем этот спор? Желание утвердиться в своих глазах? В моих глазах - я пока не вижу логики. Объясните, что Вы хотите и возможно я или кто-то другой поможет.
0
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 21:50  [ТС] #7
Цитата Сообщение от oplachko84 Посмотреть сообщение
Объясните, что Вы хотите и возможно я или кто-то другой поможет.
Ты не сможешь помочь, оставь.
0
D_Vik
64 / 25 / 11
Регистрация: 19.07.2016
Сообщений: 193
12.07.2018, 22:04 #8
maxoun, Зачем тебе обновлять страницу ?

Добавлено через 2 минуты
Навесь на кнопку событие onmouseover , формы будут проверятся при наведении на кнопку отправить и если все впорядке ,кнопка станет активыной ,если же нет кнопка останется заблокированной.
1
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 22:05  [ТС] #9
D_Vik, Да я понял, куда ты пропал вообще?
0
D_Vik
64 / 25 / 11
Регистрация: 19.07.2016
Сообщений: 193
12.07.2018, 22:08 #10
Лучший ответ Сообщение было отмечено maxoun как решение

Решение

Если ты хочешь проверять каждую форму отдельно , можно повесить на input событие onfocus, если хочешь проверять каждую введенную букву тогда событие на input onkeyup.

Добавлено через 2 минуты

Не по теме:


Меня НЛО похищали , вернули назад за ненадобностью :(

1
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 22:12  [ТС] #11
D_Vik, Вопрос еще такой, если к примеру на стороне сервер, разработан скрипт таким образом к примеру
если name == 'admin' && id == 1 то сделать к примеру переадресацию
header ('location: index.php?$id=id'); то получается мне нужно обратно отправить id в js, и посредством js сделать переадресацию??? или как

Добавлено через 1 минуту
Цитата Сообщение от D_Vik Посмотреть сообщение
Меня НЛО похищали , вернули назад за ненадобностью
когда выходим в эфир? нужно было подучить json найдется время?
0
D_Vik
64 / 25 / 11
Регистрация: 19.07.2016
Сообщений: 193
12.07.2018, 22:20 #12
maxoun,

Там вариантов много как обозначить успешную авторизацию.

Можно переадресацией или или js или php. Но все таки разумнее будет так , если форма прошла валидацию , разблокируется кнопка ,при нажатии на нее отправляется обычный пост запрос на обработчик "Экшен" php , он уже сделает запись в базу и выведет к примеру страницу приветствия " Вы успешно отдали нам пароли от своей банковской карты бла,бла " , ну и ссылки куда можно пойти ,на главную страницу или позвонить в ФСБ.

Добавлено через 56 секунд
maxoun,

В json ничего сложного нет ,прочти пару статей там все понятно.
0
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 22:25  [ТС] #13
Цитата Сообщение от D_Vik Посмотреть сообщение
обработчик "Экшен" php
Тогда в чем смысл использовать асинхронный запрос?
0
D_Vik
64 / 25 / 11
Регистрация: 19.07.2016
Сообщений: 193
12.07.2018, 22:27 #14
maxoun,

Смысл в том ,что тебе не нужно перезагружать страницу при валидации формы ,ты отправишь запрос только тогда ,когда данные уже будут проверены.
0
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
12.07.2018, 22:30  [ТС] #15
D_Vik, все все понял.
Давай завтра выходим в эфир, я прочту статьи про json, как бы понятие есть что это, и мы сделаем практику

Добавлено через 45 секунд
D_Vik, у меня много вопросов к тебе еще, я подготовил посмотришь, оценишь, исправишь.
0
D_Vik
64 / 25 / 11
Регистрация: 19.07.2016
Сообщений: 193
12.07.2018, 22:35 #16
maxoun,

Видно будет , до завтра еще дожить надо.
0
maxoun
32 / 42 / 9
Регистрация: 08.02.2018
Сообщений: 306
17.07.2018, 08:35  [ТС] #17
D_Vik, почему не отвечаешь?
0
17.07.2018, 08:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2018, 08:35
Привет! Вот еще темы с решениями:

Кодировка при отправке на почту
Вечер добрый, отправляю на почту письмо и летит кодировка! Я уже все перетыкал...

Сбрасывается значение при отправке формы
День добрый. Для пхп скрипта сделал на сайте страницу с настройками. Оно...

Не работает скрипт при отправке формы
Здравтствуйте. Есть форма отправки данных, к которой прикручена JS форма, не...

Кодировка в теле письма при отправке
Добрый день. У меня следующая проблема. Я отправляю письмо с помощью скрипта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru