2014-01-13 2 views
0

Я не могу работать с этим. Был несколько дней и до сих пор нет прогресса после повторного написания его больше раз, чем я могу рассчитывать на свои руки.AJAX чат-система не работает

Вот Javascript (на той же странице, как HTML)

Резюме: Типы пользователей текста в поле ввода. Это будет отправлено для обработки, которое затем отправляется обратно и отображается на экране в поле ID'd как DisplayText на странице html.

<script type="text/javascript"> 
    function SendText() { 
     if (document.getElementById("Text").innerHTML == "") { 
      return; 
     } else 
     { 
      var xmlhttp = new XMLHttpRequest(); 
      xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
        document.getElementById("DisplayText").innerHTML = xmlhttp.responseText; 
       } 
      } 
      Text = document.getElementById("Text").value; 
      xmlhttp.open("GET", "php/Test.php?Chat=" + Text, true); 
      xmlhttp.send(); 
     } 
    } 
</script> 

Вот HTML (той же странице, что и скрипт)

<div> 
    <p> 
     <span id="DisplayText"> 
      TEXT GOES HERE 
     </span> 
    </p> 
</div> 
<form action="" onsubmit="SendText();"> 
    <input type="" name="" id="Text" /> 
    <input type="submit" value="Send" name="Send" /> 
</form> 

код PHP здесь

<?php 
session_start(); 
include ("Connect.php"); 
$Connection = mysqli_connect("localhost", "root", "", "chatsystem"); 
$Create = "CREATE TABLE " . $_SESSION["Username"] . "Chat(Username VARCHAR(255), Chat VARCHAR(255))"; 
//////////////////////////////////////////////////////////////////////////////// 
$DatabaseExist = $Connection->query("SELECT 1 FROM " . $_SESSION["Username"] . "Chat"); 
if ($DatabaseExist !== false) { 
    echo "Database exists"; 
    doSomething(); 
} else { 
    echo "Database does not exist"; 
    mysqli_query($Connection, $Create); 
    doSomething(); 
} 
//////////////////////////////////////////////////////////////////////////////// 
function doSomething() { 
    // Get the sent chat 
    $Input = $_REQUEST["Chat"]; 
    // Insert into the database the new chat sent 
    mysqli_query($Connection, "INSERT INTO " . $_SESSION["Username"] . "chat (`Username`, `Chat`) VALUES ('$_SESSION[Username], '$Input')"); 
    // Select everything from the database 
    $Result = $Connection->query("SELECT * FROM " . $_SESSION["Username"] . "Chat"); 
    // Display everything from the database in an orderly fashion 
    // -- 
    // For the length of the database 
    // Append to a variable the next table row 
    // -- 
    while ($Row = $Result->fetch_array()) { 
     // Make Variable accessable 
     global $Input; 
     // Append username to the return value 
     $Input = $Input . $Row["Username"] . " : "; 
     // Append chat to the return value 
     $Input = $Input . $Row["Chat"] . "<br />"; 
    } 
} 
// Will return the value 
echo $Input; 
?> 

Мое соединение с базой данных в порядке. Я использую его на других страницах, которые работают. Так что давайте предположим, что это не проблема. : P

Любая помощь или понимание любого, кто знает или может думать о чем-то неправильном, я был бы очень благодарен. Я новичок в AJAX.

+0

использования Javascript рамки (рекомендованное JQuery) для этой цели, насколько проблем Ajax. см. этот учебник, http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery для долгого опроса. –

ответ

0

первый: использовать вход в value свойство вместо innerHTML

например. использовать

if (document.getElementById("Text").value == "") 

вместо

if (document.getElementById("Text").innerHTML == "") 

2-й: использование return false; в onsubmit событий формы; до предотвратить обновление текущей страницы при использовании ajax. В противном случае страница будет обновлена, и она не отобразит вывод php-страницы,

например.использовать

onsubmit="SendText(); return false;" 

вместо просто

onsubmit="SendText();" 
+0

Поскольку у вашего ответа был наибольший вклад, чтобы дать мне, я отметил его как ответ. Из-за обоих этих ответов он побрился для меня немного времени, пытаясь понять, почему это было освежающим, было бы борьбой. Так что спасибо тебе. – Hamedar

+0

рад, что он сработал для вас. –

+1

@ GabyakaG.Petrioli hmmm right, но sql injection - проблемы с серверной стороной; это не вопрос. –

1

Вы делаете неправильный тест с

if (document.getElementById("Text").innerHTML == "") 

Он должен быть таким же, как вы используете, чтобы получить текст для отправки в AJAX

if (document.getElementById("Text").value == "") 

Так проверить свою собственность value, а не его innerHTML поскольку input элементы не содержат html.


Будьте осторожны, потому что ваш код широко открыт до SQL injection attacks.

+0

Я пытаюсь заставить его работать, тогда я собираюсь снять текст со всех символов, кроме алфавитных и числовых, которые должны иметь дело с несколькими атаками SQL Injection? Однако спасибо за этот код. Это помогло мне отладить его. – Hamedar

+0

@ Hamedar Лучшая защита от инъекций - использовать подготовленные операторы, которые принимают входные данные только как параметры, а не для конкатенации строк. –

+0

Не будет ли защиты достаточно, чтобы остановить любые и все инъекции, если я удаляю все символы, которые не в алфавитном и/или численном? Таким образом, у них нет возможности использовать кодирование php и/или sql? Если они не могут связаться с базой данных, они не могут вызвать никаких проблем. Однако я могу видеть, что вы имеете в виду, подготовленное заявление просто удалит любую возможность сделать что угодно. – Hamedar