Problème requête PHP - PHP - Programmation
Marsh Posté le 18-05-2006 à 11:26:09
ça doit être une histoire de guillement, t'as essayé de mettre des ' à la place ?
Marsh Posté le 18-05-2006 à 11:31:22
les 2 requêtes sont bien sur la même base/table ?
la requête est correcte si tu l'affiche avant de l'exécuter ? elle est bien identique à celle collée dans phpmyadmin ?
je verrais bien 2 choses moi :
1 - requête correcte mais effectuée sur une table différente qui ne retourne rien (pas d'erreur, mysql_num_rows=0)
2 - $type non valide en distant pour cause de register_globals OFF sur le site distant qui amènerais au problème n°1
à voir
Marsh Posté le 18-05-2006 à 11:34:50
J'ai déjà essayé les simples quotes aussi et c'est pas mieux
Code :
|
La requete copié collé marche bien et la base et la table sont les bonnes. C'est étrange
$type est une chaine de caractères du genre "Test sur les trucs";
Pourrais-je avoir des précisions sur le register_globals OFF
Marsh Posté le 18-05-2006 à 11:46:23
register_globals fait en gros qu'on accède pas à une variable par $variable mais par $_GET['variable'] $_POST['variable'] etc selon la provenance, plus d'infos dans la doc
sinon, essaye de virer ton WHERE
si t'as pas de ligne retournées, mais pas d'erreur c'est que ta table est vide
si tu as une erreur, y'a forcément une problème à la connexion, ou dans la
requête
en tout cas c'est très certainement une erreur tout bête, faut révérifier du début
Marsh Posté le 18-05-2006 à 11:47:30
J'ai fait le test avec un requete sans paramètre via mon interface PHP et ca fonctionne.
Dès que je passe ce paramètre en plus, la requête ne fonctionne plus via mon interface PHP mais seulement via celle de PHPMyAdmin.
Que faire ?
La syntaxe est bonne, la base aussi je l'interroge avec beaucoup de requete.
Marsh Posté le 18-05-2006 à 11:49:26
d'où sort $type ?
Marsh Posté le 18-05-2006 à 11:52:25
$type est la valeur d'un menu déroulant ( menu déroulant issu d'un template que j'alimente moi même )
NB: les valeurs de ce menu sont bonnes ( pas d'espaces avant et après trim($type) rien de tout ça )
Marsh Posté le 18-05-2006 à 11:58:05
donc tu voudrais que type soit la valeur d'un <select>
ton formulaire est en méthode POST ?
essaye $_POST['type'] dans ta requête, et lis ça : http://fr.php.net/register_globals
Marsh Posté le 18-05-2006 à 13:08:34
Non mais ca marche je n'utilise pas $_POST['type'] car je fais
foreach($_POST as $k=>$v)
{
$$k = $v;
}
En gros je transforme tous mes POST en variable du même nom. Cette solution est éprouvée elle fonctionne parfaitement ailleurs.
D'autres idées
Peut être un problème de traitement de chaine de caractères. Le $type serait peut etre mal formaté ? Maisj e ne vis pas ou
Marsh Posté le 18-05-2006 à 13:16:13
tu peux pas nous filer une url et le code complet des 2 pages ?
et aussi afficher la requête avant de l'exécuter histoire qu'on puisse vérifier
y'a pas de magie noire là dessous, y'a forcément une erreur "simple", mais là on peut pas voir plus que ce que tu montre
Marsh Posté le 18-05-2006 à 13:37:40
Pour l'url je peux pas car c'est un client intranet mais je peux copier le code des fontions appelées :
Alors dans l'ordre le code HTML de ma page qui va appeler des scripts javascripts pour vérifier si le formulaire est bon ets ensuite la fonction AJAX qui va mettre à jour la page entre les balises DIV. ( NB : l'action du formulaire ne sert a rien c'etait un test précédent de plus l'AJAX est éprouvé ailleurs et ca fonctionne).
Code :
|
La fonction AJAX va quant à elle appeller le case "essais_stats" du fichier gestionstatistiques.php
Jusque là pas de soucis on y passse bien dans le case.
Ce case instancie ma classe statistiques qui elle contient la fonction avec la fameuses requete
Code :
|
Voici la fonction
Code :
|
Code :
|
Naturellement tout marche sur des roulettes avec PHPMyAdmin.
Voilà jespère avoir été suffisament explicite.
Merci de me sauver
Marsh Posté le 18-05-2006 à 13:45:24
alors sans les locks, avec une boucle pour fetcher et le retour d'erreur ça donne quoi ?
Code :
|
Marsh Posté le 18-05-2006 à 13:59:54
Sans les lock ou avec ca ne change pas mais attention j'ai une grande nouvelle.
En fait j'ai remarqué quelque chose.
Dès que la variable passée en paramètre ($type) dans la requête comporte un accent, c'est le drame pour PHP sinon ça passe très bien.
Cependant, dans la base il y a aussi des accents et ces derniers sont obligatoires ( pour cause d'édition de rapports ensuite ).
Je ne vois donc pas pourquoi les accents font déconner la requete seulement sous PHP
Devrais-je les convertir avec leur code ASCII ?. Si oui existe-t-il une fonction qui le fait ? J'ai deja utilisé une fonction du genre je sais plus le nom genre htmlsource ou je sais plus.
Avez vous une solution ?
Merci par avance
Marsh Posté le 18-05-2006 à 14:08:41
bah forcément, c'est ta solution éprouvée d'assigner les variables POST vers des globales , comme quoi..
$éà php il aime pas ça.. en travaillant sur le vrai tableau t'aurais pas eu de problème
Marsh Posté le 18-05-2006 à 14:09:32
Je vais tester ça de suite ^^
On ne se moque pas ^^
Je reviens pour dire si c'est bon ou non
Le $_POST['type'] ne fonctionne pas mieux . Je l'affiche de la meme facon
J'appelle donc ma fonction dans le case avec $_POST['type'] au lieu de $type puis le reste est inchangé mais ça ne fonctionne toujours pas sur les types ayant caractères accentués.
Marsh Posté le 18-05-2006 à 14:10:10
ah si je me moque, tout ça à cause d'une sale habitude héritée du php3
EDIT : j'ai pas vu d'accents dans tes champs, ça serait le problème si t'esssayais de passer un nom de variable avec un accent, pas le contenu.. le drame de php que t'as avec les accents c'est quoi exactement ??
et tu peux dumper ton tableau POST aussi histoire de vérifier ?
Marsh Posté le 18-05-2006 à 14:13:46
NB : le drame c'est que PHP n'arrive pas a éxecuter ma requete des qu'un de ces paramètres comporte un fichier accentué.
Enfin il l'exécute mais n'arrive a retourner aucun enregistrement
Citation : |
Marsh Posté le 18-05-2006 à 14:18:44
Peut etre spécifier dans la base que le jeu de caractères pour la table doit comporter des accents du genre CHARACTER SET ISO8859_1 mais bon la je commence à divaguer j'attend de l'aide de ta part.
Merci par avance
Marsh Posté le 18-05-2006 à 14:18:56
la requête fonctionne et ne retourne rien ou t'as une erreur sql ?
si pas d'erreur c'est un problème de charset effectivement, sinon faudra fouiller encore un peu
Marsh Posté le 18-05-2006 à 14:22:41
La requete fonctionne quand le $type ne comporte pas de caractères accentués.
Sinon quand $type a des accents elle ne retourne aucune ligne mais pas d'erreur
Au niveau du charset je peux régler ce truc comment
jai ajouté header(Content-type; charset=iso-8859-1); dans la fonction qui requete au début
Mais visiblement ce n'est pas le bon
EDIT : en fait je crois pas que c'est ca qui va servir a grand chose enfin si tu as une idée je suis ouvert je commence a m'arracher les cheveux. C'est quand meme une erreur bien lourde. Fallait deja trouver que c'est les accents qui fait déconner la requete
Marsh Posté le 18-05-2006 à 14:33:11
la table elle est sur que charset ? ton script sur lequel ?
tes données sont lisibles en clair dans phpmyadmin ? les accents sont pas remplacés par de l'hexa ou autre ?
y'a rien d'autre comme traitement sur tes variables post ?
Marsh Posté le 18-05-2006 à 14:48:04
J'ai tenté ça mysqli_real_escape_string(). mais bon j'ai vu que j'étais en PHP 4.3.3 et que cette fonction marche pour le 5
Citation : |
--> Je ne sais pas comment procéder pour savoir ça
Citation : |
Oui mes données sont lisibles en clair les accents ne sont pas remplacés
Citation : |
--> Auncun traitement sur mon post ( c'est le script AJAX qui me poste tout ca bien coreectement )
Marsh Posté le 18-05-2006 à 14:50:13
alors faut voir coté AJAX
la requête avec accents elle ressemble à quoi (coté source de la page, PAS la vue brouteur)
Marsh Posté le 18-05-2006 à 14:58:06
AJAX post comme si je faisais un post du formulaire les deux chaines postées sont strictement équivalentes ( strcmp = 0 ).
Je commence a devenir fou fou .
Tu crois pas que si je fais une fonction d'analyse syntaxique qui va remplacer les accents par leur code ASCII ca devrait marcher ?
Marsh Posté le 18-05-2006 à 15:01:54
à quoi ressemble la requête avec accents dans la source ? c'est comme celle déjà postée (ie les accents sont pas modifiés) ?
y'a forcément un différence entre la chaine dans la table et celle demandée pour recherche
après où est-elle modifée, aucune idée (c'est quand même limite binz ton truc)
Marsh Posté le 18-05-2006 à 15:09:20
Bah écoute c'est limite comme tu dis mais je ne sais pas du tout d'ou vient le soucis.
La requête printée à les accents exactements comme dans la base donc je ne vois ps pas pourquoi ça ne marche pas
Sinon je vais essayer autre chose : une fonction qui analyse $type et qui dézingue les accents par des % ( pour que le like aille chercher n'importe quoi) .
Le résultats renvoyés seront les même et ça peut marcher.
Sinon je suis quand même pas trop mauvais, j'arrive a me débrouiller en PHP donc je ne raconte pas de betises même si mon truc parait louche le code en amont et en aval est validé. Je sais que ca peut paraitre bizarre ça m'est jamais arrivé mais bon....
Si tu as dautres idées je prends
Merci de ton aide déjà par avance
Marsh Posté le 18-05-2006 à 15:15:10
euh ouais m'enfin sortir des requêtes comme ça déjà c'est pas génial (même en ignorant le problème)
select * from modele_essai where lib_modessai like 'Caractéristiques dimensionnelles et réglage des tricycles%'
t'as forcément une merdouille vérifié les encodages de la page, le charset du serveur, de la table (c'est visible via phpmyadmin) et à la rigueur le log pour voir ce qui est réellement envoyé), vérifie aussi que t'as pas un champ binaire (sensible à la casse)
là c'est à toi de vérifier et revérifier encore, sans accés je vais pas pouvoir en savoir plus
EDIT : ajoute aussi le charset dans les meta html, dans ton copié collé il n'y est pas
Marsh Posté le 18-05-2006 à 15:43:00
Dernière chose que je viens de tester.
Quand dans ma fonction qui requete j'écris
Code :
|
Les accents écrits directements échappés, je dois utilise les é alors que les accents de mon $type fonctionnnent
Voilà c'est tout j'avance plus trop je vais voir si je peux trouver autre chose
EDIT : au niveau des accents j'y peux rien la base existait préalablement comme ça donc je dois me débrouiller avec l'existant c'est bien ça le soucis
EDIT : franchement les accents quoi c'est naze de mettre ca en BdD je peux meme pas faire de strstr pour trouver l'accent dans ma chaine
EDIT : c'est la manière dont AJAX post les valeur qui fait que les accents déconnent
pour un post c'est
nom -> "Content-Type"
valeur -> "application/x-www-form-urlencoded" d'ou mon problème je vais voir donc ca de plus près merci pour tout
Marsh Posté le 18-05-2006 à 11:23:47
Bonjour à tous ,
Je me permets de faire ce post car j'ai un soucis avec un requete qui attaque une base MySQL en PHP.
En fait cette requete fonctionne via l'interface PHPmyAdmin mais pas via PHP.
En effet en faisant un echo de la requete PHP et la collant dans PHPMyAdmin, cette derniere me retourne 9 lignes
alors que la même requête via mon interface web PHP ne retourne aboslument aucune ligne ( mysql_num_rows = 0 )
Voici le code PHP ci-dessous :
Je vous remercie par avance de votre aide
Message édité par TomZ le 18-05-2006 à 11:24:03