GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: cristab le 15 Juillet 2011, 18:52:29
-
Bonjour je suis entrain de me familiariser avec le SQL de SAMP :blink
voila je commence donc par verifier les fonction et j'integre donc un systeme de chat pour voir comment sa reagit
voici le code
public OnPlayerText(playerid, text[])
{
new escape[128];
mysql_real_escape_string(text,escape);
new str[250];
format(str,250,"INSERT INTO `chat` (text) VALUES ('%s')",escape);
mysql_query(str);
return 1;
}
je sais que le format n'etait pas obligatoire mais c'est pas un code fini ^^
et voila mon bug -_-
(http://nsa27.casimages.com/img/2011/07/15/110715065741336682.png)
en gros sa affiche ceci
(http://nsa27.casimages.com/img/2011/07/15/110715065840798581.png)
en gros ce n'est pas dans l'ordre
Pour qu'elle raison ce n'est pas enregistrer dans l'ordre SVP ??
-
elle es structurée comment ta base ? le problème vien pas de ton script pawn, mais de ton code PHP ou de ta base
-
Peut-être devrai tu réceptionner les données dans l'ordre avant, à l'époque où je touchais le mysql je me souviens qu'il y a un code de ce genre ORDER BY DESC et tu fais ça selon l'id du message ;)
-
ouaip enfait j'ai mal lu son screen j'ai cru que les ID ne correspondait pas à la date.
Donc oui tu as raison Ssk, il doit mettre dans sa requette pour récupérer les données sur ton site, tu doit mettre à la fin de celle-ci ORDER BY `id` [ASC pour que ca sois croissant - DESC pour que ca sois décroissant]
a+
-
voila comment est structurer la base
$sql = "CREATE TABLE `sqlsftdm`.`chat` (`ID` INT NULL AUTO_INCREMENT PRIMARY KEY, `text` MEDIUMTEXT NOT NULL, `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE = MyISAM;";
Je fais plus simple je les recupere dans l'ordre inscrit du mysql ceci fonctionne tres bien en temps normale
mais meme sa ne devrais pas faire cela dans le PMA
-
Cristab il te suffit de mettre ORDER by `id` ASC à la fin de la requette SQL qui récupère tes données sous php
-
oui mais nan c'est le big bazard dans le PMA la j'aime pas sa du tout ^^ en php je fais la meme chose mais tout est bien a sa place la c'est une cata
-
Si tu utilises PDO pour ta page Web, tu fais $bdd->query('SELECT * FROM Chat ORDER BY ID DESC');
Tu ne pourras pas l'ordonner correctement dès l'écriture, sachant que les ID sont normalement pourvus de l'attribut auto_increment.
Tiens, je te passe le code de ce que j'avais fait l'autre jour :
<?php
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=base', 'root', 'password', $pdo_options);
// On récupère tout le contenu de la table jeux_video
$reponse = $bdd->query('SELECT * FROM chat ORDER BY ID DESC');
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<strong><?php echo htmlspecialchars($donnees['Pseudo']); ?></strong> : <?php echo htmlspecialchars($donnees['Message']); ?><br />
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>
++
EDIT : Si tu veux mettre la date dans le bon ordre :
<?php
try
{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=base', 'root', 'password', $pdo_options);
// On récupère tout le contenu de la table jeux_video
$reponse = $bdd->query('SELECT ID,text, DAY(date) AS jour,MONTH(date) AS mois, YEAR(date) AS Annee, HOUR(date) AS heure, MINUTE(date) AS minute, SECOND(date) AS seconde FROM chat ORDER BY ID DESC');
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<strong><?php echo htmlspecialchars($donnees['Pseudo']); ?></strong> : <?php echo htmlspecialchars($donnees['Message']); ?> - <?php echo '' . $donnees['heure'] . ':' . $donnees['minute'] . ':' . $donnees['seconde'] . ' le ' . $donnees['jour'] . '/' . $donnees['mois'] . '/' . $donnees['annee'] . ''; ?><br />
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>
EDIT 2 : Je pense que c'est un problème avec Auto_increment à ID, est-ce que tu l'as mis ?
-
oui il y a bien l'auto-incrementation ^^
ce que je veut dire c'est que sa enregistre n'importe comment et sa c'est pas normal
-
SELECT * FROM `chat` ORDER `id` BY DESC--
-
L'ordre de tes données sont rangées par défaut dans un ordre spécifique qui est géré par le moteur de ta base. Tu retrouveras cet ordre par défaut partout lorsque tu feras un simple select sans 'order' sur ta base. Et ce n'est pas dû à PHPMyAdmin, car lui utilises aussi un simple SELECT sans ORDER BY pour lister les données. (Tu peux les trier par ID en cliquant sur "ID")
Il n'y a pas à savoir comment, c'est juste une certaine forme d'optimisation, géré en interne par le SGBD.
Si tu veux les trier, comme l'ont dit les autres utilise ORDER BY dans ta requête.
-
yep sa je sais ^^ vous me l'apprenner pas mais comment expliquer vous que l'id 7 est ecrit avant l'id 6 ma vrais question est la enfaite je peu faire le meme script en php il ne me feras pas ce bug
-
L'ordre de tes données sont rangées par défaut dans un ordre spécifique qui est géré par le moteur de ta base. Tu retrouveras cet ordre par défaut partout lorsque tu feras un simple select sans 'order' sur ta base. Et ce n'est pas dû à PHPMyAdmin, car lui utilises aussi un simple SELECT sans ORDER BY pour lister les données. (Tu peux les trier par ID en cliquant sur "ID")
Il n'y a pas à savoir comment, c'est juste une certaine forme d'optimisation, géré en interne par le SGBD.
Si tu veux les trier, comme l'ont dit les autres utilise ORDER BY dans ta requête.
La réponse est là ;)
Sinon, si tu veux plus d'infos : http://www.developpez.net/forums/d1101427/bases-donnees/mysql/administration/valeurs-non-rangees-defaut-index/ (http://www.developpez.net/forums/d1101427/bases-donnees/mysql/administration/valeurs-non-rangees-defaut-index/)
Comme le dit "mydb_server" dans le lien plus haut, tu peux utiliser sur ta table "ALTER TABLE table ORDER BY id;" pour les trier par défaut.
Et j'ai pas très bien compris la fin de ta phrase, tu n'arrives pas à le faire fonctionner en PHP ?
-
ah ben merci mais c'est bizard pas eu ce bug en php depuis deux ans ^^ donc sa me parraisser etrange tout de meme
-
C'est pas un bug ^^
-
Ahhhh, je comprends, tu te demande pourquoi dans phpMyAdmin, les données sont rangés comme cela ?
Ce n'est rien, si tu clic sur id, les données seront rangés ;) !
-
Oui mais il arrive pas a s'enlever de la tête que c'est un bug, deja hier avant la réponse de apo, j'ai passé deja 1h a lui dire mais non c'est pas un bug :bangin
Bref... Sujet règlé je pense.
-
est t'on obliger de specifier ceci mysql_set_charset("utf8_general_ci"); ??
-
Personnellement, j'utilise utf8_bin pour pas avoir de problème avec la sensibilité à la case.
-
pas faux
j'en deduit qu'il est preferable de le renseigner donc .
Merci