Приветствую всех. Просмотрите, пожалуйста, и скажите достоин ли этот код для того, чтобы приложить его к резюме на позицию junior на 6000 грн. или лучше его потенциальному работодателю не показывать? Я только начал PHP изучать и это подобие чата недавно написал. index.html HTML: <!DOCTYPE html> <html lang="ru"> <head> <title>Регистрация для входа в чат</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <link rel="icon" type="image/png" href="./assets/index.ico"/> <link type="text/css" rel="stylesheet" href="./assets/style_index.css"> </head> <body> <article class="container"> <form action="handler.php" method=POST> <p> <label for="name">Введите свой псевдоним в чате:</label> <input type="text" id="name" class="name" name="name" required> </p> <p> <label for="password">Введите свой пароль:</label> <input type="password" id="password" class="password" name="password" required> </p> <p> <input type="submit" value="Вход"> </p> </form> </body> <html> handler.php PHP: require_once ("connect.php"); session_start(); ob_start(); function set_id ($con, $name) { $str = 'SELECT `id` FROM USERS WHERE `name`="'.$name.'" ;'; $id = $con->query($str); $id = $id->fetch_assoc(); return $id['id']; } function read ($con, $name, $password) { $str = 'SELECT * FROM USERS WHERE (`name`="'.$name.'" AND `password`="'.$password.'");'; $result = $con->query($str); if (!$result) { exit("<br>Error: $con->errno, $con->error"); } return $result; } if (!empty($_POST['name']) && !empty($_POST['password'])) { $name = $_POST['name']; $password = $_POST['password']; $result_final = read($con, $name, $password); $num = $result_final->num_rows; $_SESSION['user_id'] = (set_id($con, $name)); if ( $num > 0) { header ('Location: chat.html'); } else { echo "<br> No such login or password!"; } } ob_end_flush(); $con->close(); connect.php PHP: error_reporting (E_ALL|E_STRICT|E_NOTICE); ini_set('display_errors',1); //connect to database $srv = "localhost"; $usr = "root"; $pass = ""; $con = new mysqli($srv, $usr, $pass, "Chat"); if ($con->connect_error) { exit("Connection failed: " .$con->connect_errno.", ".$con->connect_error."!"); } $con->set_charset("utf8"); chat.html HTML: <!DOCTYPE html> <html lang="ru"> <head> <title>Страница чата</title> <meta charset="utf-8"> <link rel="icon" type="image/png" href="./assets/index.ico" /> <script type="text/javascript" src="./assets/jquery-3.2.1.js"></script> <link type="text/css" rel="stylesheet" href="assets/style_chat.css"> </head> <body> <section class="container"> <div id="output"> <ul> </ul> </div> <form id ="form" action="chat.php" method=POST> <label for="msg">Сообщение</label> <input type="text" id="msg" name="msg" class="msg"> <input type="submit" id="submit" class="submit" name="submit" value="Отправить"> </form> </section> <script type="text/javascript"> </script> <script> </script> <script> $(document).ready(function(){ $("#submit").on("click", function(){ $("#submit").prop("disabled", true); $.ajax({ url: "chat.php", method: 'post', data: {msg: $("#msg").val()} }).done(function(data){ //Успешное получение ответа $("#output").append(data); $("#submit").prop("disabled", false); }); $('#output').scrollTop(30000); }) }); var btn = document.querySelector("#submit"); btn.addEventListener("click", function(evt) { evt.preventDefault(); }); </script> </body> </html> chat.php PHP: require_once ("connect.php"); session_start(); ob_start(); function write ($con, $user_id, $msg) { $str = "INSERT INTO MESSAGES (`message`, `user_id`) VALUES ('$msg' , '$user_id')"; $result = $con->query($str); if (!$result) { exit("<br>Error: $con->errno, $con->error"); } } function read ($con) { $str = "SELECT `time`, `message`, `user_id` FROM MESSAGES ORDER BY `time`"; $set = $con->query($str); if (!$set) { exit("<br>Error: $con->errno, $con->error"); } $result = array(); global $rrr; echo '<br>'; $result = array (); while ($dump = $set->fetch_assoc()) { $result[] = $dump; } foreach ($result as $value) { foreach ($value as $k=>$v) { echo $k.': '.$v.'<br>'; } } return $result; } $msg = $_POST['msg']; $user_id = $_SESSION['user_id']; write ($con, $user_id, $msg); read($con);
Ну как то он не работает. Точнее чат не в реальном времени. + как я заметил дублируются сообщения когда отправляешь. Вобщем много ошибок нужно дорабатывать. Потом перепиши все н6а ооп Создай класс для обработки сообщений, сделай некие стили для него. И если чат писать учи web-сокеты. PHP: global $rrr; Глобальные переменнеые плохо. Напишешь через класс там создашь переменныую и будет она доступна во всех методах. + пароль лучше через md5 прогонять и потом сравнивать с такм же в базе Потом напрямую непередавай переменные в БД сначала обработаю из, trim, strip_tags ...
Спасибо за ответ. Должны ли быть отдельные классы для обработки сообщений, записи в БД и вывода их пользователю (типа MVC)?
Ну я бы делал это в одном классе, тут зависит от желания больше. Некоторые вобще одиночку юзают постоянно.
Со стороны клиента к серверу сокет должен открывать javascript? А PHP открывает от сервера к клиенту?
Не советуй человеку портить данные перед добавлением в базу. Сам не знаешь, как правильно с БД работать - не берись учить других.
Тогда как правильно данные в БД добавлять, в двух словах можешь сказать? Нужен mysqli_real_escape_string?
Рекомендовал бы сделать такой же функционал на каком-нибудь из современных фреймворках - Yii2/Laravel/Symfony, и уже его показывать (показывать сразу ссылкой на github и на работающее демо).
Нет. Дельный совет. Тс, потрать неделю на то чтобы вскрыть и понять как тоже самое делает любой фреймворк и реализуй аналогичное решение либо код на его базе.
Да. Либо использовать подготовленные выражения. --- Добавлено --- Со стороны клиента JS запрашивает коннект, а PHP ему должен правильно ответить. Это называется "рукопожатие". Ну и не помереть после этого. Сокет-то держать кто-то должен. И все, двусторонний канал открыт.
у тебя HTML: <!DOCTYPE html> значит не HTML: <meta http-equiv="content-type" content="text/html; charset=utf-8"> а HTML: <meta charset="utf-8">
земляк а в каком город нашей страны ты за 6к ищешь работу? я тоже искал недавно, интересно регион узнать