Door
Furio Scripting
op 05-08-2015 15:15
gewijzigd op 05-08-2015 21:58
2.129 views
Beste forumleden,
Opgelost: Het probleem zat hem in de file die include werd (shout.php) daarin zaten queries die niet werktte.
Ik probeer een chat script werkend te krijgen maar heb wat problemen ermee. Ik heb in mijn index een router die in een bepaalde map kijkt en de pagina include als deze bestaat.
Deze javascript code:
// load messages every 1000 milliseconds from server.
load_data = {'fetch':5000};
window.setInterval(function()
{
$.post('./bedrijven/pagina/shout.php', load_data, function(data)
{
$('.message_box').html(data);
var scrolltoh = $('.message_box')[0].scrollHeight;
$('.message_box').scrollTop(scrolltoh);
});
}, 1000);
Hij include nu in de chatbox de hele index pagina in plaats van enkel de code te returnen die in shout.php staat. Hoe kan ik ervoor zorgen dat deze enkel mijn code uit shout.php teruggeeft? Is er misschien een functie om de overige code zoals css en js includes,footer,menu eruit te halen, lijkt me wel wat zwaar aangezien die elke miliseconden het bestand aanroept om te zien of er nieuwe messages zijn.
Je javascript code plaatsen heeft geen nut, want dat gaat alleen maar over ophalen/laden. Post liever je shout.php, maar als ik het goed leest, dan doel je waarschijnlijk op html en alles, dan zou die dus in shout.php moeten staan en kun je die er gewoon uithalen.
Je javascript code plaatsen heeft geen nut, want dat gaat alleen maar over ophalen/laden. Post liever je shout.php, maar als ik het goed leest, dan doel je waarschijnlijk op html en alles, dan zou die dus in shout.php moeten staan en kun je die er gewoon uithalen.
Dit is de php code van shout.php
<?php
$database = new database();
if($_POST)
{
//connect to mysql db
//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
die();
}
if(isset($_POST["message"]) && strlen($_POST["message"]) > 0 )
{
//sanitize user name and message received from chat box
//You can replace username with registerd username, if only registered users are allowed.
$username = check_input($_POST["username"]);
$message = check_input($_POST["message"]);
$user_ip = $_SERVER['REMOTE_ADDR'];
//insert new message in db
$q = "INSERT INTO shout_box(user, message, ip_address) value('$username','$message','$user_ip')";
$database->query($q);
$msg_time = date('h:i A M d',time()); // current time
echo '<div class="shout_msg"><time>'.$msg_time.'</time><span class="username">'.$username.'</span><span class="message">'.$message.'</span></div>';
// delete all records except last 10, if you don't want to grow your db size!
//mysqli_query($sql_con,"DELETE FROM shout_box WHERE id NOT IN (SELECT * FROM (SELECT id FROM shout_box ORDER BY id DESC LIMIT 0, 10) as sb)");
}
elseif($_POST["fetch"] == 1)
{
$q = "SELECT user, message, date_time FROM (select * from shout_box ORDER BY id DESC LIMIT 10) shout_box ORDER BY shout_box.id ASC";
$results = $database->query($q);
while($row = mysqli_fetch_assoc($results))
{
$msg_time = date('h:i A M d',strtotime($row["date_time"])); //message posted time
echo '<div class="shout_msg"><time>'.$msg_time.'</time><span class="username">'.$row["user"].'</span> <span class="message">'.$row["message"].'</span></div>';
}
}
else
{
header('HTTP/1.1 500 Are you kiddin me?');
exit();
}
} ?>
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
{
// blablabla //
}
Aangezien je in je eerst post zegt dat je menu en footer wilt laten verdwijnen kan je toch ook zorgen dat de menu en footer verdwijnen met deze code.
Ja maar dit bestand wordt elke MILIseconde aangeroepen en om dan elke miliseconde bepaalde html te moeten verwijderen is niet echt snel. Daarnaast pakt die ook al me js includes en css omdat dit natuurlijk ook in mijn index.php staat.
Het mooiste zou zijn als die enkel dat bestand aanroept en niet me gehele index file erbij pakt.
Dan is beide het probleem niet, maar je router om pagina's op te halen. Ik heb geen idee hoe die eruit ziet, maar een script van ander gebruiken geeft sowieso altijd koppijn, daarom is het beter je eigen te schrijven. Ik zie dat je dit script hiervandaan hebt: http://www.sanwebe.com/2013/04/creating-shout-box-facebook-style, klopt?
Elke miliseconde is wel heel erg, doe het gewoon 2x per seconde dus 500 miliseconden.
Of 250 miliseconden, maar elke miliseconde is nergens voor nodig.
Het probleem is denk ik een beetje dat je niet alles in aparte "acties" hebt verwerkt, maar alles in een soort van if-elseif-elseif-else-constructie hebt gestopt waar je ook nog een maintemplate / pagina-layout doorheen zit gebreid?
Als je alles compartimenteert in aparte acties heb je dit probleem niet, lijkt mij.
EDIT: en als je slim bent maak je voor dit soort dingen een soort van shellscript die enkel JSON serveert ofzo.
Dan is beide het probleem niet, maar je router om pagina's op te halen. Ik heb geen idee hoe die eruit ziet, maar een script van ander gebruiken geeft sowieso altijd koppijn, daarom is het beter je eigen te schrijven. Ik zie dat je dit script hiervandaan hebt: http://www.sanwebe.com/2013/04/creating-shout-box-facebook-style, klopt?
Die tutorial heb ik idd gebruikt en werkt ook goed als je het standalone gebruikt maar dat doe ik niet.