За последние 24 часа нас посетили 22434 программиста и 1191 робот. Сейчас ищут 712 программистов ...

добрый день

Тема в разделе "JavaScript и AJAX", создана пользователем esen21bek, 27 апр 2020.

  1. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    Добрый день дорогие форумчане. я студент.
    Извиняюсь если создал не в том разделе.
    Можете помочь пожалуйста, мне дали задание из js и html кода реализовать php запрос к базе данным.
    как я понял js работает через json_encode и проверяет логин + почту на истину/ложь через БД.
    потом происходит создание колонки в бд через проверку капчи

    Код (Text):
    1. function SendRegisterRequest(el){
    2.     el_txt = $(el).text()
    3.     $(el).text('lols')
    4.     $(el).attr({
    5.         'disabled':'disabled'
    6.     })
    7.     $('.errCont').hide()
    8.     $.ajax({
    9.         url:'/ajax/register.php',
    10.         cache: false,
    11.         type: 'POST',
    12.         data: {
    13.             'register_username': $('#_register-username').val(),
    14.             'register_email': $('#_register-email').val(),
    15.             'register_captcha': $('#_register-captcha').val()
    16.         },
    17.         dataType: 'JSON',
    18.       //  timeout: 10000,
    19.         success:function(data, textStatus, jqXHR){
    20.             if(data.redirect != ''){
    21.                 window.location.href = data.redirect
    22.                 return;
    23.             }
    24.             $(el).text(el_txt).removeAttr('disabled')
    25.             if(data.errors){
    26.                 $('#register-captcha-image').css({
    27.                     'background-image':"url('/captcha.php?"+Math.random()+"')"
    28.                 })
    29.                 $('#_register-captcha').val('')
    30.             }
    31.             if(data.errors.username){
    32.                 $('#username-error-cont').text(data.errors.username).show()
    33.             }
    34.             if(data.errors.email){
    35.                 $('#email-error-cont').text(data.errors.email).show()
    36.             }
    37.             if(data.errors.captcha){
    38.                 $('#captcha-error-cont').text(data.errors.captcha).show()
    39.             }
    40.             if(data.errors.other){
    41.                 $('.c-other-error-cont').text(data.errors.other).show();
    42.             }
    43.         },
    44.         error:function(jqXHR, textStatus, errorThrown){
    45.             $(el).text(el_txt).removeAttr('disabled')
    46.             console.log(jqXHR)
    47.             alert(textStatus)
    48.         }
    49.     });
    Код (Text):
    1. <div style="margin-top:20px;display:table;" class="rnd10 cont">
    2.     <div style="display: table-row">
    3.     <div class="tblcell"><input id="_register-username" type="text" style="width:350px;height:70px;" class="text rndB" spellcheck="false" /></div>
    4.     <div class="tblcell"><span class="desc rndB"><tt style="font-size:2.5em;">логин</tt></span></div>
    5.     <div style="position:relative;">
    6.         <div style="position:absolute;top:70px;left:-100px;padding:7px;" class="rndB errCont" id="username-error-cont"></div>
    7.     </div>
    8.     </div>
    9. </div>
    10. <div style="margin-top:20px;display:table;" class="rnd10 cont">
    11.     <div style="display: table-row">
    12.     <div class="tblcell"><input id="_register-email" type="text" style="width:450px;height:70px;" class="text rndB" spellcheck="false" /></div>
    13.     <div class="tblcell"><span class="desc rndB"><tt style="font-size:2.5em;">почта</tt></span></div>
    14.     <div style="position:relative;">
    15.         <div style="position:absolute;top:70px;left:-100px;padding:7px;" class="rndB errCont" id="email-error-cont"></div>
    16.     </div>
    17.     </div>
    18. </div>
    19. <div style="margin-top:20px;display:table;" class="rnd10 cont">
    20.     <div style="display: table-row">
    21.     <div class="tblcell">
    22.         <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>
    23.     </div>
    24.     <div class="tblcell"><input id="_register-captcha" type="text" style="width:150px;height:70px;margin-left:10px;" class="text rndB" spellcheck="false" /></div>
    25.     <div class="tblcell"><span class="desc rndB"><tt style="font-size:2.5em;">код</tt></span></div>
    26.     <div style="position:relative;">
    27.         <div style="position:absolute;top:70px;left:-65px;padding:7px;" class="rndB errCont" id="captcha-error-cont"></div>
    28.     </div>
    29.     </div>
    30.     <div style="display: table-row;">
    31.     <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>
    32.     </div>
    33. </div>
    34. <div style="margin-top:20px;">
    35.     <button style="width:300px;height:60px;font:bold 2em;" name="refresh"  id="_register-submit" >Отправить</button>
    36. </div>
    Вот капчу написал
    Код (Text):
    1.     session_start();
    2.     $sdvig = 5;
    3.     $b = 6;
    4.     $image = imagecreatetruecolor(230, 80);
    5.     $white = imagecolorallocate($image, 127, 70, 44);
    6.  
    7.     $black = imagecolorallocate($image, 0, 0, 0);
    8.     $color = imagecolorallocate($image, 255, 255, 0);
    9.     imagefilledrectangle($image,0,0,399,99,$white);
    10.     $string = "";
    11.     for ($i = 0; $i < $b; $i++) {
    12.     $bykva = chr(rand(97, 122));
    13.     $sdvig += 30;
    14.     imagettftext ($image, 30, rand(-25, 15), $sdvig, 48, $color, "verdana.ttf", $bykva);
    15.     $string .= $bykva;
    16.     imageline($image, rand(0, 25), rand(0, 120), rand(100, 150), rand(0, 60), $black);
    17.     }
    18.     $_SESSION['rand_code'] = $string;
    19.     header("Content-type: image/png");
    20.     imagepng($image);
    Примерно реализовал таким способом
    Код (Text):
    1. if(isset($_POST['refresh'])) // взял refresh , потому что кнопка отправить name=''refresh'
    2. {
    3. }
    4. else
    5. {
    6. //наверно тут нужно вставлять коды из js ?
    7. }
     
    #1 esen21bek, 27 апр 2020
    Последнее редактирование: 27 апр 2020
  2. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
  3. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Так а что не получается? Чем помочь?)
     
  4. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    помочь с кодом php
     
  5. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    дело в том что, форма работает если только правильно совпадает капча.
    а ложь/правду логина и эмайла, не смотрит.
    как сделать, если хоть даже капча совподает, но чтобы при этом проверяел логин и майл
     
  6. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Ну так покажи register.php и попробуем тебе помочь)
     
  7. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    Код (Text):
    1. if(isset($_POST['refresh']))
    2. {
    3. }
    4. else
    5. {
    6. if($_POST['register_captcha'] == $_SESSION['rand_code'])
    7. {
    8. $namba = "namba.kg";
    9. if(isset($_POST['register_username'])){  
    10. $sel = "SELECT * FROM `bnet` WHERE acct_username = '$register_username'";
    11. $res = mysql_query($sel);
    12. $num = mysql_num_rows($res);
    13. if($num != 0) {
    14. $username_zanyat = '"username":'.json_encode("Пользователь занят").',';
    15. }
    16. if ($_POST['register_username'] == ""){
    17. $username_1 = '"username":'.json_encode("Это поле обязательно и не может быть пустым").',';
    18. }
    19. else
    20. if (strlen($_POST['register_username']) < 4){
    21. $username_strlen2 = '"username":'.json_encode("Минимум 4 символа").',';
    22. }
    23. else
    24. if (!preg_match("/^[-a-zA-Z0-9 .-_()]+$/", $_POST['register_username'])) {
    25. $username_simvol_zapret = '"username":'.json_encode("Запрещенные символы").',';
    26. }
    27. else
    28. if (strlen($_POST['register_username']) > 15){
    29. $username_strlen1 = '"username":'.json_encode("Максимум 15 символов").',';
    30. }
    31. }
    32. if(isset($_POST['register_email'])){  
    33. $sel1 = "SELECT * FROM `bnet` WHERE acct_email = '$register_email'";
    34. $res1 = mysql_query($sel1);
    35. $num1 = mysql_num_rows($res1);
    36. if($num1 != 0) {
    37. $email_zanyat = '"email":'.json_encode("Почта занят").','; // пишeм oшибку в мaссив
    38. }
    39. if ($_POST['register_email'] == ""){
    40. $email_1 = '"email":'.json_encode("Это поле обязательно и не может быть пустым").',';
    41. }  
    42. else
    43. if (!preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $_POST['register_email'])) {
    44. $email_simvol_zapret = '"email":'.json_encode("Запрещенные символы").',';
    45. }
    46. else
    47. if (preg_match("/^[a-zA-Z0-9]+@namba.kg/", $_POST['register_email'])) {
    48. $email_domen_namba = '"email":'.json_encode("Адрес  namba.kg - временно недоступен").',';
    49. }  
    50. }
    51. if ($_POST['register_captcha'] == ""){
    52. $captcha_1 = '"captcha":'.json_encode("Поле не должен быть пустым").'';
    53. }
    54. if ($_POST['register_captcha'] != ""){
    55. $captcha_2 = '"captcha":'.json_encode("Поле не должен быть пустым").'';
    56. }
    57. echo '{"errors":{'.$username_1.''.$username_zanyat.''.$username_simvol_zapret.''.$email_zanyat.''.$username_strlen1.''.$username_strlen2.''.$email_1.''.$email_simvol_zapret.''.$email_domen_namba.'
    58. '.$captcha_1.''.$captcha_2.'},"redirect":"","success":"0"}';
    59. }
    60. else
    61. {
    62. }
    63. }
     
  8. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Кроме IF, ELSE можно использовать else IF
    mysql_ устарел и давно выпилен, пиши запросы используя mysqlI сразу, чтобы потом не переписывать.
    Вместо тысячи переменных, можно передавать массив с данными array(param, param, param)
    Прежде чем класть в запрос данные, нужно проверить их на пустоту и корректность, иначе бесмысленно это все.


    Простой пример reg.php
    PHP:
    1. //- Метод запроса
    2. if( $_SERVER['REQUEST_METHOD'] == 'POST' )
    3. {
    4.  
    5.   $error   = array();
    6.   $success = array();
    7.  
    8.   //-
    9.   if ( isset ( $_POST["register_username"], $_POST["register_email"], $_POST["register_captcha"] ) )
    10.   {
    11.  
    12.     if ( mb_strlen ( $_POST["register_username"] ) == 0 )
    13.     {
    14.        $error = array('username', 'Логин не может быть пустым');
    15.     }
    16.     elseif ( mb_strlen ( $_POST["register_email"] ) == 0 )
    17.     {
    18.        $error = array('email', 'E-mail не может быть пустым');
    19.     }
    20.     elseif ( mb_strlen ( $_POST["register_captcha"] ) == 0 )
    21.     {
    22.        $error = array('captcha', 'Введите капчу');
    23.     }
    24.     else
    25.     {
    26.        //- Проверяем логин на существование
    27.        //$get_login = ("SELECT `acct_username` FROM `bnet` WHERE `acct_username`=? LIMIT 1");
    28.  
    29.        if ( $get_login )
    30.        {
    31.           $error = array('username', 'Логин уже занят');
    32.        }
    33.        else
    34.        {
    35.           //- INSERT
    36.           $success = array('username', 'Регистрация прошла успешно');
    37.        }
    38.  
    39.     }
    40.  
    41.   }
    42.  
    43.   exit
    44.   (
    45.     (
    46.       array
    47.       (
    48.         'error'   => $error,
    49.         'success' => $success,
    50.       )
    51.     )
    52.   );
    53. }
    Само-собой, нужно дописывать остальные условия. Надеюсь логика тебе будет понята.


    В запросе ( ajax ) можно обрисовать ошибку примерно так

    Код (Javascript):
    1. $('#'+data.error[0]+'-error-cont').text(data.error[1]).show();
    Попробуй дальше сам и покажи что вышло
     
  9. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    капча же должен совпадать с $_SESSION['rand_code'];
    как его можно реализовать?
     
  10. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Стартуй сессию на каждой странице.

    А вообще подключи гугл капчу
     
  11. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    это как на каждой странице?
    неет гугл не хочу
     
  12. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Я не знаю как у тебя там капча устроена, ты с другим разобрался ?

    Файл один
    session_start()

    Файл два
    session_start()

    Передаешь что надо из одного, а во-втором проверяешь. Все)
     
  13. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    PHP:
    1.     $sdvig = 5;
    2.     $b = 6;
    3.     $image = imagecreatetruecolor(230, 80);
    4.     $white = imagecolorallocate($image, 127, 70, 44);
    5.     $black = imagecolorallocate($image, 0, 0, 0);
    6.     $color = imagecolorallocate($image, 255, 255, 0);
    7.     imagefilledrectangle($image,0,0,399,99,$white);
    8.     $string = "";
    9.     for ($i = 0; $i < $b; $i++) {
    10.     $bykva = chr(rand(97, 122));
    11.     $sdvig += 30;
    12.     imagettftext ($image, 30, rand(-25, 15), $sdvig, 48, $color, "verdana.ttf", $bykva);
    13.     $string .= $bykva;
    14.     imageline($image, rand(0, 25), rand(0, 120), rand(100, 150), rand(0, 60), $black);
    15.     }
    16.     $_SESSION['rand_code'] = $string;
    17.     header("Content-type: image/png");
    18.     imagepng($image);
    сделал таким образом
    Код (Text):
    1. session_start();
    2. if($_POST['register_captcha'] == $_SESSION['rand_code'])
    3. {
    4. //$captcha_1 = '"captcha":'.json_encode("Верно").'';
    5. }
    6. else
    7. {
    8. $captcha_1 = '"captcha":'.json_encode("не Верно").'';
    9. }
    но возникает вопрос .после всего этой проверки как перенаправить или вывести сообщение в новой окне. что регистрация успешно завершилась?
     
  14. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Я тебе предоставил код, там все есть ( вывод ошибок и успех)
     
  15. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    дело в том что в js коде success показывает перенаправление
    Код (Javascript):
    1.    success:function(data, textStatus, jqXHR){
    2.             if(data.redirect != ''){
    3.                 window.location.href = data.redirect
    4.                 return;
    5.             }
    вот и возникает вопрос, после всего проверки правда/ложь, как отобразить success
     
  16. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Записать текст success в $_SESSION и отобразить уже на другой странице
     
  17. esen21bek

    esen21bek Новичок

    С нами с:
    27 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    это как:rolleyes:
     
  18. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Например.

    reg.php
    PHP:
    1. $_SESSION["success"] = 'Все успешно';
    делаешь переадресацию на index.php

    index.php
    PHP:
    1. if ( !empty ( $_SESSION["success"] ) )
    2. {
    3.   print $_SESSION["success"];
    4.   unset($_SESSION["success"]);
    5. }
     
    denis01 нравится это.
  19. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    У вас же всё есть.

    Код (Javascript):
    1. window.location.href = data.redirect
    PHP:
    1. 'error' => $error,
    2. 'success' => $success,
    3. 'redirect' => 'https://yourSite.ru/login'
    4. )));