2011-11-14 1 views
1

나는 PHP와 MySQL을 사용하여 작성한 매우 간단한 채팅 시스템을 사용하고 있으며 (이 두 번째 언어는이 언어를 사용하고 있습니다.) 자동 새로 고침 방법이 있는지 궁금합니다. 테이블 데이터 나는 내 데이터베이스에서 당기고 PHP를 통해 HTML을 테이블로 자바 스크립트와 같은 일을하지 않고 가서 전체 웹 페이지를 다시로드하지 않고 ... 단지 그것으로 데이터를 가진 HTML 테이블을 다시로드 PHP는 그것을 가득 .. .. 말이 돼?새로 고침 페이지가없는 자동 새로 고침 테이블 PHP MySQL

은 여기 내가 (/chat.php에 대한) 도움이된다면 코드는 자바 스크립트없이 그것을 할 것이다 유일한 방법은 채팅 인터페이스 iframe을 사용하는 것입니다

<html><head></head><body><center> 
<form action="chat.php" method="post"> 
Message: <br><textarea type="text" name="message" style="width:80%; height:300px;"></textarea><br> 
<input type="submit" name="submitButton"/> <a href="http://www.****.com/chat.php"><button name="Refresh Chat">Refresh Chat</button></a> 
</form> 
<div style="width:100%;"> 

<?php 

$host="****"; 
$user="****"; 
$password="****"; 

$cxn = mysql_pconnect ($host, $user, $password); 

mysql_select_db("defaultdb", $cxn); 

if (getenv(HTTP_X_FORWARDED_FOR)) { 
    $ipaddress = getenv(HTTP_X_FORWARDED_FOR); 
} else { 
    $ipaddress = getenv(REMOTE_ADDR); 
} 

$message = nl2br(strip_tags(nl2br($_POST["message"]))); 

if (isset($_POST['submitButton'])) { 
    if ($message != "") { 
     mysql_query("INSERT INTO ChatTest (ID, TimeStamp, Message) VALUES ('$ipaddress', NOW(), '$message')"); 
    } 
    header('Location: chat.php'); 
} 

$message = ""; 

$data = mysql_query("SELECT * FROM ChatTest ORDER BY TimeStamp DESC") or die(mysql_error()); 
Print "<table border cellpadding=3 width='100%' style='table-layout:fixed'> 
     "; 
Print "<tr>"; 
Print "<th style='width:10%;'>ID:</th><th style='width:10%;'>TimeStamp:</th><th style='width:70%;'>Message:</th>"; 
while($info = mysql_fetch_array($data)) { 
Print " 
     <tr>"; 
    Print " <td>".$info['ID'] . "</td> "; 
    Print " <td>".$info['TimeStamp'] . " </td>"; 
    Print " <td style='white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word'>".$info['Message'] . "</td></tr> 
      "; 
} 
Print "</table>"; 

mysql_close($cxn); 


?> 

</div></center></body></html> 
+2

PHP는 서버 측이므로 자바 스크립트와 같은 것이 필요할 것이다. PHP 스크립트를 실행하고 테이블을 다시 채 웁니다. Jquery의 $ .ajax 함수를 사용하여 특정 비트의 내용을 채울 수 있습니다. 이 인스턴스의 DIV - http://api.jquery.com/jQuery.ajax/ –

답변

5

이 기술은 AJAX라고하며 프로젝트에 추가 할 수있는 가장 쉬운 라이브러리 중 하나는 jQuery입니다. 귀하의 문제는 JavaScript가 아니라 전체 페이지를 다시로드하는 아이디어로 간주됩니다.

UPDATE 내가 그런 좋은 사람 이니까)이 작동합니다, 더 많거나 적은, 나는 그것을 시도하지 않은, 그래서 오타 또는 두 가지가있을 수 있습니다 :

<?php 

$host="****"; 
$user="****"; 
$password="****"; 

$cxn = mysql_pconnect ($host, $user, $password); 

mysql_select_db("defaultdb", $cxn); 

if (getenv(HTTP_X_FORWARDED_FOR)) { 
$ipaddress = getenv(HTTP_X_FORWARDED_FOR); 
} else { 
$ipaddress = getenv(REMOTE_ADDR); 
} 

$message = nl2br(strip_tags(nl2br($_POST["message"]))); 
if (isset($_POST['submitButton'])) { 
if ($message != "") { 
mysql_query("INSERT INTO ChatTest (ID, TimeStamp, Message) VALUES ('$ipaddress', NOW(), '$message')"); 
} 
header('Location: chat.php'); 
} 

$message = ""; 

$data = mysql_query("SELECT * FROM ChatTest ORDER BY TimeStamp DESC") or die(mysql_error()); 

$tbl = ''; 
$tbl .= "<table border cellpadding=3 width='100%' style='table-layout:fixed'> 
"; 
$tbl .= "<tr>"; 
$tbl .= "<th style='width:10%;'>ID:</th><th style='width:10%;'>TimeStamp:</th><th style='width:70%;'>Message:</th>"; 
while($info = mysql_fetch_array($data)) { 
$tbl .= " 
<tr>"; 
$tbl .= " <td>".$info['ID'] . "</td> "; 
$tbl .= " <td>".$info['TimeStamp'] . " </td>"; 
$tbl .= " <td style='white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word'>".$info['Message'] . "</td></tr> 
"; 
} 
$tbl .= "</table>"; 

mysql_close($cxn); 

if (isset ($_GET['update'])) 
{ 
    echo $tbl; 
    die(); 
} 

?> 
<html><head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script> 
</head><body><center> 
<form action="chat.php" method="post"> 
Message: <br><textarea type="text" name="message" style="width:80%; height:300px;"></textarea><br> 
<input type="submit" name="submitButton"/> <a href="http://www.****.com/chat.php"><button name="Refresh Chat">Refresh Chat</button></a> 
</form> 
<div id="messages" style="width:100%;"> 
    <?php echo $tbl; ?> 
</div></center> 
<script type="text/javascript"> 
$(document).ready (function() { 
    var updater = setTimeout (function() { 
     $('div#messages').load ('chat.php', 'update=true'); 
    }, 1000); 
}); 
</script> 
</body></html> 

코딩 기술에 관해서는 SQL 인젝션을 조사하고 더 깨끗한 HTML을 작성하는 것이 좋겠지 만 거기에 도착할 것이라고 확신한다.

+0

예, 정확히 :) 나는 그 시간을 보게됩니다. 고마워요! –

+0

고맙습니다 !!! 아 :) –

1

및 메타 새로 고침입니다.

하지만 자바 스크립트를 사용하지 않는 이유는 무엇입니까?

+1

그런데 "SQL injection"을 찾아보십시오 ... chat 스크립트에 구멍이 있습니다. –

+0

혼란스러워 하하, 죄송 합니다만 JavaScript를 사용하는 데 문제가 없습니다 ... 전체 페이지를 다시로드하는 Javascript를 사용하고 싶지 않습니다 ... 단지 테이블 데이터를 다시로드하고 페이지의 다른 부분을 모두 유지하려고합니다. (예 : 스트리밍 비디오, 텍스트가있는 텍스트 상자, 진행 막대, 타이머 등) –

+0

전체 페이지를 다시로드 할 필요가 없습니다. 채팅 데이터 만로드하고 인터페이스를 새로 고치려면 Ajax를 사용하십시오. –