Bonjour à tous :) Voilà , j'ai monté le chat via ce tuto http://www.grafikart.fr/tutoriels/php/tchat-jquery-ajax-php-82 , ça comprends une connection par pseudo , mais vu que mon site est deja sous inscriptions , et que j'aimerais en faire une genre de shoutbox pour mon site , j'aimerais passer par le login du site , que une fois connecté , le membre clique sur la page shout dans la navigation et puisse tchater directement :)

Mon probleme etant que le dit tuto du raton ^^ est en mysql , vu que je ne le parle pas , deja pour le traduire en PDO , j'ai du mal , alors pour l'adapter correctement à mes besoins , c pas évident , si vous pourriez m'aider , ce serait cool ^^

Je finis , mes deux , trois codes , et je vous passe les codes dans la nuit pour que vous puissiez analyser la chose :P

Merci à tous :)

103 réponses


extrarox
Réponse acceptée

Dans ce cas tout en haut de ton php avant $d = array();

$rangcouleur = array(
    "admin" => "NOM DE LA CLASS STRONG ADMIN",
    "vip" => "NOM DE LA CLASS STRONG VIP",
    "user" => "NOM DE LA CLASS STRONG USER",
    "supmodo" => "NOM DE LA CLASS STRONG SUPMODO"
);

Ensuite à la place de :

$d"result"].= '<p><strong>'.$data"pseudo"].'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';

Tu mets :

$d"result"].= '<p><strong class="'.$rangcouleur].'">'.$data"pseudo"].'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';

Dans $rangcouleur], tu mets le rang que tu retrouves en lançant une requête pour trouver le pseudo ou en joignant deux tables.

A+

extrarox
Réponse acceptée

Ah bah dans ce cas mon tableau reprend son sens^^

$rangcouleur = array(
    "7" => "admin",
    "6" => "vip",
    "4" => "user",
    "1" => "supmodo"
);

Enfin je connais pas les numéros^^
Après tu fais la jointure et tu écris :

$d"result"].= '<p><span class="'.$rangcouleur$data'rang']].'">'.$data"pseudo"].'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';//$data'rang'] tu adaptes selon ton champs bien sur
extrarox
Réponse acceptée

Salut,

Pour tu n'as pas fais ce que je t'ai dis?

Change :

WHERE id>$lastid

Par :

WHERE Shoutbox.id>$lastid

Et s'il y a une erreur, tu fais pareil, tu m'envoies ce que ça affiche, plus ce que tu as tapé.

A++

extrarox
Réponse acceptée

Ok il faut que tout en haut du code tu ais :

$rangcouleur = array(
    "7" => "admin",
    "6" => "supmodo",
    "5" => "modo",
    "4" => "vip",
    "1" => "user",
);

Puis tu remplaces ton :

<strong>

Par :

<strong class="'.$rangcouleur$data"role_id"]].'">

En espérant que "role_id" soit vraiment une case du tableau.

extrarox
Réponse acceptée

C'est ça :

<strong class="$rangcouleur$data"role_id"]]">

En :

<strong class="<?php echo $rangcouleur$data"role_id"]]; ?>">
extrarox
Réponse acceptée

Essaye de changer :

$rangcouleur$data"role_id"]]

Par :

$rangcouleur$d$i]"role_id"]]
extrarox
Réponse acceptée

Non ça :

$sql = ("SELECT shoutconnected.pseudo , users.role_id FROM shoutconnected LEFT JOIN users.NiCK = shoutconnected.pseudo WHERE $now-shoutconnected.date<20");
extrarox
Réponse acceptée

Personnellement je ferai le str_replace. C'est plus facile, tu te prends moins la tête que de l'Ajax, et ça évite un deuxième aller-retour client-serveur, qui est inutile vu que tu étais déjà sur le serveur juste avant.

iTACHi
Auteur

Bon , voilà , j'ai cherché un peu par moi-même , mais en vain , voici le code qui marche pour deja afficher les messages :

<?php
ob_start();
session_start();
//Instance PDO
try {
      $PDO = new PDO('mysql:host='';dbname=''', '''', '''');
      $PDO->query("SET NAMES 'utf8'");
}catch(PDOException $e) {
   echo 'Connexion impossible';
}
//Class Auth
require "class.auth.php";
?>
<?php include("DoctypeShout.php"); ?>
<?php $Auth->allow('admin');?>
<?php include("cssshout.php"); ?>
<?php include("csspriv.php"); ?>
<div id="conteneur">
    <h1>Shoutbox <?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'user' ): ?><span class="user"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?></h1>
    <div id="tchat">
        <?php
        $sql = ("SELECT * FROM Shoutbox ORDER BY date DESC LIMIT 15");
        $req = $PDO->query($sql);
        $d=array();
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d]=$data;
        }
        for($i=count($d)-1;$i>=0;$i--){
        ?>
            <p><strong><?php echo $d$i]"pseudo"];?></strong> : <?php echo htmlentities($d$i]"message"]);?></p>
        <?php
        }
        ?>
    </div>
</div>
<div id="tchatform" style="position:fixed;left:16%;bottom:0;width:70.3%;">
        <form action="#" method="post">
            <div style="margin-right:110px;">
                <textarea name="message" style="width:100%;"></textarea>
            </div>
            <div style="position:absolute;top:21px; right:0;">
            <input type="submit" value="Shout">
            </div>
        </form>
</div>
</body>
</html>

Donc là je suis sur une table differente de celles de mes membres connectes sur mon site , si je passe sur la table de là où sont mes membres , ça affiche tt les pseudos , avec des : mais sans messages ! bref mieux vaut des screens pour voir la chose xD

Screen où ça fonctionne : http://www.play-files.net/images/1326929253-screen-shout-true.PNG

Voice le code si je change la table en la table qui contient mes membres :

<?php
ob_start();
session_start();
//Instance PDO
try {
      $PDO = new PDO('mysql:host='';dbname=''', '''', '''');
      $PDO->query("SET NAMES 'utf8'");
}catch(PDOException $e) {
   echo 'Connexion impossible';
}
//Class Auth
require "class.auth.php";
?>
<?php include("DoctypeShout.php"); ?>
<?php $Auth->allow('admin');?>
<?php include("cssshout.php"); ?>
<?php include("csspriv.php"); ?>
<div id="conteneur">
    <h1>Shoutbox <?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'user' ): ?><span class="user"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?></h1>
    <div id="tchat">
        <?php
        $sql = ("SELECT * FROM users ORDER BY date DESC LIMIT 15");
        $req = $PDO->query($sql);
        $d=array();
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d]=$data;
        }
        for($i=count($d)-1;$i>=0;$i--){
        ?>
            <p><strong><?php echo $d$i]"NiCK"];?></strong> : <?php echo htmlentities($d$i]"message"]);?></p>
        <?php
        }
        ?>
    </div>
