Чат + форма будут иметь вид: {ignore}
onkeypress="ctrlEnter(event, this);" - этим добавим отслеживание сочетания клавиш.Чат
Отправка формы будет происходить методом AJAX в файл chat.php, для этого добавим JS:
$(function() { $("#submit").click(function() { // получаем то, что написал пользователь var name = $("#name").val(); var message = encodeURIComponent($("#message").val()); if(message != "") { // Формируем строку запроса var data = 'name='+ name +'&message='+ message; // ajax вызов $.ajax({ type: "POST", url: "chat.php", data: data, success: function(html){ // после получения результата $("#chat").slideToggle(500, function(){ $(this).html(html).slideToggle(500); $("#message").val(""); }); } }); } else { alert("А сообщение ввести?!"); } return false; }); });encodeURIComponent() - добавляем для экранирования спецсимволов в сообщении, например знак "+" без этой функции проходить не будет.
Для автоматического обновления чата без обновления страницы добавим:
function refresh_chat() { var data = 'refresh=1'; $.ajax({ type: "POST", url: "chat.php", data: data, success: function(html){ $("#chat").html(html); } }); } //заполнить страницу в первый раз refresh_chat(); // обновить каждые 15 секунд setInterval("refresh_chat()", 15000);И обработчик chat.php: {ignore}
/* mysql хост */ $hostname = 'localhost'; /* mysql пользователь */ $username = 'root'; /* mysql пароль */ $password = ''; $dbname = 'chat'; try { $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); /* Если админ нажал на кнопку удаления записи */ if($_POST['delid']) { $sql = "DELETE FROM chat WHERE id = :id"; $stmt = $dbh->prepare($sql); $stmt->bindParam(':id', $_POST['delid'], PDO::PARAM_INT); $stmt->execute(); } if($name) { $message = $_POST['message']; $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO chat (date_time, name, message) VALUES (NOW(), :name, :message)"; $stmt = $dbh->prepare($sql); $stmt->bindParam(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':message', $message, PDO::PARAM_STR); if ($stmt->execute()) { chat(); } } } catch(PDOException $e) { echo $e->getMessage(); } if($_POST['refresh']) { chat(); } function chat() { global $dbh; $sql = "select * from chat order by date_time desc limit 16"; echo '
- ';
foreach ($dbh->query($sql) as $row) {
echo '
- '; echo ''.date("H:i", strtotime($row['date_time'])).' '; echo ''.$row['name'].''; echo ' '.$row['message'].''; // Добавим кнопку удаления сообщений для админа с 127.0.0.1 =) if($_SERVER['REMOTE_ADDR'] == '127.0.0.1') { echo ' X'; } echo ' '; } echo '
CREATE TABLE `chat` ( `id` int(11) NOT NULL, `date_time` datetime NOT NULL, `name` varchar(20) NOT NULL, `message` varchar(255) DEFAULT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8;