@footer_code

Где ошибка ajax?

Не работает отправка информации из формы. По крайнее мере не получает ответа. (Весь код php принадлежит обработчику). Помогите, кто знает в чем ошибка.
<h2>Изменение пароля</h2>
    		<div id="result_pass_edit"></div>
    <form action="" method="post" id="pass_edit_form">
        <label for="oldpass">Старый пароль</label>
        <input type="password" name="oldpass" class="pass"><br>
        <label for="newpass">Новый пароль</label>
        <input type="password" name="newpass" class="pass_new_1"><br>
        <label for="confpass">Повторите пароль</label>
        <input type="password" name="confpass" class="pass_new_2"><br>
        <input type="submit" name="submit" class="pass_edit" value="Сохранить пароль">
        <input type="hidden" value="pass" name="act" >
    </form>
    <script type="text/javascript">
	$.ajax({//аякс запрос
	  type: "POST",//тип передачи данных
	  url: "_settings.php",
	  dataType: 'text',
	  data: $("#pass_edit_form").serialize(),//передаем данные   
	  success: function(data) {//принимаем данные
      console.log('Received: '+data);
      if(data.length > 0) {
	   $('#result_pass_edit').text(data);  
      } else {
          $('#result_pass_edit').text(data);
      }
      }
        });
      }			 
   });	 
</script>


<?php
session_start();
require_once "app_config.php";
require_once "checklogin.php";
$connect = @mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME) 
    or handle_error("Ошибка подключения к базе данных", mysqli_connect_error());
mysqli_set_charset($connect, 'utf8');
$submit = $_POST['submit'];
if(!empty($submit)) {
    $action = mysqli_real_escape_string($connect, trim($_POST['act']));
    $oldpass = mysqli_real_escape_string($connect, trim($_POST['oldpass']));
    $newpass = mysqli_real_escape_string($connect, trim($_POST['newpass']));
    $confpass = mysqli_real_escape_string($connect, trim($_POST['confpass']));
    $newmail = mysqli_real_escape_string($connect, trim($_POST['newmail']));
    $pass = mysqli_real_escape_string($connect, trim($_POST['pass']));
    $user_id = $_SESSION['user_id'];
    $email = $_SESSION['email'];
    $password = $_SESSION['password'];
    if($action == 'pass') {
        if($newpass == $confpass) {
            $query = "SELECT COUNT(*) FROM users WHERE (user_id='$user_id') and (email='$email') and (password=SHA('$oldpass'))";
            $result = mysqli_query($connect, $query);
            $result = mysqli_fetch_array($result);
            if($result[0] == "1") {
                if(strlen($oldpass) >= 8) {
                    $query = "UPDATE users SET password = SHA('$newpass') WHERE (user_id='$user_id') and (email='$email') and (password=SHA('$oldpass'))";
                    $result = mysqli_query($connect, $query);
                    header("Location: logout.php");
                } else {
                    echo "Пароль должен состоять как минимум из 8 символов";
                }
            } else {
                echo "Неверный пароль";
            }
        } else {
            echo "Пароли не совпадают";
        } 
}
?>
  • Вопрос задан
  • 357 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Где ошибка ajax?
Ошибка практически везде. Налицо попытка адаптировать форму которая раньше работала методом пост с перезагрузкой на аякс. Ну ладно, ничего криминального, но... понеслись по граблям!
1) аякс запрос, который выполняется по загрузке страницы, причем в произвольном месте, то есть в форме еще ничего нет. Ладно, это еще пол беды...
$('#pass_edit_form').on('submit',function(e){
   e.preventDefault();
   $.ajax({
      type: "POST",
      url: "_settings.php", // оно реально в этой же папке лежит?
      dataType: 'text',
      data: $(this).serialize(),
      success: function(data) {
         console.log('Received: '+data); // для начала можно остановиться тут и посмотреть что падает в консоль.
         if(data.length > 0) {
             $('#result_pass_edit').text(data);  
          } 
          else {
              $('#result_pass_edit').text(data);
          }
      }
     });
      }			 
   });	 
});

Так это будет работать по нажатию кнопки.
Код пхп даже не буду комментировать, хватит того что там есть строка header("Location: logout.php");
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега PHP
Web developer
1. ajax надо отправлять не сразу же, а лишь по сабмиту формы
2. ajax обработает location не так, как вам хочется. Он загрузит новую страницу внутрь div
Ответ написан
Комментировать
@nozzy
Symfony, Laravel, SQL
Если отправляешь форму через ajax,
исправь в своей форме:
<form id="pass_edit_form">
и это, тебе не нужен submit:
<input type="button" name="submit" class="pass_edit" value="Сохранить пароль">

Я надеюсь js-обработчик на кнопку формы повесил?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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