</div>
<div id="tchatform" style="position:fixed;left:16%;bottom:0;width:70.3%;">
        <form action="#" method="post">
            <div style="margin-right:110px;">
                <textarea name="message" style="width:100%;"></textarea>
            </div>
            <div style="position:absolute;top:21px; right:0;">
            <input type="submit" value="Shout">
            </div>
        </form>
</div>
</body>
</html>

Comme vous le voyez , je n'ai juste changé le nom de la table et le tag qui appelle le pseudo donc NiCK au lieu de pseudo pour s'adapter à ma table , et ça écrit tout les noms des pseudos dans l'ordre de l'inscription avec des : sans message si il n'y a rien dans le champ message de la table !

Je n'ai pas encore fini le tuto du raton , mais j'estime , enfin trouve ça logique , que si j'arrive pas à afficher les messages correctement ici sans faire de systeme de login au pseudo et passer par le login de mon site , ça ne sert a rien de continuer , donc je bloque sur ça en c'moment :(

Si vous pourriez me donner des astuces , ou même me dire qu'il faut continuer afin d'essayer d'adapter le code pour voir ce que ça donne , ce serait sympas , pour le moment , je vais continuer sur le systeme du tuto , de toute façon , après , si vous avez la solution , ce n'est juste que quelques codes à retoucher :P

Merci à tous :)

iTACHi
Auteur

bon alors la shout fonctionne nikel , mais je n'ai pas réussi a faire en sorte de passer par le login du site :( Je vais pas linker tout les codes car il y a 4 pages xD ce sont tout les codes de la video publique , ils sont juste traduit en PDO et l'ajout de l'heure de la video premium , j'ai pas encore tout fini ^^

Mais sinon tout fonctionne hein , mais j'aimerais si jamais que quelqu'un me donne une astuce pour passer par mon login du site , ou appeller la fonction

<?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $data"pseudo"];?></span><?php endif; ?>

dans ce code là :

$d"result"].= '<p><strong>'.$data"pseudo"].'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];

car moi ça passe pas , malgré les points guillemets et double guillemets , j'ai essayé quelques combinaisons , rien n'y fait , en fait c la methode qui appel mes class , permitions , couleurs de pseudo etc

Merci à vous :P Le raton , si tu passes par là , je pense que tu es le seul qui puisse me repondre sans trop galérer xD vu que ce sont tes codes ^^

iTACHi
Auteur

Personne sait ? :( En gros , comment je peux faire pour faire apparaître les pseudos de mes membres avec une couleur bien distince ?

Bonjour,

Peut être associer des couleurs (codes) en fonction de l'id du membre?

Salut,

En gros tu as ton pseudo dans $Auth->user("NiCK"); ?

Si oui tu fais un truc du genre :

if($Auth->user("NiCK") == $d$i]"NiCK"]){
    echo "<strong class='couleurcestmoi'>".$d$i]'NiCK']."</strong>";
} else {
    echo "<strong>".$d$i]'NiCK']."</strong>";
}

A+

iTACHi
Auteur

Salut les gars :)

BEASTFlo , ouep j'en ai deja entendu parler sur deux trois forums , mais je sais pas comment m'y prendre ...

extrarox , bah si j'avais réussi a adapter le tuto du raton , en passant par le login de mon site , oui il serait dans $Auth->user('NiCK') mais il est dans

$d"result"].= '<p><strong>'.$data"pseudo"].'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';

ça c ce qui appelle le pseudo et le message sur la shout une fois tapé et inséré dans la bdd :) Je vais essayer avec le strong , j'te tiens au courant extrarox :)

Merci les gars ^^

iTACHi
Auteur

Non ça fonctionne pas extrarox :(

J'ai une table contenant mes membres , dans cette table , j'ai un champ rang , qui determine les permitions , et en fonctions de ce rang , j'ai déterminé un style en css , pour afficher leurs couleurs dans leurs comptes etc ...

ça ça fonctionne :)

Pour le chat Ajax , j'ai crée une deuxième table avec un deuxième login pour y acceder , dans cette table , j'ai 4 champs : id , pseudo , message , date :) Puis une deuxième table pour gérer l'heure des messages , ainsi que afficher si ils sont bien connectés sur le chat , cette table contient aussi 4 champs : id , pseudo , ip , date :)

J'ai entendu parler qu'il fallait créer une table couleur et rang et associer un rang a une couleur et lappeler dans une variable , mais je ne sais pas tres bien comment m'y prendre ...

Mon code qui affiche les messages de la bdd insérés est :

<?php
$d = array();
if(!isset($_SESSION"pseudo"]) || empty($_SESSION"pseudo"]) || !isset($_POST"action"])){
    $d"erreur"] = "Vous devez être logué pour utiliser la Shoutbox";
}else{

    extract($_POST);
    $pseudo = ($_SESSION"pseudo"]);
    /**
    *Actio : addMessage
    *Permet l'ajout d'un message
    **/
    if($_POST"action"] =="addMessage"){
        $message = ($_POST"message"]);
        $sql = $PDO->prepare("INSERT INTO Shoutbox (pseudo,message,date) VALUES ('$pseudo','$message',".time().")");
        $sql -> execute();
        $d"erreur"] = "ok";
    }

    /**
    *Actio : getMessages
    *Permet l'affichage des derniers messages
    **/
    if($_POST"action"] =="getMessages"){
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT * FROM Shoutbox WHERE id>$lastid ORDER BY date DESC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<p><strong>'.$data"pseudo"].'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

    /**
    *Action : getConnected
    *Permet l'affichage des derniers connectés
    **/
    if($_POST"action"]=="getConnected"){
        $now = time();
        $sql = ("SELECT pseudo FROM shoutconnected WHERE $now-date<60");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= $data"pseudo"].", ";
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

}

echo json_encode($d);
?>

ça c tout le code , qui gere le fait d'afficher les messages en Ajax a la sortie de la bdd , il n'y a nullement le code Javascript present ici , mais c bien ça qui fait appeler les messages sur le chat :)

Et comme ça je pense que le mieux serait l'idée de BEASTFlo mais je n'ai vraiment aucune idée de comment m'y prendre pour associer une couleur à l'id

iTACHi
Auteur

euh je sais pas , je comprends pas trop , mes fonctions sont celle-là :

