Добрый день дорогие форумчане. я студент. Извиняюсь если создал не в том разделе. Можете помочь пожалуйста, мне дали задание из js и html кода реализовать php запрос к базе данным. как я понял js работает через json_encode и проверяет логин + почту на истину/ложь через БД. потом происходит создание колонки в бд через проверку капчи Код (Text): function SendRegisterRequest(el){ el_txt = $(el).text() $(el).text('lols') $(el).attr({ 'disabled':'disabled' }) $('.errCont').hide() $.ajax({ url:'/ajax/register.php', cache: false, type: 'POST', data: { 'register_username': $('#_register-username').val(), 'register_email': $('#_register-email').val(), 'register_captcha': $('#_register-captcha').val() }, dataType: 'JSON', // timeout: 10000, success:function(data, textStatus, jqXHR){ if(data.redirect != ''){ window.location.href = data.redirect return; } $(el).text(el_txt).removeAttr('disabled') if(data.errors){ $('#register-captcha-image').css({ 'background-image':"url('/captcha.php?"+Math.random()+"')" }) $('#_register-captcha').val('') } if(data.errors.username){ $('#username-error-cont').text(data.errors.username).show() } if(data.errors.email){ $('#email-error-cont').text(data.errors.email).show() } if(data.errors.captcha){ $('#captcha-error-cont').text(data.errors.captcha).show() } if(data.errors.other){ $('.c-other-error-cont').text(data.errors.other).show(); } }, error:function(jqXHR, textStatus, errorThrown){ $(el).text(el_txt).removeAttr('disabled') console.log(jqXHR) alert(textStatus) } }); Код (Text): <div style="margin-top:20px;display:table;" class="rnd10 cont"> <div style="display: table-row"> <div class="tblcell"><input id="_register-username" type="text" style="width:350px;height:70px;" class="text rndB" spellcheck="false" /></div> <div class="tblcell"><span class="desc rndB"><tt style="font-size:2.5em;">логин</tt></span></div> <div style="position:relative;"> <div style="position:absolute;top:70px;left:-100px;padding:7px;" class="rndB errCont" id="username-error-cont"></div> </div> </div> </div> <div style="margin-top:20px;display:table;" class="rnd10 cont"> <div style="display: table-row"> <div class="tblcell"><input id="_register-email" type="text" style="width:450px;height:70px;" class="text rndB" spellcheck="false" /></div> <div class="tblcell"><span class="desc rndB"><tt style="font-size:2.5em;">почта</tt></span></div> <div style="position:relative;"> <div style="position:absolute;top:70px;left:-100px;padding:7px;" class="rndB errCont" id="email-error-cont"></div> </div> </div> </div> <div style="margin-top:20px;display:table;" class="rnd10 cont"> <div style="display: table-row"> <div class="tblcell"> <div style="border:1px solid #fff;width:230px;height:80px;background: no-repeat url('/captcha.php');cursor:pointer;" class="rndB" id="register-captcha-image" ></div> </div> <div class="tblcell"><input id="_register-captcha" type="text" style="width:150px;height:70px;margin-left:10px;" class="text rndB" spellcheck="false" /></div> <div class="tblcell"><span class="desc rndB"><tt style="font-size:2.5em;">код</tt></span></div> <div style="position:relative;"> <div style="position:absolute;top:70px;left:-65px;padding:7px;" class="rndB errCont" id="captcha-error-cont"></div> </div> </div> <div style="display: table-row;"> <div class="tblcell"><span id="register-captcha-refresh" style="margin-left:20px;text-decoration:none;border-bottom:1px dashed #f1c100;color:#f1c100;cursor: pointer;">обновить</span></div> </div> </div> <div style="margin-top:20px;"> <button style="width:300px;height:60px;font:bold 2em;" name="refresh" id="_register-submit" >Отправить</button> </div> Вот капчу написал Код (Text): session_start(); $sdvig = 5; $b = 6; $image = imagecreatetruecolor(230, 80); $white = imagecolorallocate($image, 127, 70, 44); $black = imagecolorallocate($image, 0, 0, 0); $color = imagecolorallocate($image, 255, 255, 0); imagefilledrectangle($image,0,0,399,99,$white); $string = ""; for ($i = 0; $i < $b; $i++) { $bykva = chr(rand(97, 122)); $sdvig += 30; imagettftext ($image, 30, rand(-25, 15), $sdvig, 48, $color, "verdana.ttf", $bykva); $string .= $bykva; imageline($image, rand(0, 25), rand(0, 120), rand(100, 150), rand(0, 60), $black); } $_SESSION['rand_code'] = $string; header("Content-type: image/png"); imagepng($image); Примерно реализовал таким способом Код (Text): if(isset($_POST['refresh'])) // взял refresh , потому что кнопка отправить name=''refresh' { } else { //наверно тут нужно вставлять коды из js ? }
дело в том что, форма работает если только правильно совпадает капча. а ложь/правду логина и эмайла, не смотрит. как сделать, если хоть даже капча совподает, но чтобы при этом проверяел логин и майл
Код (Text): if(isset($_POST['refresh'])) { } else { if($_POST['register_captcha'] == $_SESSION['rand_code']) { $namba = "namba.kg"; if(isset($_POST['register_username'])){ $sel = "SELECT * FROM `bnet` WHERE acct_username = '$register_username'"; $res = mysql_query($sel); $num = mysql_num_rows($res); if($num != 0) { $username_zanyat = '"username":'.json_encode("Пользователь занят").','; } if ($_POST['register_username'] == ""){ $username_1 = '"username":'.json_encode("Это поле обязательно и не может быть пустым").','; } else if (strlen($_POST['register_username']) < 4){ $username_strlen2 = '"username":'.json_encode("Минимум 4 символа").','; } else if (!preg_match("/^[-a-zA-Z0-9 .-_()]+$/", $_POST['register_username'])) { $username_simvol_zapret = '"username":'.json_encode("Запрещенные символы").','; } else if (strlen($_POST['register_username']) > 15){ $username_strlen1 = '"username":'.json_encode("Максимум 15 символов").','; } } if(isset($_POST['register_email'])){ $sel1 = "SELECT * FROM `bnet` WHERE acct_email = '$register_email'"; $res1 = mysql_query($sel1); $num1 = mysql_num_rows($res1); if($num1 != 0) { $email_zanyat = '"email":'.json_encode("Почта занят").','; // пишeм oшибку в мaссив } if ($_POST['register_email'] == ""){ $email_1 = '"email":'.json_encode("Это поле обязательно и не может быть пустым").','; } else if (!preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $_POST['register_email'])) { $email_simvol_zapret = '"email":'.json_encode("Запрещенные символы").','; } else if (preg_match("/^[a-zA-Z0-9]+@namba.kg/", $_POST['register_email'])) { $email_domen_namba = '"email":'.json_encode("Адрес namba.kg - временно недоступен").','; } } if ($_POST['register_captcha'] == ""){ $captcha_1 = '"captcha":'.json_encode("Поле не должен быть пустым").''; } if ($_POST['register_captcha'] != ""){ $captcha_2 = '"captcha":'.json_encode("Поле не должен быть пустым").''; } echo '{"errors":{'.$username_1.''.$username_zanyat.''.$username_simvol_zapret.''.$email_zanyat.''.$username_strlen1.''.$username_strlen2.''.$email_1.''.$email_simvol_zapret.''.$email_domen_namba.' '.$captcha_1.''.$captcha_2.'},"redirect":"","success":"0"}'; } else { } }
Кроме IF, ELSE можно использовать else IF mysql_ устарел и давно выпилен, пиши запросы используя mysqlI сразу, чтобы потом не переписывать. Вместо тысячи переменных, можно передавать массив с данными array(param, param, param) Прежде чем класть в запрос данные, нужно проверить их на пустоту и корректность, иначе бесмысленно это все. Простой пример reg.php PHP: //- Метод запроса if( $_SERVER['REQUEST_METHOD'] == 'POST' ) { $error = array(); $success = array(); //- if ( isset ( $_POST["register_username"], $_POST["register_email"], $_POST["register_captcha"] ) ) { if ( mb_strlen ( $_POST["register_username"] ) == 0 ) { $error = array('username', 'Логин не может быть пустым'); } elseif ( mb_strlen ( $_POST["register_email"] ) == 0 ) { $error = array('email', 'E-mail не может быть пустым'); } elseif ( mb_strlen ( $_POST["register_captcha"] ) == 0 ) { $error = array('captcha', 'Введите капчу'); } else { //- Проверяем логин на существование //$get_login = ("SELECT `acct_username` FROM `bnet` WHERE `acct_username`=? LIMIT 1"); if ( $get_login ) { $error = array('username', 'Логин уже занят'); } else { //- INSERT $success = array('username', 'Регистрация прошла успешно'); } } } exit ( json_encode ( array ( 'error' => $error, 'success' => $success, ) ) ); } Само-собой, нужно дописывать остальные условия. Надеюсь логика тебе будет понята. В запросе ( ajax ) можно обрисовать ошибку примерно так Код (Javascript): $('#'+data.error[0]+'-error-cont').text(data.error[1]).show(); Попробуй дальше сам и покажи что вышло
Я не знаю как у тебя там капча устроена, ты с другим разобрался ? Файл один session_start() Файл два session_start() Передаешь что надо из одного, а во-втором проверяешь. Все)
PHP: session_start(); $sdvig = 5; $b = 6; $image = imagecreatetruecolor(230, 80); $white = imagecolorallocate($image, 127, 70, 44); $black = imagecolorallocate($image, 0, 0, 0); $color = imagecolorallocate($image, 255, 255, 0); imagefilledrectangle($image,0,0,399,99,$white); $string = ""; for ($i = 0; $i < $b; $i++) { $bykva = chr(rand(97, 122)); $sdvig += 30; imagettftext ($image, 30, rand(-25, 15), $sdvig, 48, $color, "verdana.ttf", $bykva); $string .= $bykva; imageline($image, rand(0, 25), rand(0, 120), rand(100, 150), rand(0, 60), $black); } $_SESSION['rand_code'] = $string; header("Content-type: image/png"); imagepng($image); сделал таким образом Код (Text): session_start(); if($_POST['register_captcha'] == $_SESSION['rand_code']) { //$captcha_1 = '"captcha":'.json_encode("Верно").''; } else { $captcha_1 = '"captcha":'.json_encode("не Верно").''; } но возникает вопрос .после всего этой проверки как перенаправить или вывести сообщение в новой окне. что регистрация успешно завершилась?
дело в том что в js коде success показывает перенаправление Код (Javascript): success:function(data, textStatus, jqXHR){ if(data.redirect != ''){ window.location.href = data.redirect return; } вот и возникает вопрос, после всего проверки правда/ложь, как отобразить success
Например. reg.php PHP: $_SESSION["success"] = 'Все успешно'; делаешь переадресацию на index.php index.php PHP: if ( !empty ( $_SESSION["success"] ) ) { print $_SESSION["success"]; unset($_SESSION["success"]); }
У вас же всё есть. Код (Javascript): window.location.href = data.redirect PHP: exit (json_encode (array( 'error' => $error, 'success' => $success, 'redirect' => 'https://yourSite.ru/login' )));