0

Estoy tratando de imprimir el resultado de un query dentro de un div que esta en otro fichero, el primer fichero chat-php es llamado mediante el metodo GET al fichero index.php que se encuentra en la misma carpeta

introducir la descripción de la imagen aquí

este es el codigo del fichero chat.php

<?php session_start();

include 'db.php';
require_once '../functions.php';

comprobarSession(); 
$id=$_GET['id'];
//var_dump($id)
?>

<?php 

$sql = "SELECT ue.nombre de, ur.nombre a, c.message FROM  messages c
        INNER JOIN usuarios ue ON c.idEmitter = ue.idUsuario
        INNER JOIN usuarios ur ON c.idReceiver = ur.idUsuario
        WHERE (c.idEmitter = :usr1 AND c.idReceiver = :usr2)
        OR (c.idEmitter = :usr2 AND c.idReceiver = :usr1)
        ORDER BY sent ASC";

$usr1=$id;
$usr2=$us;

$stmt = $conexion->prepare($sql);
$stmt->bindParam("usr1",$usr1);
$stmt->bindParam("usr2",$usr2);
$stmt ->execute();
$arrDatos = $stmt->fetchAll(PDO::FETCH_ASSOC);
//var_dump($arrDatos);
imprimir ($arrDatos);

$pdo = null;

?>

<?php 
//Una función para mostrar los datos
function imprimir($arrDatos)
{

    if ($arrDatos)
    {
        echo "<hr />SE ENCONTRARON  ".count($arrDatos). " REGISTROS<br /><hr />";
        /**
         *  Construímos los datos  de forma limpia
        */
        $strHtml='CHAT:<br />';    
        foreach ($arrDatos as $row)
        {
            //'<div id="chat_data">'
            $strHtml.='<span style="color: green;>'.$row["de"].': </span>'.$row["message"].'<br />';
            $strHtml.='<span style="color: green;>'.$row["a"].': </span>'.$row["message"].'<br />';
            //'</div>'
        }
        echo $strHtml;
    }
}
?>

y este es el del index.php

<?php session_start();

include 'db.php';
include '../functions.php';

$emit = obtener_mensajes($conexion, $us);

comprobarSession();

?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" href="style.css">
    <script>
        function ajax(){
            var req = new XMLHttpRequest();
            req.onreadystatechange = function(){
                if (req.readyState == 4 && req.status == 200) {
                    document.getElementById('chat').innerHTML = req.responseText;
                }
            }

            var myId = document.getElementById('myId');
            var url = 'chat.php?id='+myId;

            req.open('POST', url, true);
            req.send();

        }

        setInterval(function(){
            ajax()
        }, 1000);
    </script>
</head>
<body onload="ajax();">

<div id="container">
    <div id="chat_box">
        <div id="chat"></div>
    </div>
    <form action="index.php" method="POST">
        <textarea name="message" placeholder="Enter message"></textarea>
        <input type="hidden" name="nombre" placeholder="Name" value="<?php echo $_SESSION['usuario']['nombre']?>">
        <input type="submit" name="submit" value="Send it">
        <?php foreach ($emit as $msg): ?>   
        <input type="hidden" id="myId" name="idReceiver" value="<?php echo $msg['idEmitter']; ?>">
        <input type="hidden" name="idEmitter" value="<?php echo $us ?>">
        <?php endforeach ?>
    </form>
<?php 

if (isset($_POST['submit'])) {
    $name = $_POST['nombre'];
    $message = $_POST['message'];
    $emitter = $_POST['idEmitter'];
    $receiver = $_POST['idReceiver'];

    $query = "INSERT INTO messages (nombre, message, idEmitter, idReceiver, seenUsuario) VALUES ('$name', '$message', '$emitter', '$receiver', '0')";

    $run = $conexion->query($query);
}

?>
</div>

</body>
</html>

al momento en que lo quiero imprimir me aparece todo en blanco introducir la descripción de la imagen aquí

Espero alguien me pueda ayudar

  • veo que en tu función ajax, solo estas enviando la petición pero en ningun momento estas imprimiendo la respuesta, aun necesitas ayuda con esto? – Andrés Jul 28 '17 at 13:09
  • muchas gracias por tu interes andres, ya lo solucione, aunque al momento de enviar el mensaje no se borra el mensaje dentro del textarea, el envio del mensaje lo hago por ajax – Cesar Gutierrez Davalos Jul 28 '17 at 15:46
  • En ese caso es sencillo, si sigues usando solo javascript, seria poner el un id al textarea y en tu success ajax agregar **document.getElementById("mensaje").value = "";** y si ya estas usando jquery, seria solo **$('#mensaje').val('');** y listo – Andrés Jul 28 '17 at 16:32
  • @Andrés muchas gracias! de casualidad me podrias ayudar con otro tema que tengo? https://es.stackoverflow.com/questions/90770/llenado-de-inputs-heredando-de-otro-input/90823?noredirect=1#comment167613_90823 – Cesar Gutierrez Davalos Jul 28 '17 at 16:35

0 Answers0