function login($d) {
       global$PDO;
       $NiCK = $_POST'NiCK'];
       $PASSWORD = sha1($_POST'PASSWORD']);
       $d = array('NiCK'=>$NiCK, 'PASSWORD'=>$PASSWORD);
       $req = $PDO->prepare ('SELECT users.id,users.avatar,users.NiCK,users.MAiL,role.name,role.slug,role.level FROM `users` LEFT JOIN `role` ON users.role_id=role.id WHERE NiCK = :NiCK AND PASSWORD = :PASSWORD AND activer = 1');
       $req->execute($d);
       $data = $req->fetchAll();
       if(count($data)>0) {
            $_SESSION'Auth'] = $data[0];
            return true;
       }
       return false;
    }
    /**
    *Autorise un rang a acceder a une page , sinon redirige vers forbidden
    **/
    function allow($rang) {
       global$PDO;
       $req = $PDO->prepare ('SELECT slug,level FROM `role` ');
       $req->execute();
       $data = $req->fetchAll();
       $role = array();
       foreach($data as $d) {
           $role$d->slug] = $d->level;
       }
       if(!$this->user('slug')) {
           $this->forbidden();
       } else {
          if($role$rang] > $this->user('level')) {
               $this->forbidden();
        } else {
              return true;
        }
     }
 }
    /**
    * Recupere une info utilisateur
    ***/
    function user($field) {
       if(isset($_SESSION'Auth']->$field)) {
         return $_SESSION'Auth']->$field;
       } else {
         return false;
       }
    }

    /**
    *Redirige un utilisateur vers forbidden
    **/
    function forbidden() {
           header('Location:forbidden.php');
    }

     /**
     * Recupere les infos de tout les utilisateurs
     **/

}

Ensuite dans la tâble users , le rôle id , correspond au slug qui se trouve dans la table role , ensuite par rapport a ça , j'ai crée un style en css , genre .admin , .supmodo etc , qui correspond a une couleur , et pour afficher les couleurs aux membres sur leurs comptes , je procede de cette manière :

<?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>

J'ai essayé comme ça , mais en vain :

<?php
$rangcouleur = array(
    "admin" => "<span class='admin'>",
    "vip" => "<span class='vip'>",
    "user" => "<span class='user'>",
    "supmodo" => "<span class='supmodo'>"
);
$d = array();
if(!isset($_SESSION"pseudo"]) || empty($_SESSION"pseudo"]) || !isset($_POST"action"])){
    $d"erreur"] = "Vous devez être logué pour utiliser la Shoutbox";
}else{

    extract($_POST);
    $pseudo = ($_SESSION"pseudo"]);
    /**
    *Actio : addMessage
    *Permet l'ajout d'un message
    **/
    if($_POST"action"] =="addMessage"){
        $message = ($_POST"message"]);
        $sql = $PDO->prepare("INSERT INTO Shoutbox (pseudo,message,date) VALUES ('$pseudo','$message',".time().")");
        $sql -> execute();
        $d"erreur"] = "ok";
    }

    /**
    *Actio : getMessages
    *Permet l'affichage des derniers messages
    **/
    if($_POST"action"] =="getMessages"){
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id,Shoutbox.pseudo,Shoutbox.message,Shoutbox.date,role.name,role.slug,role.level FROM Shoutbox LEFT JOIN `role` ON users.role_id=role.id WHERE id>$lastid ORDER BY date DESC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<p><span class="'.$rangcouleur'admin'].'">'.$data"pseudo"].'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

à moins que je ne crée deux nouveau champs dans cette table , couleur et rang , et que je le relie à l'id , mais comment procéder ainsi ? enfin , je patoge , je sais pas trop :(

Ok donc ça, ça sert à rien car tu as appelé tes class de la même façon que les noms de rôles.

$rangcouleur = array(
    "admin" => "<span class='admin'>",
    "vip" => "<span class='vip'>",
    "user" => "<span class='user'>",
    "supmodo" => "<span class='supmodo'>"
);

Tu peux supprimer ça.

Ton select est faux aussi, tu as une table avec tes membres? Dedans il y a un champs rang?
Donc tu joins ta table membres et tu sélectionnes que ceux qui ont Shoutbox.pseudo == membres.pseudo
De là tu auras membres.rang dans ton tableau et du coup tu fais :

$d"result"].= '<p><span class="'.$data'rang'].'">'.$data"pseudo"].'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';//$data'rang'] tu adaptes selon ton champs bien sur

A+

iTACHi
Auteur

ah je vois ce que tu veux dire , non dans ma table , ce qui correspond a mon rang , ce qui fait les privileges , c le role_id , c en chiffre , cette table users est relié a une autre (role) qui elle comprends un level dirigé par le slug (le nom du level , par exemple level 7 = admin) :)

C pas évident à expliquer ... de cette manière , je gères les privilèges avec cette fonction :)

/**
    *Autorise un rang a acceder a une page , sinon redirige vers forbidden
    **/
    function allow($rang) {
       global$PDO;
       $req = $PDO->prepare ('SELECT slug,level FROM `role` ');
       $req->execute();
       $data = $req->fetchAll();
       $role = array();
       foreach($data as $d) {
           $role$d->slug] = $d->level;
       }
       if(!$this->user('slug')) {
           $this->forbidden();
       } else {
          if($role$rang] > $this->user('level')) {
               $this->forbidden();
        } else {
              return true;
        }
     }
 }

<?php $Auth->allow('admin');?>

ça , ça empêche les levels en dessous de admin d'acceder a cette page , mais aucune couleur dans les tables ne correspondent aux rangs ... c moi dans mes codes et mon style css qui est relié des couleurs aux membres , par cette variable

<?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>

etc ...
Mais je ne crois pas que en appelant le rang , ça lui attribue la couleur , tu vois c'que je veux dire ?

iTACHi
Auteur

je vais essayer , mais pour faire la jointure , je suis un peu largué encore ... j'ai pas trop pratiqué ce genre de manipulation , faut que je m'y prenne comment ?

iTACHi
Auteur

j'ai essayé comme ça

