За последние 24 часа нас посетили 63119 программистов и 1737 роботов. Сейчас ищут 896 программистов ...

Пример кода для junior'а

Тема в разделе "Беседы", создана пользователем Anaksagor, 21 ноя 2017.

  1. Anaksagor

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

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Приветствую всех.

    Просмотрите, пожалуйста, и скажите достоин ли этот код для того, чтобы приложить его к резюме на позицию junior на 6000 грн. или лучше его потенциальному работодателю не показывать?
    Я только начал PHP изучать и это подобие чата недавно написал.

    index.html
    HTML:
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3.    <head>
    4.      <title>Регистрация для входа в чат</title>
    5.      <meta http-equiv="content-type" content="text/html; charset=utf-8">
    6.      <link rel="icon" type="image/png" href="./assets/index.ico"/>
    7.      <link type="text/css" rel="stylesheet" href="./assets/style_index.css">
    8.    </head>
    9.    <body>
    10.      <article class="container">
    11.        <form action="handler.php" method=POST>
    12.          <p>
    13.            <label for="name">Введите свой псевдоним в чате:</label>
    14.            <input type="text" id="name" class="name" name="name" required>
    15.          </p>
    16.          <p>
    17.            <label for="password">Введите свой пароль:</label>
    18.            <input type="password" id="password" class="password" name="password" required>
    19.          </p>
    20.          <p>
    21.            <input type="submit" value="Вход">
    22.          </p>
    23.        </form>
    24.    </body>

    handler.php

    PHP:
    1. require_once ("connect.php");
    2.  
    3. function set_id ($con, $name)
    4. {
    5.    $str = 'SELECT `id` FROM USERS WHERE `name`="'.$name.'" ;';
    6.    $id = $con->query($str);
    7.    $id = $id->fetch_assoc();
    8.    return $id['id'];
    9. }
    10.  
    11. function read ($con, $name, $password)
    12. {
    13.    $str = 'SELECT * FROM USERS WHERE (`name`="'.$name.'" AND `password`="'.$password.'");';
    14.    $result = $con->query($str);
    15.    if (!$result)
    16.    {
    17.      exit("<br>Error: $con->errno, $con->error");
    18.  
    19.    }
    20.    return $result;
    21. }
    22.  
    23. if (!empty($_POST['name']) && !empty($_POST['password']))
    24. {
    25.    $name = $_POST['name']; $password = $_POST['password'];
    26.    $result_final = read($con, $name, $password);
    27.    $num = $result_final->num_rows;
    28.    $_SESSION['user_id'] = (set_id($con, $name));
    29.    if ( $num > 0)
    30.    {
    31.      header ('Location: chat.html');
    32.      }
    33.    else
    34.    {
    35.  
    36.      echo "<br> No such login or password!";
    37.    }
    38. }
    39.    ob_end_flush();
    40.    $con->close();


    connect.php

    PHP:
    1. error_reporting (E_ALL|E_STRICT|E_NOTICE);
    2. ini_set('display_errors',1);
    3. //connect to database
    4. $srv = "localhost";
    5. $usr = "root";
    6. $pass = "";
    7.  
    8. $con = new mysqli($srv, $usr, $pass, "Chat");
    9. if ($con->connect_error)
    10. {
    11.   exit("Connection failed: " .$con->connect_errno.", ".$con->connect_error."!");
    12. }
    13.  
    14. $con->set_charset("utf8");

    chat.html

    HTML:
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3.    <head>
    4.      <title>Страница чата</title>
    5.      <meta charset="utf-8">
    6.      <link rel="icon" type="image/png" href="./assets/index.ico" />
    7.  
    8.      <script type="text/javascript" src="./assets/jquery-3.2.1.js"></script>
    9.  
    10.      <link type="text/css" rel="stylesheet" href="assets/style_chat.css">
    11.    </head>
    12.    <body>
    13.      <section class="container">
    14.        <div id="output">
    15.          <ul>
    16.      
    17.          </ul>
    18.        </div>
    19.        <form id ="form" action="chat.php" method=POST>
    20.    
    21.        <label for="msg">Сообщение</label>
    22.        <input type="text" id="msg" name="msg" class="msg">
    23.    
    24.        <input type="submit" id="submit" class="submit" name="submit" value="Отправить">
    25.        </form>
    26.      </section>
    27.  
    28.      <script type="text/javascript">
    29.  
    30.    </script>
    31.    <script>
    32.    </script>
    33.    <script>
    34. $(document).ready(function(){
    35.    $("#submit").on("click", function(){
    36.      $("#submit").prop("disabled", true);
    37.      $.ajax({
    38.      url: "chat.php",
    39.      method: 'post',
    40.      data: {msg: $("#msg").val()}
    41.      }).done(function(data){
    42.      //Успешное получение ответа
    43.      $("#output").append(data);
    44.      $("#submit").prop("disabled", false);
    45.      });
    46.        $('#output').scrollTop(30000);
    47.    
    48.      })
    49.  
    50.  
    51. });
    52.      var btn = document.querySelector("#submit");
    53.      btn.addEventListener("click", function(evt)
    54.      {
    55.        evt.preventDefault();
    56.    
    57.      });
    58.    </script>
    59.    </body>
    60. </html>


    chat.php

    PHP:
    1. require_once ("connect.php");
    2.  
    3. function write ($con, $user_id, $msg)
    4. {
    5.    $str = "INSERT INTO MESSAGES (`message`, `user_id`) VALUES ('$msg' , '$user_id')";
    6.    $result = $con->query($str);
    7.    if (!$result)
    8.    {
    9.      exit("<br>Error: $con->errno, $con->error");
    10.  
    11.    }
    12. }
    13.  
    14. function read ($con)
    15. {
    16.    $str = "SELECT  `time`, `message`, `user_id` FROM MESSAGES ORDER BY `time`";
    17.    $set = $con->query($str);
    18.    if (!$set)
    19.    {
    20.      exit("<br>Error: $con->errno, $con->error");
    21.  
    22.    }
    23.    $result = array();
    24.    global $rrr;
    25.    echo '<br>';
    26.    $result = array ();
    27.    while ($dump = $set->fetch_assoc())
    28.    {
    29.      $result[] = $dump;
    30.    }
    31.     foreach ($result as $value)
    32.     {
    33.    
    34.       foreach ($value as $k=>$v)
    35.       {
    36.         echo $k.': '.$v.'<br>';
    37.       }
    38.    
    39.     }
    40.      
    41.    return $result;
    42. }
    43.  
    44.  
    45.      $msg = $_POST['msg'];
    46.  
    47.      $user_id = $_SESSION['user_id'];
    48.  
    49.  
    50.      write ($con, $user_id, $msg);
    51.      read($con);
     

    Вложения:

    • for forum.zip
      Размер файла:
      83,7 КБ
      Просмотров:
      1
    #1 Anaksagor, 21 ноя 2017
    Последнее редактирование: 21 ноя 2017
  2. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ты сначала оформи тему правильно код вставь в теги специальные потом будем смотреть.
     
    Anaksagor нравится это.
  3. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ну как то он не работает. Точнее чат не в реальном времени. + как я заметил дублируются сообщения когда отправляешь. Вобщем много ошибок нужно дорабатывать. Потом перепиши все н6а ооп Создай класс для обработки сообщений, сделай некие стили для него. И если чат писать учи web-сокеты.
    PHP:
    1. global $rrr;
    Глобальные переменнеые плохо. Напишешь через класс там создашь переменныую и будет она доступна во всех методах. + пароль лучше через md5 прогонять и потом сравнивать с такм же в базе Потом напрямую непередавай переменные в БД сначала обработаю из, trim, strip_tags ...
     
    #3 Dron-Boy, 21 ноя 2017
    Последнее редактирование: 21 ноя 2017
    Anaksagor нравится это.
  4. Anaksagor

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

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Спасибо за ответ. Должны ли быть отдельные классы для обработки сообщений, записи в БД и вывода их пользователю (типа MVC)?
     
  5. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ну я бы делал это в одном классе, тут зависит от желания больше. Некоторые вобще одиночку юзают постоянно.
     
    Anaksagor нравится это.
  6. Anaksagor

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

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Со стороны клиента к серверу сокет должен открывать javascript? А PHP открывает от сервера к клиенту?
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Не советуй человеку портить данные перед добавлением в базу. Сам не знаешь, как правильно с БД работать - не берись учить других.
     
  8. Anaksagor

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

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Тогда как правильно данные в БД добавлять, в двух словах можешь сказать? Нужен mysqli_real_escape_string?
     
  9. Walk

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

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Рекомендовал бы сделать такой же функционал на каком-нибудь из современных фреймворках - Yii2/Laravel/Symfony, и уже его показывать (показывать сразу ссылкой на github и на работающее демо).
     
    #9 Walk, 21 ноя 2017
    Последнее редактирование: 21 ноя 2017
    Anaksagor нравится это.
  10. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Нет.
    Дельный совет.
    Тс, потрать неделю на то чтобы вскрыть и понять как тоже самое делает любой фреймворк и реализуй аналогичное решение либо код на его базе.
     
    Anaksagor нравится это.
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да. Либо использовать подготовленные выражения.
    --- Добавлено ---
    Со стороны клиента JS запрашивает коннект, а PHP ему должен правильно ответить. Это называется "рукопожатие". Ну и не помереть после этого. Сокет-то держать кто-то должен. И все, двусторонний канал открыт.
     
    Anaksagor нравится это.
  12. Anaksagor

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

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Благодарю всех за советы. Думаю, буду Laravel изучать, параллельно работая на чатом.
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    у тебя
    HTML:
    1. <!DOCTYPE html>
    значит не
    HTML:
    1. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    а
    HTML:
    1. <meta charset="utf-8">
     
    Anaksagor нравится это.
  14. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    земляк а в каком город нашей страны ты за 6к ищешь работу? я тоже искал недавно, интересно регион узнать
     
  15. Anaksagor

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

    С нами с:
    21 ноя 2017
    Сообщения:
    21
    Симпатии:
    0
    Одесса, Украина. А что?