OVH Community, your new community space.

Release 3 - changements au niveau de MySQL ou de PHP


janus57
04/01/2015, 15h00
Bonjour,

beaucoup de CMS utilise "Htmlspecialchars" et/ou "real_escape_string" car cela permet aussi de rajouter une sécurité sur les requêtes SQL de mémoire.

Cordialement, janus57

Fredo_L
04/01/2015, 14h11
Citation Envoyé par BBR
ta requête serait bien mieux avec la ligne que je t'ai donnée, mais il faut effectivement "échapper" les apostrophes
Ma requête est déjà similaire à ce que tu as donné. Comme je l'ai dit dans mon message initial, j'avais fait cette modification de ma requête car je pensais que cela allait résoudre le problème. Le problème, c'est que cela n'a pas été suffisant et qu'il faut en plus modifier la variable.

BBR
04/01/2015, 13h53
ta requête serait bien mieux avec la ligne que je t'ai donnée, mais il faut effectivement "échapper" les apostrophes

Fredo_L
04/01/2015, 10h37
Citation Envoyé par BBR
la syntaxe est plutôt comme ceci :
Code:
mysql_query("UPDATE mag_magazines set  mag_presentation='$mag_presentation_modif' where id ='$ligne_modif'   ");
au lieu de te compliquer la vie, puisque tu as de guillemets doubles pour encadrer la requête, tu mets ensuite des guillements simples pour encadrer les variables.
J'avais essayé mais cela ne fonctionne pas dans le cas où la variable contient des '.


J'ai cherché sur le Net et je pense avoir trouvé le problème.
Sur mon ancien serveur, j'avais les guillemets magiques (Magic quotes) d'activées dans php.ini et cela résolvait automatiquement mon problème en mettant des \ là où il le fallait.
Sur mon nouveau serveur, les Magic quotes sont désactivées.
Cependant, il semble que ce soit une bonne chose de laisser les Magic quotes désactivées, et donc, je vais laisser la configuration en l'état.
Pour plus d'info sur les magic quotes : http://christianelagace.com/wordpres...un-formulaire/

apparemment, il existe 2 solutions possibles pour résoudre mon problème.

Solution 1 :
$mag_presentation_modif = stripslashes($mag_presentation_modif); // suppression des slashes
$mag_presentation_modif = addslashes($mag_presentation_modif); // ajout d'un slashe devant les caractères spéciaux
(ou alors mysqli_real_escape_string() )

Solution 2 :
$mag_presentation_modif = Htmlspecialchars($mag_presentation_modif); // transformation des caracteres speciaux en code HTML

J'ai décidé de prendre la solution 2 qui me semble être le plus simple.

BBR
04/01/2015, 10h17
la syntaxe est plutôt comme ceci :
Code:
mysql_query("UPDATE mag_magazines set  mag_presentation='$mag_presentation_modif' where id ='$ligne_modif'   ");
au lieu de te compliquer la vie, puisque tu as de guillemets doubles pour encadrer la requête, tu mets ensuite des guillements simples pour encadrer les variables.

janus57
04/01/2015, 00h18
Bonjour,

tu devrais regarder la doc de PHP et comparer les changement entre la version PHP de la R2 que tu avait et la R3 que tu as maintenant, cela ressemble aux "magic_quotes" de PHP ou tout autre fonction qui depuis les dernière version de PHP commence a être déprécié et donc mis à "off" par défaut.

Du coup faudrait aussi voir dans les logs d'erreur si tu as pas des warning ou notice PHP.

Cordialement, janus57

Fredo_L
03/01/2015, 23h42
Bonjour,

J'étais auparavant avec la Release 2 d'OVH et je viens de passer sur une Release 3.
J'ai un problème car j'ai l'impression que soit MySQL, soit PHP ne fonctionne plus de la même façon.

J'ai une table qui contient le champ "mag_presentation".
Pour mettre à jour ma table, j'utilisais le code PHP suivant :
mysql_query("UPDATE mag_magazines set mag_presentation=\"$mag_presentation_modif\" where id =\"$ligne_modif\"");
Ce code fonctionnait parfaitement bien sur la Release 2 d'OVH.

Depuis que je suis passé sur la Release 3, cela ne fonctionne plus.
Pour être plus précis, cela fonctionne si le texte est simple (par exemple "toto"), mais cela ne fonctionne plus dans le cas de choses plus complexes, comme par exemple du code HTML contenant des guillemets.

J'ai cru avoir trouvé la solution en modifiant ma fonction de la manière suivante (remplacement des guillemets par une apostrophe) :
mysql_query("UPDATE mag_magazines set mag_presentation='$mag_presentation_modif' where id =\"$ligne_modif\"");
mais j'avoue tort car cela ne fonctionne pas dès qu'il y a une apostrophe dans la variable.

Petit exemple de ce que peut contenir ma variable '$mag_presentation_modif :
Code PHP:
<center><img src="images_logomags/logomicrosimulateur.jpg" width="300">center>
<
p>
Spécialisé dans les jeux et systèmes de simulation en tous genreset plus particulièrement ceux relatifs à l'aviation.


Intéressant, mais niveau assez élevé.


[à noter]


- Le titre a comporté le mot "magazine" pendant longtemps.


- Le site Web de Bernard Jolivalt fournit l'index (mais pas le sommairede tous les numéros depuis le premier !
<
p align="right">
<
b>Présentation du magazine réalisée par <
href
="http://www.pressotech.com/fiches/fiche_mag.php3?id=219" target="_blank">Press-0-TechLe 
Guide
/Musée de la presse high-tech francophonea>b

J'ai ensuite trouvé comme solution de mettre un \ devant chaque ' du texte.

Est-ce que quelqu'un saurait si mon problème provient d'un changement dans PHP ou dans MySQL ?
Et est-ce que vous savez comment faire pour retrouver l'ancien comportement que j'avais avant ?

S'il n'y a pas de solution, je changerai tous mes scripts afin de remplacer les ' par des \' dans mes variable $mag_presentation_modif.

Merci d'avance.