<?php $Auth->allow('admin');?>
<?php
$rangcouleur = array(
    "7" => "admin",
    "6" => "supmodo",
    "5" => "modo",
    "4" => "vip",
    "1" => "user",
);
$d = array();
if(!isset($_SESSION"pseudo"]) || empty($_SESSION"pseudo"]) || !isset($_POST"action"])){
    $d"erreur"] = "Vous devez être logué pour utiliser la Shoutbox";
}else{

    extract($_POST);
    $pseudo = ($_SESSION"pseudo"]);
    /**
    *Actio : addMessage
    *Permet l'ajout d'un message
    **/
    if($_POST"action"] =="addMessage"){
        $message = ($_POST"message"]);
        $sql = $PDO->prepare("INSERT INTO Shoutbox (pseudo,message,date) VALUES ('$pseudo','$message',".time().")");
        $sql -> execute();
        $d"erreur"] = "ok";
    }

    /**
    *Actio : getMessages
    *Permet l'affichage des derniers messages
    **/
    if($_POST"action"] =="getMessages"){
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, level.role, slug.role FROM Shoutbox LEFT JOIN role WHERE id>$lastid ORDER BY date DESC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<p><span class="'.$rangcouleur$data'7']].'">'.$data"pseudo"].'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

mais ça ne fonctionne pas , et ça fait planter mon code :(

Alors au vue de tout le topic je dirai :

SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.rang
FROM Shoutbox
LEFT JOIN users ON users.pseudo = shoutbox.pseudo

Puis avec ce que je t'ai dis en haut c'est bon. Et $data'7'] ça existe pas donc ça risque pas d'aller.

iTACHi
Auteur
$sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id FROM Shoutbox LEFT JOIN users ON users.NiCK=Shoutbox.pseudo WHERE id>$lastid ORDER BY date DESC");
        $req = $PDO->query($sql);

nope , ça marche pas , mais en plus je remarque depuis t'a l'heure , que la jointure , fait buguer mon timer du loader de l'Ajax ... Je suis obligé d'actualiser pour que le mesage s'affiche au lieu qu'il s'affiche auto ^^

Ca s'est un détail pour le moment, Ajax devrait même pas encore entrer en jeu.

Bon tu dis que ça marche pas mais il manque des détails^^

C'est quoi qui marche pas? La requête? Ce que ça sort? As-tu essayé la requête sur phpmyadmin?

iTACHi
Auteur

non , je vais là tester ^^ j'te dit :)

iTACHi
Auteur

elle fonctionne :) du moins sans le where derrière ... et je pense que c ça qui fait buguer Ajax, mais ouais , pour le moment c pas ça qui importe ;)

cette requête :

SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox
LEFT JOIN users ON users.NiCK = Shoutbox.pseudo

me donne ça : 189 iTACHi ^^ 1327060740 1 donc ça marche , dans l'ordre , id , pseudo , message , date et le role (1) :)

Ok essaye Shoutbox.id, il arrive peut-être pas à savoir lequel il doit prendre, après je ne vois pas le but du Where?

iTACHi
Auteur

non , avec Shoutbox.id , ça plante complet ...

Le WHERE , lui il dit qu'il faut qu'il recupere les messages en fonction de la variable lastid , c pour les récupérer dans l'ordre :)

iTACHi
Auteur

la seule chose qu'il faudrait que je fasse , c arriver de caller un if dans le $d"result"].= '<p><strong>'.($data"pseudo"]).'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
$d"lastid"] = $data"id"]; et ce serait bon , mais il veut pas :( :lol:

C'est pas plutot <=

iTACHi
Auteur

nope , c pour dire inferieur a , puis ça sort du tuto du raton ^^ :P

Bah tu découpes ta chaine et tu mets ton if

iTACHi
Auteur

j'ai essayé ça fait planter ... tu le mettrais où toi ce if ?

Bah ça dépend je pige plus rien lol

Euh, plutôt qu'une phrase explique avec un exemple

iTACHi
Auteur

ça , apr exemple , c une fonction qui est relié au JS , et qui permet de recevoir les messages qui ont été précédement inséré dans la bdd , le tout en Ajax ^^

if($_POST"action"] =="getMessages"){
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT * FROM Shoutbox WHERE id>$lastid ORDER BY date DESC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){

            $d"result"].= '<p><span class="admin">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

et ça , ça marche par exemple , quand j'ecris , j'ecris bien en rouge , le truc ce serait de lui dire , si le slug du pseudo est admin alors tu balances le message , si le slug du pseudo est supmodo alors tu balances le message avec le span class supmodo

iTACHi
Auteur

mais par exemple , dés que je met un if dans cette fonction getMessage , l'Ajax déconne , et il se passe un truc pas cool , comme le systeme de conecté sur la shout qui s'barre , e loader qui charge plus , besoin de ractualiser etc , puis bah dans firebug , le pire c qu'il me dit que fetch est non objet quand je fait une jointure alors que dans phpmyadmin elle fonctionne quoi lol

Donc le truc ce serait de jouer ave cette class Auth , qui dirige tout mon site , mais là , je n'y arrive pas à insérer ce if dans cette chaîne pour que le pseudo s'ecrive en couleur ^^

Ok,

Remets la requête SQL comme je t'ai dis, et juste en dessous de :

$req = $PDO->query($sql);

Mets :

print_r($PDO->errorInfo());

Et dis-moi l'erreur que ça provoque, stp.

A+

iTACHi
Auteur

voilà , c'que ça me met :

Array
(
[0] => 23000
[1] => 1052
[2] => Column 'id' in where clause is ambiguous
)
<br />
<b>Fatal error</b>: Call to a member function fetch() on a non-object in <b>/homez.50/autopsiee/www/tchatAjax.php</b> on line <b>52</b><br />

C'est bien ce que je disais hier, "id" est ambigue, il faut que tu mets Shoutbox.id à la place, s'il y a toujours une erreur, peux-tu l'afficher encore + la façon dont tu as écris la requete?

iTACHi
Auteur

oui , je vais tester , et te montrer ça :) Pour le moment , j'ai tellement touché aux codes que l'ajax tourne plus tres bien , je ne sais pas pk , j'analyse ça , puis je test , et revient te le dire :)

iTACHi
Auteur

bon je pense que c bon , l'Ajax est revenu à son etat normal , j'avais une faute de syntax depuis le debut qui me faisait buguer l'arriver des messages ^^

Je passe par mon login du site , et je test ça extrarox et j'viens te le dire ^^

iTACHi
Auteur

Alors , avec cette requête :

if($_POST"action"] =="getMessages"){
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.id WHERE id>$lastid ORDER BY date ASC");
        $req = $PDO->query($sql);
        print_r($PDO->errorInfo());
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){

            $d"result"].= '<p><strong>'.($data"pseudo"]).'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

ça me met ça et les messages ne s'affichent pas : Array
(
[0] => 23000
[1] => 1052
[2] => Column 'id' in where clause is ambiguous
)
<br />
<b>Fatal error</b>: Call to a member function fetch() on a non-object in <b>/homez.50/autopsiee/www/tchatAjax.php</b> on line <b>53</b><br />

N'oublions pas que cette requête se situe dans la page tchatAjax.php qui est relié à la page tchat.js

Edit : normal que les messages s'affichent pas , c le print_r qui fait buguer ça , c pas grave , n'y prête pas attention :)

iTACHi
Auteur

ah oki , j'avais pas compris ce que tu voulais que je change ^^

iTACHi
Auteur
if($_POST"action"] =="getMessages"){
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo WHERE Shoutbox.id>$lastid ORDER BY date ASC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){

            $d"result"].= '<p><strong>'.($data"pseudo"]).'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

ça fonctionne et pas d'erreur :D

Ensuite tu veux que je fasse quoi pour appeller les couleurs ? :)

iTACHi
Auteur

Oki j'fais ça ^^

