Jump to content
sEnte

Insere da DB mas não mostra o que inseri

Recommended Posts

sEnte

como podem ver isto pede o username, escrevo o nome e clico enter, ele insere na BD. Depois a parte da mensagem, primeiro deveria aparecer a mensagem No chats found. Be the first e não aparece, e depois mesmo que eu escreva uma mansagem e a envie ela é adicionada à DB mas não me mostra o que inseri

index.php

<?php
session_start();
?>
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>Ajax Chat</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js%22></script>

<style type="text/css">
 #chatbox {
  background-color: #DDD;
  border: 1px solid #000;
  width: 600px;
  height: 300px;
 }
 #chatbox #initial {
  text-align: center;
  margin: auto;
  width: 250px;
  padding-top: 100px;
 }

 #chatbox #primary {
  display: none;
 }
 #chatbox #primary #window {
  width: 100%;
  height: 265px;
  background-color: #FFF;
  border-bottom: 1px solid #AAA;
  overflow: scroll;
 }
 #chatbox #primary #window .list1 {
  background-color: #EEE;
  padding: 5px;
  border-bottom: 1px solid #AAA;
 }
 #chatbox #primary #window .list2 {
  background-color: #DDD;
  padding: 5px;
  border-bottom: 1px solid #AAA;
 }
 #chatbox #primary #form {
  width: 100%;
 }
</style>
<script type="text/javascript">
 var updateTime = 5;
 var running = false;
 var counter = 0;
 function chat_initial() {
  var user = document.getElementById("chat_user").value;
  $.post('./chat.php', {stage:"initial", user:user}, function(data) {
if (data == "good") {
 $('#chatbox #initial').css('display', 'none');
 $('#chatbox #primary').css('display', 'inline');
}
 else
 alert("The username is taken. Please try another!");
  });
 }
 function chat_update() {
  if (counter == updateTime)
chat_load();
  else
counter ++;
  if (running == true)
setTimeout("chat_update();", 1000);
 }
 function chat_load() {
  $('#chatbox #primary #window').html(data);
  $.post('./chat.php', {stage:"load"}, function(data){
$('#chatbox #primary #window').html(data);
counter = 0;
setTimeout("chat_update();", 1000*updateTime);
  });
 }
 function chat_send() {
  var text = document.getElementById("chat_text").value;
  $.post('./chat.php', {stage:"send", text:text}, function(data) {
document.getElementById("chat_text").value = '';
if (data == "good") {
 chat_load();
}
else
 alert("No username was found. Please. Please reload the chat window");
  });
 }
</script>
</head>
<body>
<div id="chatbox">
 <div id="initial">
  <table>
<tr align="center">
 <td>Enter a username</td>
</tr>
<tr align="center">
 <td><input type="text" name="chat_user" id="chat_user" style="width: 250px;" onkeypress="if(event.keyCode == 13){ chat_initial(); }" /></td>
</tr>
<tr align="center">
 <td><input type="button" value="Continue" onclick="chat_initial();"></td>
</tr>
  </table>
 </div>
 <div id="primary">
  <div id="window"></div>
  <div id="form">
<table style="width: 100%;">
 <tr>
  <td width="90%"><input type="text" name="chat_text" id="chat_text" style="width: 100%;" onkeypress="if(event.keyCode == 13){ chat_send(); }" /></td>
  <td align="center"><input type="button" id="chat_send" value="Chat!" onclick="chat_send();"/></td>
 </tr>
</table>
  </div>
 </div>
</div>
</body>
</html>

chat.php

<?php
//
session_start();
// Connect to the database
mysql_connect('127.0.0.1', 'root', '');
mysql_select_db('tutorials');
// Reads the stage
$stage = $_POST['stage'];
// primary code
if ($stage == "initial") {
 // check the username
 $user = $_POST['user'];
 $query = mysql_query("SELECT * FROM chat_active WHERE user='$user'");
 if(mysql_num_rows($query) == 0){
  $time = time();
  //
  mysql_query("INSERT INTO chat_active VALUES ('$user', '$time')");
  // set the session
  $_SESSION['user'] = $user;
  echo 'good';
 }
 else
  echo 'taken';
}
else if ($stage == "send") {
 // get the text
 $text = $_POST['text'];
 // check for a user
 if (isset($_SESSION['user'])) {
  $user = $_SESSION['user'];
  $time = time();
  mysql_query("INSERT INTO chat_chats VALUES ('$user', '$time', '$text')");
  echo 'good';
 }
 else
  echo 'no user';
}
else if($stage == "load"){
 $num = 1;

 $query = mysql_query("SELECT * FROM chat_chats ORDER BY time DESC");
 if (mysql_num_rows($query) > 0) {
  while ($row = mysql_fetch_assoc($query)) {
$user = $row['user'];
$time = $row['time'];
$content = $row['content'];
$content = htmlentities($content);
echo '<div class="list'.$num.'">';
 echo '<b>'. $user.'</b> at <i>'.date("M d, Y", $time).'</i> - '.$content;
echo '</div>';
if ($num = 1)
 $num = 2;
else
 $num = 1;
  }
 }
 else
  echo 'No chats found. Be the first';
}
else
 echo 'error';
?>

Por agora parece resolvido

reparei que aqui

 function chat_load() {
  $('#chatbox #primary #window').html(data);
  $.post('./chat.php', {stage:"load"}, function(data){
    $('#chatbox #primary #window').html(data);
    counter = 0;
    setTimeout("chat_update();", 1000*updateTime);
  });
 }

tenho parte do código duplicado.

Nada como um console.log(data) para me mostrar isso lol

Edited by sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
sEnte

Afinal não está resolvido.

se por exemplo inserir uma palavra tipo " I'm " ele não é adicionad à bd :S


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
sEnte

sim resolveu.

@N3lson Obrigado :)


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
brunoais

Resolveu tão bem que o teu programa ficou muito vulnerável.

Só aqui vejo 2 gafes:

  • Usas ainda o grupo de funções mysql_*
  • Não tratas do input do utilizador para ser metido numa DB em segurança.

Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
sEnte

1 - O grupo de funções mysql_* é mais vulnerável? Não sabia.

Como posso melhorar então? talvez PDO? já segui um tutorial sobre isso mas nada de mais.

2 - realmente não tratei dessa parte.

Será o próximo passo quando melhorar.


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
brunoais

1 - O grupo de funções mysql_* é mais vulnerável? Não sabia.

Como posso melhorar então? talvez PDO? já segui um tutorial sobre isso mas nada de mais.

A filtragem funciona por um blacklist. Prepared statements é melhor pq qq input é tratado como texto.

Podes usar as mysqli_* e prepared statements, não precisa de ser o PDO.

2 - realmente não tratei dessa parte.

Será o próximo passo quando melhorar.

Pois... É bom que resolvas se queres evitar problemas com segurança.

De qq modo, ao nível de segurança:

texto simples < addslashes() < mysql_real_escape_string() <(mas pouca diferença) mysqli_real_escape_string() < (significativo) mysqli prepared statements = PDO prepared statements.

Edited by yoda

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
ICETuga

Da minha experiência o PDO para quem está habituado ao mysql pode parecer confuso ao inicio mas depois de habituado, não quererás outra. ;)

Share this post


Link to post
Share on other sites
sEnte

Nunca usei mysqli mas pelo que vi parece ser algo idêntico ao mysql. não sei, tenho de averiguar.

ICETuga o PDO parece algo confuso, mas ao mesmo tempo simples lol


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.