JeuWeb - Crée ton jeu par navigateur
Problème d'enregistrement de concaténation - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème d'enregistrement de concaténation (/showthread.php?tid=7375)

Pages : 1 2


Problème d'enregistrement de concaténation - Harald - 21-05-2015

Bonjour à tous,
Je suis dépasser complètement depuis maintenant deux jours ...

Je cherche a concaténer deux variables et l'enregistrée. Rien d'insurmontable me direz-vous. Oui mais le soucis est qu'après la concaténation qui fonctionne parfaitement, je ne peux enregistrer une chaine de plus de 30 caractères...

Hors si je met du texte a en faire péter une biographie dans la première des deux variables ca passe.

Voici mon code :
Code :
if($voler != 1){

   $message_ajouter = jetdes($voler,$_SESSION['Username'],3);
$message .= " - ";
$message .= $message_ajouter;
$type=3;
   var_dump($message);
}
mysql_query("INSERT INTO minichat(pseudo,message,id_tchat,type,joueurchuchoter) VALUES('$pseudo', '$message', '$id_chat', '$type','$joueurchuchoter')");

$message est enregistrer dans un champ longtext mais ca n'aide pas.
Je ne comprend pas, sauriez-vous m'aider? Merci !


RE: Problème d'enregistrement de concaténation - Xenos - 21-05-2015

Salut,

VALUES('$pseudo', '$message', '$id_chat', '$type','$joueurchuchoter') : injection SQL. Tu as surement des apostrophes dans ta variable.

Utilise des requêtes préparées (en 30 secondes, tu dois trouver ça sur google | php.net | open classroom).


RE: Problème d'enregistrement de concaténation - Harald - 21-05-2015

J'ai des requêtes préparée partout mais quand je travail au brouillon je fais ce genre de choses affreuses Sad.
J'ai déjà placer des requêtes préparées et elles n'ont rien changer a mon problèmes et je l'ai donc mise de coter tant que je brouillonne

Mais merci du conseil, j'ignorais que cela pouvait induire des injections sql je le faisais par habitude !


RE: Problème d'enregistrement de concaténation - Ter Rowan - 22-05-2015

je pense aussi comme Xenos

dans tous les cas donne nous des exemples en plus du code :

cas qui marche :
texte, texte à ajouter

cas qui ne marche pas :

texte, texte à ajouter, message d'erreur


RE: Problème d'enregistrement de concaténation - Xenos - 22-05-2015

Note aussi qu'il existe, en MySQL, une longueur maximale de requête (max_allowed_packet. Je ne sais pas si les requêtes préparées permettent de la contourner.


RE: Problème d'enregistrement de concaténation - Harald - 22-05-2015

Voici ce que mon code ici d'origine me renvoie quand je tente de "voler" un autre joueur :

[Image: Sans%20titre4.png]
La chaine ajoutée est trop longue donc cela ne s'enregistre pas. Vous voyez ce texte car c'est ce qui me renvient de var_dump pour pouvoir voir si tout passe bien. (la dernière ligne)


Cependant, si je rate, la chaine est plus courte. Il n'ajouter que le terme "rater" et la cela passe parfaitement...
[Image: Sans%20titre5.png]

je viens de mettre une requête préparée :
Code PHP :
<?php 
/* Vérifie la connexion */

if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
 
/* Préparation de la commande d'insertion */
$query = "INSERT INTO minichat(pseudo,message,id_tchat,type,joueurchuchoter) VALUES('$pseudo', '$message', '$id_chat', '$type','$joueurchuchoter')";
$stmt = mysqli_prepare($link, $query);

mysqli_stmt_bind_param($stmt, "ssiss", $pseudo, $message, $id_chat, $type, $joueurchuchoter);


/* Exécute la requête */
mysqli_stmt_execute($stmt);

Ca n'a rien changer au problème que je rencontre...


Je viens de placer trois var_dump pour voir d'ou vient le problème :
Code PHP :
<?php 
   var_dump
($message);

   $message_ajouter = voler($voler,$_SESSION['Username'],$message);
   var_dump($message_ajouter);
   $message .= " - ";
   $message .= $message_ajouter;
   var_dump($message);

Cela me retourne :
[Image: Sans%20titre6.png]


RE: Problème d'enregistrement de concaténation - Ter Rowan - 22-05-2015

est ce que tu peux refaire le test, mais au lieu de "rater", tu écris "raté"

outre la correction grammaticale, je me demande si c est pas le caractère spécial qui fait planter l'enregistrement


RE: Problème d'enregistrement de concaténation - Xenos - 22-05-2015

$query = "INSERT INTO minichat(pseudo,message,id_tchat,type,joueurchuchoter) VALUES('$pseudo', '$message', '$id_chat', '$type','$joueurchuchoter')";

Heu, c'est pas du tout une requête préparée ça?!

C'est pas plutôt ça:
Code :
/* Préparation de la commande d'insertion */
$query = "INSERT INTO minichat(pseudo,message,id_tchat,type,joueurchuchoter) VALUES(?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($link, $query);

?
Parce que dans l'exemple, il y a d'xp, donc une apostrophe, pas dans rater ni raté.

Note: passe tout en UTF-8 (BDD, encodage des fichiers, résultat HTML,...), c'est le moins emmer*ant à l'heure actuelle.


RE: Problème d'enregistrement de concaténation - Harald - 22-05-2015

Oui la grammaire n'est pas ma plus grande amie bien que j'essaie...

Cela s'enregistre bien dans la bdd mais cela ne s'affiche pas. Je vais voir si cela marche si je retire tous les é ailleurs.
[Image: Sans%20titre7.png]

Cela ne change rien il ne s'enregistre pas.
[Image: Sans%20titre8.png]


RE: Problème d'enregistrement de concaténation - Xenos - 22-05-2015

J'dois mal m'exprimer, je vois encore une apostrophe...

Utilise des requêtes préparées. A défaut, récupère le message d'erreur de MySQL (par les logs MySQL, ce serait mieux), qui t'en apprendra beaucoup.