Oui role_id correspond a des chiffres dans la table users , qui ces chiffres sont relié a la table role , et dans cette table , ça correspond a des rangs , et donc les privileges , mais il y a pas de couleurs dans ma table ...

Faudrait pas que je crée un champ couleur ?

Non pas besoin avec ça.

Que te retourne $data"role_id"]?

iTACHi
Auteur

ça fonctionne , mais il n'y a pas le pseudo d'ecrit ... en revanche , il y a l'heure , la date et le message dans la couleur respective ^^

iTACHi
Auteur

c bon , ça fonctionne

if($_POST"action"] =="getMessages"){
    $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo WHERE Shoutbox.id>$lastid ORDER BY date ASC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){

            $d"result"].= '<p><strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

:)

iTACHi
Auteur

En revanche , pour faire apparaître les pseudos connects sur la shout , j'utilise ce systeme

if($_POST"action"]=="getConnected"){
        $now = time();
        $sql = ("SELECT pseudo FROM shoutconnected WHERE $now-date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= $data"pseudo"].", ";
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

J'ai essayé le même principe , mais les pseudos ne s'affichent plus , si tu as une idée ? :)

iTACHi
Auteur

Pareil pour ici

<div id="tchat">
        <?php
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo ORDER BY date DESC LIMIT 4");
        $req = $PDO->query($sql);
        $d=array();
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d]=$data;
        }
        for($i=count($d)-1;$i>=0;$i--){
        ?>
            <p><strong class=($rangcouleur$data"role_id"]]);?><?php echo $d$i]"pseudo"];?></strong> (<?php echo date("d/m/Y H:i:s",$d$i]"date"]);?>) : <?php echo htmlentities(utf8_decode($d$i]"message"]));?></p>
        <?php
        }
        ?>
    </div>

Alors ça fait pas buguer , mais les pseudos restent dans la couleur standart

C'est ce qui affiche les derniers messages quand tu actualises ou quand tu arrives sur la shout

<p><strong class=($rangcouleur$data"role_id"]]);?>

Alors là il y a un mélange de tout, tu as du PHP dans de l'HTML mais il n'y a pas d'ouverture de <?php pas d'echo...
Fais attention à ce que tu fais^^ De plus, essaye de réfléchir un tout petit peu avant de poster. C'est pas méchant, hein^^

Tu utilises un IDE? ou Editeur de texte avec coloration syntaxique? Ca te permettrait de voir ces grosses erreurs.

iTACHi
Auteur

Oui , bah j'ai posté un test xD en fait ce n'est deja plus comme ça :) Mais tout ce que j'ai essayé , ça ne marche pas , mais ça ne fait pas buguer :)

Oui j'use Sublime Text 2 :) J'ai commencé par les ouvertures <?php et avec les echo , mais ça n'a pas fonctionné , alors j'ai testé de cette manière , puis bah j't'ai posté ça xD

Sinon côté colorisation , c'etait bien coloré et tout , les <?php etait bien ouvert et fermés aux bon endroit , mais la couleur des pseudos restaient normal

iTACHi
Auteur
<div id="tchat">
        <?php
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo ORDER BY date DESC LIMIT 4");
        $req = $PDO->query($sql);
        $d=array();
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d]=$data;
        }
        for($i=count($d)-1;$i>=0;$i--){
        ?>
            <p><strong class="$rangcouleur$data"role_id"]]"><?php echo $d$i]"pseudo"];?></strong> (<?php echo date("d/m/Y H:i:s",$d$i]"date"]);?>) : <?php echo htmlentities(utf8_decode($d$i]"message"]));?></p>
        <?php
        }
        ?>
    </div>

ça , ça m'paraissait logique , vu que le span class ou strong , je pense que c pareil , ne doit pas être dans du php , mais fonctionne pas

J'ai aussi changé les strongs en span , ça enleve l'effet gras du strong en fait , normal tu m'diras ^^

Mais vu que c une variable le $rang , je ne sais pas vraiment comment mélanger le HTML et le PHP là

J'ai une petite idée , j'vais voir

iTACHi
Auteur
<div id="tchat">
        <?php
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo ORDER BY date DESC LIMIT 4");
        $req = $PDO->query($sql);
        $d=array();
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d]=$data;
        }
        for($i=count($d)-1;$i>=0;$i--){
        ?>
            <p><?php echo '<strong class="'.$rangcouleur$data"role_id"]].'">'.$d$i]"pseudo"].'</strong>';?> (<?php echo date("d/m/Y H:i:s",$d$i]"date"]);?>) : <?php echo htmlentities(utf8_decode($d$i]"message"]));?></p>
        <?php
        }
        ?>
    </div>

Là , ça m'paraissait logique , mais non ... Là c pas le même systeme de ponctuation que dans la page tchatAjax aussi , j'arrive pas à faire le changement , la variable qui sert de classe m'embête en fait , sinon je sais comment le mélanger , mais là j'avoue que la variable m'ennuie

iTACHi
Auteur

ah OO j'avais testé comme ça , mais tu vas rire , j'avais oublié , le deuxième > après les guillemets de la fin derrière la fermeture ?> et les double guillemets :(

iTACHi
Auteur

Bon bah j'ai essayé plusieurs trucs encore une fois , mais le pseudo ne s'affiche pas en couleur , il reste en strong

<p><strong class="<?php echo $rangcouleur$data"role_id"]]; ?>"><?php echo $d$i]"pseudo"];?></strong> (<?php echo date("d/m/Y H:i:s",$d$i]"date"]);?>) : <?php echo htmlentities(utf8_decode($d$i]"message"]));?></p>
iTACHi
Auteur

là sur le code , la colorisation du php de la variable couleur n'est pas la même que celle du $d$i]"pseudo] , pourtant sur mon editeur , c la même , humm

Es-tu sûr que $data"role_id"] renvoie ce qu'il faut?

iTACHi
Auteur

normalement oui , car sur la partie de t'a l'heure , ça fonctionne :)

Concernant la requête , comme tu as pu là voir , c'est un peu la même non ? appar le Shoutbox.id , mais innaproprié ici

$sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo ORDER BY date DESC LIMIT 4");

Donc je pense que oui ... Qu'est-ce que tu en penses ?

iTACHi
Auteur

