2015-06-08 6 views
0

Я только начал работать с SQL, и я делаю чат.PHP chat отправить обновить кнопку

Несколько вопросов: -

1) Если вы приехали из index.php (место, где вы можете положить в имени пользователя только) Придешь к home.php. Чем наверху сказано: вы еще не отправили сообщение. и каждый раз, если я обновляю его, он просто загружает последнее сообщение. Я знаю, что есть исправление, которое я просто не смог найти.

2) Если я нажму на кнопку отправки, она обновит страницу и дойдет до конца. Поэтому вам нужно прокрутить весь путь вниз, чтобы войти и увидеть ваше сообщение. + я могу исправить это без обновления, но вы не видите никаких сообщений beign send.

<?php 

if (isset($_POST["afzender"])){ 
    $_SESSION['afzender'] = $_POST['afzender']; 
} 

$servername = "localhost"; 
$username = "*******"; 
$password = "******"; 
$dbname = "*****"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "INSERT INTO 'chatbox_berichten' 
(''id', 'afzender', 'chatbox_id', 'bericht', 'tijd') 
VALUES (NULL, '".$_SESSION['afzender']."', '', '".$_POST['bericht']."', CURRENT_TIMESTAMP);"; 
echo $sql; 
if ($conn->query($sql) === TRUE) { 
    echo "Succesvol Toegevoegd."; 
} else { 
    echo $conn->connect_error; 
} 
echo "<hr/>"; 

$sql = "SELECT * FROM chatbox_berichten"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    echo "<table border='2'>"; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>" . $row["id"]. "<td>" . $row["afzender"]. "<td>" . $row["bericht"]. " <td>" . $row["tijd"]. "</td></tr>"; 
    } 
    echo "</table>"; 
} else { 
    echo "0 results"; 
} 


$conn->close(); 
?> 
<?php echo $_SESSION['afzender']; ?>   
<form action="home.php" method="post"> 
Bericht: <input type="text" name="bericht"><br> 
<input type="submit"> 
</form> 

Я знаю, что код выглядит грязным. У меня нет никаких уроков, чтобы выглядеть лучше.

Так что любая помощь будет оценена по достоинству.

ответ

0

Я помогу вам, но у меня нет времени, чтобы написать весь код для вас.

каждый раз, если я обновить его просто загружать Последнее сообщение

Если вы обновите страницу, браузер будет повторить последний запрос. Если вы отправили сообщение раньше, это будет запрос POST. Поэтому сообщение будет отправлено снова, потому что браузер повторяет HTTP-запрос.

Наиболее распространенным решением является перенаправление HTTP на тот же URL-адрес при обработке запроса POST, поэтому последний запрос, который делает браузер, является запросом GET (см. Ниже для замечаний).

Если я нажму на кнопку отправки, она обновит страницу и переместит весь путь . Поэтому вам нужно прокрутить весь путь вниз, чтобы войти в ваше сообщение . + я могу исправить это без refresching, но вы не видите любые сообщения beign send.

Для чата, это не лучший способ. Вы можете изменить порядок сообщений чата (новейший сверху), поэтому вам не нужно прокручивать вниз, чтобы просмотреть последние сообщения.

Идеальный подход - это асинхронная связь клиент/сервер. Прочитайте некоторые статьи о AJAX (или веб-сайтах, если вы хотите сделать огромный шаг к современным технологиям). Простой скрипт может периодически (или через уведомления с помощью веб-карт) проверять наличие новых сообщений, добавлять их в список старых сообщений и прокручивать соответственно. Если вы отправили сообщение и отправку фоновой задачи, ваша первая проблема исчезнет, ​​так как вам не нужно будет выполнять «запрос переднего плана» для отправки/получения сообщений.

Еще одна вещь: вы действительно должны прочитать некоторые статьи о сетевых атаках. Ваш код уязвим для атак XSS и SQL. В настоящее время ваш PHP-код позволяет злоумышленникам завладеть вашей базой данных и вводить произвольный код на страницу. Вы должны использовать экранирование HTML и SQL.

Смежные вопросы