Есть скрипт который должен изменять данние пользователя в таблице Users в моей базе. HTML: <div class="row"> <div class="col col-12 col-md-6 col-lg-4 col-sm-6"> <div class="form-group"> <label for="login_input">Ваш логин в системе</label> <input type="text" required class="changeable form-control text-center" id="login_input" placeholder="Login" value="<?php echo $my_user['login']; ?>" readonly> </div> </div> <div class="col col-12 col-md-6 col-lg-4 col-sm-6"> <div class="form-group"> <label for="email_input">Ваш E-mail в системе</label> <input type="email"required class="changeable form-control text-center <?php if($my_user['email_confirm']){echo 'text-success';} elseif(!$my_user['email_confirm']){echo 'text-danger';} ?>" data-html="true" data-toggle="tooltip" data-placement="top" title="<?php if($my_user['email_confirm']){echo 'Ваша почта подтверждена';} elseif(!$my_user['email_confirm']){echo "Внимание! Вам следует подтвердить вашу почту.<a class='btn btn-success' href='./confirm_email.php'>Подтвердить почту</a> ";} ?>" id="email_input" placeholder="Email" value="<?php echo $my_user['e_mail']; ?>" readonly> </div> </div> <div class="col col-12 col-md-6 col-lg-4 col-sm-6"> <div class="form-group"> <label for="pass_input">Ваш пароль в системе</label> <input type="text" required class="changeable form-control text-center" id="pass_input" placeholder="Password" value="<?php echo $my_user['pass']; ?>" readonly> </div> </div></div> <button class="btn btn-primary mt-3" onclick="start_change()">✎ Изменить </button> Чуть ниже идет скрипт вот скрипт (Он корявенько написан но работает!) Код (Javascript): var new_login = ''; var new_pass = ''; var new_email = ''; function start_change(){ $('.changeable').removeAttr('readonly'); $('button[onclick="start_change()"]').removeClass('btn-primary'); $('button[onclick="start_change()"]').addClass('btn-success'); $('button[onclick="start_change()"]').text('Сохранить'); $('button[onclick="start_change()"]').attr('onclick','end_change()'); }; function Success_ajax (data){ alert(data); }; function end_change(){ $('.changeable').attr('readonly',''); new_login = $('#login_input').val(); new_pass = $('#pass_input').val(); new_email = $('#email_input').val(); $('button[onclick="end_change()"]').removeClass('btn-success'); $('button[onclick="end_change()"]').addClass('btn-primary'); $('button[onclick="end_change()"]').html('✎ Изменить'); $('button[onclick="end_change()"]').attr('onclick','start_change()'); $.ajax({ type: "POST", url: 'change.php', data: {'new_login':new_login,'new_pass':new_pass,'new_email':new_email}, success: Success_ajax, dataType: 'text' }); }; $(function () { $('[data-toggle="tooltip"]').tooltip(); }); Ну и наконец php PHP: <?php session_start(); if (!isset($_SESSION['authid'])){ header("Location: http:/....../index.php?error=Вы не авторизованы )"); exit; } $new_email = $_POST['new_email']; $new_login = $_POST['new_login']; $new_pass = $_POST['new_pass']; if (isset($new_email) and isset($new_login) and isset($new_pass)){ if(!empty($new_email) and !empty($new_login) and !empty($new_pass)){ if (strlen($new_login) > 3 and strlen($new_pass) > 5){ if(!filter_var($new_email, FILTER_VALIDATE_EMAIL)){ echo 'E-mail не валидный!'; } else{ $my_user = require '../action/useR/info_useRr.php'; if ($my_user['login'] != $new_login or $my_user['e_mail'] != $new_email or $my_user['pass'] != $new_pass){ $id_user = $_SESSION['authid']; $id_user2 = $my_user['id']; if (!$id_user == $id_user2){ echo 'CRITICAL SERVER ERROR! несоотвиствие данных в системе обратитесь к админу!(на главной стр!)'; } $link = mysqli_connect('localhost', '', '',''); if (!$link) { die ('Ошибка соединения: ' . mysqli_error()); header("Location: http://.........../profile.php?error=Ошибка соединения:". mysqli_error()); exit;} mysqli_set_charset($link, "utf8"); // CHECK $sql_check = "SELECT COUNT(*) as count FROM `Users` WHERE `e_mail` = '$new_email' AND BINARY`login` = '$new_login' AND BINARY `pass` = '$new_pass'"; if(!$result3 = mysqli_query($link,$sql_check)){ echo 'Ошибка проверки базы!'; exit; } echo $sql_check; $count = mysqli_fetch_assoc($result3); var_dump ($count); mysqli_free_result($result3); //UPD $sql_upd = "UPDATE `........`.`Users` SET `login` = '$new_login', `e_mail` = '$new_email', `pass` = '$new_pass', `email_confrim` = '1' WHERE `Users`.`id` = $id_user2"; if(!$result = mysqli_query($link,$sql_upd)){ echo 'Ошибка обновления базы!'; exit; } mysqli_free_result($result); mysqli_close($link); echo 'Новые данные сохранены!'; }} } else{ echo 'Логин должен состоять из более чем 4 символов а пароль из 5!'; } } else{ echo 'Все поля должны быть заполнеными!'; } } else{ echo 'Ошибка передачи данних!'; } ?> И вот крч ПРОБЛЕМА во время етапа проверки новых данных: Крч получатеся после проверки у меня должна быть переменная с кол-вом повторений моих новых данних если будет 0 тогда пропускаем дальше и изменяем в базе если > 0 тогда не пропускаем ! Но выходит так что при любом логине пароле и почте все равно вернется 0 НО если я скопирую с php запрос и введу вручную данние тогда выведет уже правильно кол-во учеток с такими данними ! Прошу помощи сам хз =(
Опять редирект? С аяксом он практически несовместим. Прежде чем кодить, прорабатывай структуры данных и алгоритмы. Просто делай UPDATE при успешной авторизации и после проверяй результат. Дублирование логинов и т.п. отсекай за счет использования юников (уник. ключей для соотв. полей). --- Добавлено --- P.S. Можно делать предвыборку, если в сессии недостаточно данных, но только для того, чтобы не обновлять неизменившиеся поля (вплоть до полного отказа от UPDATE). Возможно, лучше сессию дополнить этими данными и не делать (доп.) предвыборку. --- Добавлено --- Неверный порядок: PHP: $new_email = $_POST['new_email']; $new_login = $_POST['new_login']; $new_pass = $_POST['new_pass']; if (isset($new_email) and isset($new_login) and isset($new_pass)){ --- Добавлено --- Кстати, isset может принимать несколько аргументов.
Спасибо) крч работает как-то странно ) но работает ещё с запросом поиграюсь и уберуу редиректы) Я для полной безопасности в сесии храню ток id пользователя остальное делает скрипт и сохраняет масив с данными в $my_user
В этом и прикол) Я тип зделал сессию в ней лежит id пользователя, а тот скрипт берёт id из сессии и возвращает масив о пользователе на основании сессии
В чем прикол? Говорю, тебе по сути один шаг остался, чтобы вообще не использовать сессии РНР, – научиться генерировать достаточно стойкий криптоключ, записывать и считывать его в БД. Это просто была инфа к размышлению. По существу вопроса я выше отписался: UPDATE с проверкой результата и все.
Да спасибо, я наладил запрос теперь все работает как и задумывал, с отказом от сессии подумаю. Спасибо за дельные советы и помощь.
Кому интересно ) В итоге такой запрос получился: PHP: $sql_check = "SELECT COUNT(*) as count FROM (SELECT * FROM `Users` WHERE `id` != '$id_user' ) t WHERE `e_mail` = '$new_email' OR BINARY `login` = '$new_login'";
Пока я делаю колхоз машину =) потом я другу буду давать на доработку. + Сессия нужна я туда ещё переменную закинул для корректной нумерации таблицы
Конкретно против сессии я особо ничего не имею против. Я про твои проверки. Чем тут изгаляться, лучше почитай про уникальные ключи (индексы).