Exact , c'etait ça , je sais pas pk j'y ai pas pensé , alors que là , $data , c $d$i] ... :(

Bah ecoute Merci à toi extrarox , tu gères , tu m'as vraiment bcp aidé là :D

iTACHi
Auteur

Et sur cette partie là , c pareil , je bloque , je pense que la ponctuation est bonne , et là c bien $data , donc je sais pas si c possible ... c la partie qui affiche les users présent sur la shout

/**
    *Action : getConnected
    *Permet l'affichage des derniers connectés
    **/
    if($_POST"action"]=="getConnected"){
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $now = time();
        $sql = ("SELECT shoutconnected.pseudo, users.role_id FROM shoutconnected LEFT JOIN users ON users.NiCK = shoutconnected.pseudo WHERE $now-date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<strong class="'.$rangcouleur$data"role_id"]].'">'.$data"pseudo"].'</strong>'.", ";
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

Il y a une erreur ou c'est juste que ça change pas de couleur?

iTACHi
Auteur

erreur , les pseudos ne s'affichent plus du tout ... voici l'erreur dans firebug : <br />
<b>Fatal error</b>: Call to a member function fetch() on a non-object in <b>/homez.50/autopsiee/www/tchatAjax.php</b> on line <b>84</b><br />

Dans :

$d"result"].= '<strong class="'.$rangcouleur$data"role_id"]].'">'.$data"pseudo"].'</strong>'.", ";

Il y a un petit problème à la fin, tu as --> .", " <-- Ca c'est pas bon.

iTACHi
Auteur

De cette façon :

if($_POST"action"]=="getConnected"){
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $now = time();
        $sql = ("SELECT pseudo FROM shoutconnected WHERE $now-date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<p><strong class="'.$rangcouleur$data"role_id"]].'">'.$data"pseudo"].'</strong>'.", ";
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

plus d'erreur , mais les pseudos s'affichent a la vertical au lieu de horizontal , et pas de couleur , voilà ce que me donne firebub : {"result":"Users Connect\u00e9s : <p><strong class=\"\">Murey<\/strong>, <p><strong class=\"\">iTACHi<\/strong>, <p><strong class=\"\">Kaley<\/strong>,","erreur":"ok"}

En gros il reconnaît quand même le strong ... là , je comprends pas pk les pseudos s'affichent a la horizontal lool

iTACHi
Auteur

ça , c la virgule en fait , qui s'incrémente automatiquement par l'Ajax pour séparer les pseudos qui se connectent et qui s'en vont , le code original sans le strong est ça :

$d"result"].= $data"pseudo"].", ";
        }
        $d"result"] = substr($d"result"],0,-1);

la suite , c pour empêcher que la virgule ne se répète pour rien

Il s'écrive en horizontal parce que tu ne ferme jamais ta balise <p>?

Ok et si tu fais :

$sql = ("SELECT shoutconnected.pseudo, users.role_id FROM shoutconnected LEFT JOIN users ON users.NiCK = shoutconnected.pseudo WHERE $now-date<20");
        $req = $PDO->query($sql);
        echo $PDO->errorInfo();
iTACHi
Auteur

Array<br />
<b>Fatal error</b>: Call to a member function fetch() on a non-object in <b>/homez.50/autopsiee/www/tchatAjax.php</b> on line <b>85</b><br />

iTACHi
Auteur

il aime pas la requête on dirait .. bizarre

Sinon pour le </p> je sais pas , vu que c de l'incrementation auto par ajax ...

Test ta requête sur phpmyadmin

iTACHi
Auteur

elle fonctionne , ça me donne tout les pseudos qui se sont connectés avec le rang à côté :)

Je suis en train de me dire dans ta requête, tu as "date", il existe dans la table users?
Au pire tu risque rien essaye de remplacer par shoutconnected.date?

iTACHi
Auteur

non justement , la date n'est pas inséré dans cette table users :) Oui je test ^^

C ça que tu voulais que je fasse ?

$sql = ("SELECT shoutconnected.pseudo , users.role_id FROM shoutconnected LEFT JOIN users.NiCK = shoutconnected.date WHERE $now-date<20");

Si oui , c pareil , même erreur :(

iTACHi
Auteur

Bon sinon je t'explique un peu le truc , je suis passé par le login de mon site , le tuto du raton voulait qu'on rentre un pseudo et que ce pseudo n'etait valable que 60 seconde une fois quitté le chat , autant dire que ça ne m'allait pas , vu que j'en fais une shout pour mon site et qu'il y a des grades , les gens auraient tres bien pu prendre mon pseudo qui est de grade admin ou celui d'un autre admin etc ... Je l'ai donc fait passer par mon login , et j'ai géré un code qui fait que du coup , sur la shout , on voit les gens qui se connectent sur le site par le form login , pendant 20 secondes seulement , qu'ils restent sur le site ou non ;)

Ensuite si ils viennent sur la shout , on voit le pseudo deux fois , mais juste pendant ce laps de temps , ensuite le pseudo du login disparaît , et le pseudo de la shout reste tant que l'user y est present :) Ce qui est vraiment nikel , car du coup , tu peux aussi voir sur la shout , les gens qui se connectent ^^ J'y ai passé pas mal de temps à ça d'ailleurs xD mais j'kiffe le systeme :) En plus vu que ça prends direct par le login , cela devrait gérer le rang de l'user directement vu que ça passe par son vrai pseudo

iTACHi
Auteur

ah , je vais tester ^^

Edit : c pareil , fetch() non objet ...

iTACHi
Auteur

c bizarre , je comprends pas pourquoi

Deux solutions soit PDO est mal instancier, soit il y a une erreur avec la requête

iTACHi
Auteur

non j'pense pas que ça vienne de PDO , vu que ça a marché sur la requête précédente , j'ai test un span class sur le $data"pseudo"].", "; , et ça ne fonctionne pas , alors que le span class marchait sur la requête précédente , je pense que ce bout de code ne veut pas de la variable couleur ... ça ne s'adapte pas , car quand ça marche , et que ça bug pas , la couleur ne s'affiche pas ... où bien alors la requête comme tu dis , du moins la fin à partir du WHERE car tout le debut de la requête avant le WHERE fonctionne sous phpmyadmin

Ah! c'est le where qui merde...
Et "date" dans ta base c'est bien un timestamp?

iTACHi
Auteur

ouep , date , entier de 11 , bcp de choses dans la fonction getConnected qui gere les connectés en temps réel sur la shout tourne autour du timestamp , dont ça justement

Salut, pas suivi toute ton histoire mais date est un nom réservé sql, renomme ton champs date en created ou ce que tu veux sauf date, modifies dans ton code ce qu'il faut et test

iTACHi
Auteur

bah bizarre , tout marche tres bien avec le champ date :) Puis dans le tuto de graphikart , il a nommé son champ date , et fait tourner son Ajax avec , donc je pense pas que ça vienne de ça

iTACHi
Auteur

voici la function qui fonctionne nikel , la seule chose c de relier de deux tables , et de passes une variable qui gere le rang dans $data"pseudo"] ...

/**
    *Action : getConnected
    *Permet l'affichage des derniers connectés
    **/
    if($_POST"action"]=="getConnected"){
        $now = time();
        $sql = ("SELECT pseudo FROM shoutconnected WHERE $now-date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= $data"pseudo"].", ";
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

Et je persiste a dire que toutes les choses qui fonctionnent sous "date" marchenent nikel

Je te disais ça car j'avais déjà eu ce soucis et le fait d'avoir renommé mon champs a fonctionné, après je vois pas quoi d'autre qui pourrait clocher dans ton code

Oui c'est bizarre que ça déconne dès que tu fais le Left join, alors que ça change presque rien...

iTACHi
Auteur

ok , j'ai trouvé :)

La requête qui fonctionne est celle-là , ça provenait bien de date , mais pas dans ce sens là elscorto , la citation du champ date n'en etait pas en cause ^^

extrarox , tu n'en etais pas loin la dernière fois quand tu m'as cité une requête ^^

edit : extrarox , en fait en relisant les messages précédent , tu avais raison , tu m'l'avais dit , mais j'ai mal lu ta ligne de code , donc je l'avais mal écrit ...

$sql = ("SELECT shoutconnected.id, shoutconnected.pseudo, shoutconnected.ip, shoutconnected.date, users.role_id FROM shoutconnected LEFT JOIN users ON users.NiCK = shoutconnected.pseudo WHERE $now-shoutconnected.date<20");

Celle là fonctionne :)

Reste à voir si mes pseudos vont s'afficher en couleur :P

iTACHi
Auteur

Donc , j'ai une bonne nouvelle , mais une mauvaise , ça fonctionne bien , cependant je n'arrive pas à caller la virgule qui sépare les pseudos dans la ligne , exemple

$d"result"].= $data"pseudo"].", ";

Vous voyez au fond , ce .", "; c la virgule et l'espace qui s'incrémente automatiquement après le pseudo pour les délmiters

Comme ça , ça marche , les pseudos , s'affichent correctement et dans leurs couleurs respective , autant dire que PDO est correctement instantié et que la requête est bonne autant que la variable qui gere les rangs des pseudos :

if($_POST"action"]=="getConnected"){
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $now = time();
        $sql = ("SELECT shoutconnected.id, shoutconnected.pseudo, shoutconnected.ip, shoutconnected.date, users.role_id FROM shoutconnected LEFT JOIN users ON users.NiCK = shoutconnected.pseudo WHERE $now-shoutconnected.date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</strong>';
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

Mais voilà , la virgule ne veut pas rentrer dans cette phrase :(

$d"result"].= '<strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</strong>';
iTACHi
Auteur

Ah autant pour moi les gars , c bon j'ai trouvé :) de cette manière , je l'affiche avec des sauts à la ligne , donc les pseudos les uns en dessous des autres

/**
    *Action : getConnected
    *Permet l'affichage des derniers connectés
    **/
    if($_POST"action"]=="getConnected"){
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $now = time();
        $sql = ("SELECT shoutconnected.id, shoutconnected.pseudo, shoutconnected.ip, shoutconnected.date, users.role_id FROM shoutconnected LEFT JOIN users ON users.NiCK = shoutconnected.pseudo WHERE $now-shoutconnected.date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]."<br><br> ").'</strong>';
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }

Ou de cette manière avec notre celebre virgule et notre celebre espace xD

/**
    *Action : getConnected
    *Permet l'affichage des derniers connectés
    **/
    if($_POST"action"]=="getConnected"){
        $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $now = time();
        $sql = ("SELECT shoutconnected.id, shoutconnected.pseudo, shoutconnected.ip, shoutconnected.date, users.role_id FROM shoutconnected LEFT JOIN users ON users.NiCK = shoutconnected.pseudo WHERE $now-shoutconnected.date<20");
        $req = $PDO->query($sql);
        $d"result"] = "Users Connectés : ";
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
            $d"result"].= '<strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"].", ").'</strong>';
        }
        $d"result"] = substr($d"result"],0,-1);
        $sql = ("UPDATE shoutconnected SET date = $now WHERE id={$_SESSION"idTchat"]}");
        $req = $PDO->query($sql);
        $d"erreur"] = "ok";
    }
iTACHi
Auteur

Bon , extrarox , comme d'hab , sujet résolu , j'te validerais bien les verts :P Mais si tu pourrais encore m'eclairer au niveau de pouvoir rajouter des smileys , ça m'aiderait bien :D Car j'ai regardé un peu à droite et à gauche , et j'vois que des smileys rajouté en php , et quand je regarde le topic sur notre forum ICI le mec dit qu'il a réussi , mais il explique pas tres bien , et dit être passé par l'Ajax ...

Je sais qu'il faut qu'il faut que je crée un dossier image/smiley où je met mes émoticônes dedans , et que j'utilise la function str_replace pour remplacer par exemple :) par l'image , mais passer par l'Ajax ... je sais pas vraiment , si tu as une idée ? ^^

iTACHi
Auteur

Un exemple

function smileys($texte)
{
$in=array(
           "xD", // mort de rire
           ":(" , // déçu
           ":)", //sourire
           ":d", // mort de rire
           ":p", // passe la langue
           );
$out=array(
           '<img src="mort_de_rire.gif" alt="" />',
           '<img src="pas_content.gif" alt="" />',
           '<img src="content.gif" alt="" />',
           '<img src="heureux.gif" alt="" />',
           '<img src="tire_la_langue.gif" alt="" />',
           );
           return str_replace($in,$out,$texte);
}
echo smileys($texte);

Mais j'le mets où ce code , je l'ai placé dans tchatAjax.php , mais ça fonctionne pas :(

iTACHi
Auteur

avec ce code dans tchatAjax.php

function smileys($message)
{
$in=array(
           "xD", // mort de rire
           ":(" , // déçu
           ":)", //sourire
           ":d", // mort de rire
           ":p", // passe la langue
           );
$out=array(
           '<img src="mort_de_rire.gif" alt="" />',
           '<img src="pas_content.gif" alt="" />',
           '<img src="content.gif" alt="" />',
           '<img src="heureux.gif" alt="" />',
           '<img src="tire_la_langue.gif" alt="" />',
           );
           return str_replace($in,$out,$message);
}
echo smileys($message);

firebug me donne ça : <img src="tire_la_langue.gif" alt="" />{"erreur":"ok"} mais ça n'envoie pas le message , le loader patine dans le vide ... tu aurais une idée ? :)

Tu peux pas mettre dans ton Ajax s'il retourne du json ça va foiré.
Il faut que tu le mets dans ton texte directement.

iTACHi
Auteur

Oui c c'que j'pensais mais dans la partie shout j'ai testé aussi , mais ça ne fait rien ... Dans le input ?

Là c'est cette ligne :

$d"result"].= '<p><strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';

Tu as $data"message"], c'est lui que tu changes.

iTACHi
Auteur

oui , bin justement , je l'ai mit dans cette partie de mes codes , dans la pages tchatAjax.php , ce n'est pas du js , mais c cette page qui fait transitions avec la page js !

de cette manière , j'ai une erreur de ponctuation

function smileys($data"message"]){
$in=array(
           "xD", // mort de rire
           ":(" , // déçu
           ":)", //sourire
           ":d", // mort de rire
           ":p", // passe la langue
           );

$out=array(
           '<img src="mort_de_rire.gif" alt="" />',
           '<img src="pas_content.gif" alt="" />',
           '<img src="content.gif" alt="" />',
           '<img src="heureux.gif" alt="" />',
           '<img src="tire_la_langue.gif" alt="" />',
           );

           return str_replace($in,$out,$data"message"]);
}

echo smileys ($data"message"]);

a la première ligne , il n'en veut pas

Si je met le ($message) firebug me dit que c bon , mais le loader charge dans le vide :( donc je sais pas quoi

En faisant comme ça tu as une erreur?

$d"result"].= '<p><strong class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</strong> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode(smileys($data"message"]))).'</p>';
iTACHi
Auteur

oui le probleme c la declaration de la fonction , il veut pas de $data"message"] , il me dit erreur de ponctuation

function smileys $data"message"] {

$in=array(
           "xD", // mort de rire
           ":(" , // déçu
           ":)", //sourire
           ":d", // mort de rire
           ":p", // passe la langue
           );

$out=array(
           '<img src="mort_de_rire.gif" alt="" />',
           '<img src="pas_content.gif" alt="" />',
           '<img src="content.gif" alt="" />',
           '<img src="heureux.gif" alt="" />',
           '<img src="tire_la_langue.gif" alt="" />',
           );

           return str_replace($in,$out,$data"message"]);
}

$d"result"].= '<p><span class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode(smiley($data"message"]))).'</p>';
iTACHi
Auteur

j'ai cette erreur aussi en faisant comme ça :

if($_POST"action"] =="getMessages"){
    $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo WHERE Shoutbox.id>$lastid ORDER BY date ASC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){

            $d"result"].= '<p><span class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($message($data"message"]))).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }
    function smileys ($message) {

$in=array(
           "xD", // mort de rire
           ":(" , // déçu
           ":)", //sourire
           ":d", // mort de rire
           ":p", // passe la langue
           );

$out=array(
           '<img src="mort_de_rire.gif" alt="" />',
           '<img src="pas_content.gif" alt="" />',
           '<img src="content.gif" alt="" />',
           '<img src="heureux.gif" alt="" />',
           '<img src="tire_la_langue.gif" alt="" />',
           );

           return str_replace($in,$out,$message);
    }

Enfin , je sais pas , j'ai testé plusieurs trucs , mais bon , je sais que ça vient de la declaration de la fonction mais après ...

iTACHi
Auteur

et en faisant comme ça

if($_POST"action"] =="getMessages"){
    $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo WHERE Shoutbox.id>$lastid ORDER BY date ASC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){
$data"message"] = str_replace( ":)", '<img src="content.gif" alt=":)">', $data"message"] );
$data"message"] = str_replace( ":(", '<img src="pas_content.gif" alt=":(">', $data"message"] );
$data"message"] = str_replace( ":p", '<img src="tire_la_langue.gif" alt=":P">', $data"message"] );
$data"message"] = str_replace( ":d", '<img src="heureux.gif" alt=":D">', $data"message"] );

            $d"result"].= '<p><span class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.htmlentities(utf8_decode($data"message"])).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

ça m'affiche pas l'image , mais ça m'affiche le nom de l'image du smiley ...

iTACHi
Auteur

J'ai trouvé , de cette façon , ça fonctionne :)

$d"result"].= '<p><span class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.str_replace( ":)", '<img src="images/content.gif" alt=":)">', htmlentities(utf8_decode($data"message"]))).'</p>';

sans aucune fonction , ni rien ^^

iTACHi
Auteur

En revanche , je ne vois pas comment en faire plusieurs , car sinon ça double le message , et tt les messages , pas seulement le smiley ...

iTACHi
Auteur

Bon voilà , le code pour faire la chaîne de str_replace :)

if($_POST"action"] =="getMessages"){
    $rangcouleur = array(
    "1" => "admin",
    "2" => "supmodo",
    "3" => "modo",
    "4" => "vip",
    "7" => "user",
);
        $lastid = floor($lastid);
        $message = ($_POST"message"]);
        $sql = ("SELECT Shoutbox.id, Shoutbox.pseudo, Shoutbox.message, Shoutbox.date, users.role_id
FROM Shoutbox LEFT JOIN users ON users.NiCK = Shoutbox.pseudo WHERE Shoutbox.id>$lastid ORDER BY date ASC");
        $req = $PDO->query($sql);
        $d"result"] = "";
        $d"lastid"] = $lastid;
        while ($data = $req->fetch(PDO::FETCH_ASSOC)){

            $d"result"].= '<p><span class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.str_replace( ":)", '<img src="images/content.gif" alt=":)">',''.str_replace( ":(", '<img src="images/pas_content.gif" alt=":(">',''.str_replace( ":p", '<img src="images/tire_la_langue.gif" alt=":p">',''.str_replace( ":d", '<img src="images/heureux.gif" alt=":d">',''.str_replace( "xD", '<img src="images/mort_de_rire.gif" alt="xD">', htmlentities(utf8_decode($data"message"]))))))).'</p>';
            $d"lastid"] = $data"id"];
        }
        $d"erreur"]="ok";   
    }

$d"result"].= '<p><span class="'.$rangcouleur$data"role_id"]].'">'.($data"pseudo"]).'</span> ('.date("d/m/Y H:i:s",$data"date"]).') : '.str_replace( ":)", '<img src="images/content.gif" alt=":)">',''.str_replace( ":(", '<img src="images/pas_content.gif" alt=":(">',''.str_replace( ":p", '<img src="images/tire_la_langue.gif" alt=":p">',''.str_replace( ":d", '<img src="images/heureux.gif" alt=":d">',''.str_replace( "xD", '<img src="images/mort_de_rire.gif" alt="xD">', htmlentities(utf8_decode($data"message"]))))))).'</p>';

cette ligne là , en prenant ici et en le repetant , on fait la chaîne de autant de smiley qu'on veut , bien sûr ne pas oublier de multiplier la fermeture de parenthèse à la fin :)

''.str_replace( ":(", '<img src="images/pas_content.gif" alt=":(">',

Un peu bourrin mais si ça marche tant mieux.

iTACHi
Auteur

Ouep ça marche même plutôt bien :D

Bon sujet clos , j'ai enfin terminé ma shout ^^

J'te valide les verts , merci extrarox , tu m'as bien aidé pour tout ça :D