[PHP/MySQL] Erreur aléatoire...?
Résolu/Fermé
roukmouth
Messages postés
26
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
10 mars 2010
-
25 avril 2005 à 20:05
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 26 avril 2005 à 15:19
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 26 avril 2005 à 15:19
A voir également:
- [PHP/MySQL] Erreur aléatoire...?
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Mysql community server - Télécharger - Bases de données
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
27 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 20:39
25 avril 2005 à 20:39
Essaie de mettre echo $download juste avant l'include.
En cas d'erreur ça te donnera certainement un indice: un mauvais chemin ou autre chose....
En cas d'erreur ça te donnera certainement un indice: un mauvais chemin ou autre chose....
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 20:55
25 avril 2005 à 20:55
Faudrais dans un premier temps mettre ta variable de connexion dans ton mysql_query : c'est pas obligé mais c'est plus sécurisé.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 20:58
25 avril 2005 à 20:58
Ah? Je savais pas... Mais alors c'est une sécurité uniquement si utilises plusieurs bases dans un script?
PS: Y clique, Y clique, il y est :-D
PS: Y clique, Y clique, il y est :-D
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 21:01
25 avril 2005 à 21:01
oui oui, uniquement si tu a acces à plusieur base, mais je suis assez maniaque de ce coté la en fait... :D
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 20:58
25 avril 2005 à 20:58
et met :
meme si tu n'a qu'un tour de boucle. Car si jamais ton erreur est qu'il n'y a pas de résultat, alors il ne te mettra pas le reste tout simplement, plutot que de fiare une erreur plus loin.
while ( $ligne = mysql_fetch_array ($result) ) { ... }
meme si tu n'a qu'un tour de boucle. Car si jamais ton erreur est qu'il n'y a pas de résultat, alors il ne te mettra pas le reste tout simplement, plutot que de fiare une erreur plus loin.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 21:07
25 avril 2005 à 21:07
Si tu as une erreur encore apres ca, c'est que le chemin enregistré dans ta base n'est pas le bon : Dans le sens ou les chemin à inclure se font par rapport à ta page web, et non pas à la page de script ou tu es (tu me suis la ?) : Par exemple, le index.php ou un équivalent, de ton site se situe à la source www; Dans cet index, tu inclus un fichier qui est placé dans le rep www/script on va dire. Tu as donc dans index.php :
include "script/bidule.php
Mais dans ce bidule.php, tu inclu un autre script, mettons macin.php, qui lui se situ aussi dans www/script, alors dans ton script bidule.php, il ne faudra pas mettre ceci :
include "machin.php" : ce qui est bon au niveau du script bidule.php, mais qui lorsquetu visite ton site n'est pas le cas car la référence ./ sera non plus www/script, mais www uniquement (car tu est dans l'index.php quand tu visite, et non pas dans bidule.php.
Il te faut mettre alors dans ton bidule.php, non plus :
include "machin.php"
Mais :
include "script/machin.php"
Tu as tout compris ?
include "script/bidule.php
Mais dans ce bidule.php, tu inclu un autre script, mettons macin.php, qui lui se situ aussi dans www/script, alors dans ton script bidule.php, il ne faudra pas mettre ceci :
include "machin.php" : ce qui est bon au niveau du script bidule.php, mais qui lorsquetu visite ton site n'est pas le cas car la référence ./ sera non plus www/script, mais www uniquement (car tu est dans l'index.php quand tu visite, et non pas dans bidule.php.
Il te faut mettre alors dans ton bidule.php, non plus :
include "machin.php"
Mais :
include "script/machin.php"
Tu as tout compris ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 21:09
25 avril 2005 à 21:09
Juste un truc, si jamais il ya plusieurs résultats, ce ne serait pas plutôt:
Sinon $ligne ne gardera que le dernier tableau de résultats....
while ( $ligne[] = mysql_fetch_array ($result) ) { ... }
Sinon $ligne ne gardera que le dernier tableau de résultats....
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 21:15
25 avril 2005 à 21:15
non non, juste :
C'est ca qui est bien avec php, tu n'a pas à te soucier des déclarations ni des typages. L'allocation se fait en gros "à la volée". Si bien que tu peux faire :
Mais c'est aussi un moyen de faire des fautes d'innatentions fréquentes....
while( $ligne = mysql_fetch_array($result) ){ ... }
C'est ca qui est bien avec php, tu n'a pas à te soucier des déclarations ni des typages. L'allocation se fait en gros "à la volée". Si bien que tu peux faire :
for($i=0;$i<6;$i++) { $tab[i] = "coucou"; } ... et plus loin : $tab = 9;
Mais c'est aussi un moyen de faire des fautes d'innatentions fréquentes....
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 21:37
25 avril 2005 à 21:37
Hmm.. Chuis pas d'accord :-)
Si plus loin tu fais $tab=9, là tu détruis ta variable tableau pour en faire un entier. Tu ne retrouves plus ton tableau après.
Je dis ça par conclusion car je viens de tester: j'ai un script chez moi qui liste toutes les colonnes d'une table:
Ca liste bien.
J'ai un tableau avec mes resultats dans $truc[$muche].
Mais si je le transforme en
Là je n'ai plus de tableau.
J'ai même plus rien si j'essaie avec echo ou print_r d'avoir la valeur de $truc.
Et gettype($truc) me retourne NULL.
Du coup j'en viens à me demander si le dernier test de ce genre de boucle (le test qui determine la fin de la boucle, ou mysql_fetch_assoc ne retourne plus rien) ne se termine pas avec une ultime affectation dans $truc. Provoquant ainsi la destruction de son contenu.....
Si le dernier test qui vérifie une boucle (le dernier test qui provoque l'arrêt de la boucle) est executé, du coup tu affectes une nouvelle valeur dans ta variable. Du moins c'est comme ça que je vois le truc....
Ce n'est qu'une supposition de ma part, c'est peut être une erreur de mon script....
Si plus loin tu fais $tab=9, là tu détruis ta variable tableau pour en faire un entier. Tu ne retrouves plus ton tableau après.
Je dis ça par conclusion car je viens de tester: j'ai un script chez moi qui liste toutes les colonnes d'une table:
while ($truc[]=mysql_fetch_assoc($machin)
Ca liste bien.
J'ai un tableau avec mes resultats dans $truc[$muche].
Mais si je le transforme en
while($truc=mysql_fetch_assoc($machin))
Là je n'ai plus de tableau.
J'ai même plus rien si j'essaie avec echo ou print_r d'avoir la valeur de $truc.
Et gettype($truc) me retourne NULL.
Du coup j'en viens à me demander si le dernier test de ce genre de boucle (le test qui determine la fin de la boucle, ou mysql_fetch_assoc ne retourne plus rien) ne se termine pas avec une ultime affectation dans $truc. Provoquant ainsi la destruction de son contenu.....
Si le dernier test qui vérifie une boucle (le dernier test qui provoque l'arrêt de la boucle) est executé, du coup tu affectes une nouvelle valeur dans ta variable. Du moins c'est comme ça que je vois le truc....
Ce n'est qu'une supposition de ma part, c'est peut être une erreur de mon script....
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 21:41
25 avril 2005 à 21:41
oui mais la différence est là justement :
Tu met bien des [ ] avec fetch_assoc, mais avec fetch_array, pas besoin de [ ]. C'est tout.
Qunad au tableau qui devient un entier, oui, c'est ce que je voulais dire : tu peux prendre la même variable pour plusieurs triatement qui ne sont pas du même type sans que ca change qqchose (si ce n'est que les ancienne valeur sont écrasée en effet, et que donc ca peut entrainer des erreurs d'étourderies.
Tu met bien des [ ] avec fetch_assoc, mais avec fetch_array, pas besoin de [ ]. C'est tout.
Qunad au tableau qui devient un entier, oui, c'est ce que je voulais dire : tu peux prendre la même variable pour plusieurs triatement qui ne sont pas du même type sans que ca change qqchose (si ce n'est que les ancienne valeur sont écrasée en effet, et que donc ca peut entrainer des erreurs d'étourderies.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 21:55
25 avril 2005 à 21:55
Ah ok, d'accord j'avais mal compris :-)
Mais bon avec mysql_fetch_array() je ne pense pas qu'on puisse utiliser une variable sans [] s'il ya plusieurs resultats, auquel cas les anciennes valeurs seront écrasées. Non?
Je viens de remplacer
Par:
J'obtiens:
ArrayArrayArrayArrayArrayArrayArrayboolean
Donc il récupère bien les valeurs sauf au dernier test de la boucle où mysql_fetch_array retourne False car il n'a plus rien.
Mais $titre n'est plus un tableau, car après la boucle si j'écris
J'obtiens "boolean".
Il n'a donc gardé que la dernière valeur renvoyée par mysql_fetch_array, c'est à dire False. Et les anciennes ont été écrasées. Et c'est à priori ce qui devrait se passer à chaque fois qu'on crée une boucle avec cette fonction. Ce qui peut être pallié avec une variable tableau.
Désolé je suis très lourd ce soir :-(
Mais bon avec mysql_fetch_array() je ne pense pas qu'on puisse utiliser une variable sans [] s'il ya plusieurs resultats, auquel cas les anciennes valeurs seront écrasées. Non?
Je viens de remplacer
while($titres[]=mysql_fetch_assoc($truc))
Par:
while($titres=mysql_fetch_array($truc,MYSQL_ASSOC)) { echo $titres; }
J'obtiens:
ArrayArrayArrayArrayArrayArrayArrayboolean
Donc il récupère bien les valeurs sauf au dernier test de la boucle où mysql_fetch_array retourne False car il n'a plus rien.
Mais $titre n'est plus un tableau, car après la boucle si j'écris
echo gettype($titres);
J'obtiens "boolean".
Il n'a donc gardé que la dernière valeur renvoyée par mysql_fetch_array, c'est à dire False. Et les anciennes ont été écrasées. Et c'est à priori ce qui devrait se passer à chaque fois qu'on crée une boucle avec cette fonction. Ce qui peut être pallié avec une variable tableau.
Désolé je suis très lourd ce soir :-(
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:00
25 avril 2005 à 22:00
Non, si tu est dans ta boucle, c'est qu'il te renvoie un tableau,sinon il te renvoie le bouléen false et tu sort.
Par contre, effectivement, si tu veux pouvoir traiter $ligne en dehors de la boucle, il faut mettre autre chose que fetch_array() sinon, il ne le gardera pas.
Par contre, effectivement, si tu veux pouvoir traiter $ligne en dehors de la boucle, il faut mettre autre chose que fetch_array() sinon, il ne le gardera pas.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:03
25 avril 2005 à 22:03
Aaah d'accord, je le voyais pas comme ça....
Bon ok, bah j'ai rien dis alors :-D
Bon ok, bah j'ai rien dis alors :-D
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:02
25 avril 2005 à 22:02
Pardon je rectifie:
le
echo $titres dans la boucle me retourne ArrayArrayArray etc...
Mais le gettype après la boucle me retourne Boolean. Voilà, donc je continue à camper sur mes positions de pinailleur :-D
le
echo $titres dans la boucle me retourne ArrayArrayArray etc...
Mais le gettype après la boucle me retourne Boolean. Voilà, donc je continue à camper sur mes positions de pinailleur :-D
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:13
25 avril 2005 à 22:13
Donc on est d'accord :
tant que tu veux faire ton traitement dans la boucle, tu peux garder la forme $ligne = mysql_fetch_array($result) qui aurra le même effet que
$ligne[] = mysql_fetch_assoc.
Conclusion : fetch_array sert à traiter temporairement et fetch_assoc durablement.
tant que tu veux faire ton traitement dans la boucle, tu peux garder la forme $ligne = mysql_fetch_array($result) qui aurra le même effet que
$ligne[] = mysql_fetch_assoc.
Conclusion : fetch_array sert à traiter temporairement et fetch_assoc durablement.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:17
25 avril 2005 à 22:17
Tout à fait d'accord :-)
Mais tu peux aussi traiter durablement avec fetch_array.
Suffit d'utiliser la technique du tableau comme avec fetch_assoc...
Mais tu peux aussi traiter durablement avec fetch_array.
Suffit d'utiliser la technique du tableau comme avec fetch_assoc...
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:24
25 avril 2005 à 22:24
...
oui mais plutot que te prendre une technique de qqchose qui existe déjà, je pense qu'il est préférable de prendre la technique la mieux adaptée pour le cas que l'on souhaite traiter :
En l'occurrence, fetch_array pour les traitements temporaires dans une boucle, et fetch_assoc pour le reste (ou un autre), car fetch_array est moins long à écrire... (lol on va en arrivés au arguments de merde là, faut qu'on s'arrete)
Bon, j'ai bien aimé discuté d'une chose sur laquelle on est d'accord depuis le début,ça fait du bien de temps en temps !
Bonne nuit
++
oui mais plutot que te prendre une technique de qqchose qui existe déjà, je pense qu'il est préférable de prendre la technique la mieux adaptée pour le cas que l'on souhaite traiter :
En l'occurrence, fetch_array pour les traitements temporaires dans une boucle, et fetch_assoc pour le reste (ou un autre), car fetch_array est moins long à écrire... (lol on va en arrivés au arguments de merde là, faut qu'on s'arrete)
Bon, j'ai bien aimé discuté d'une chose sur laquelle on est d'accord depuis le début,ça fait du bien de temps en temps !
Bonne nuit
++
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:33
25 avril 2005 à 22:33
:-D
Yep, bonne nuit :-)
PS: Ya autant de lettres dans array que dans assoc :o)
Yep, bonne nuit :-)
PS: Ya autant de lettres dans array que dans assoc :o)
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:35
25 avril 2005 à 22:35
voui mais ya pas de crochet [], ;o)
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:41
25 avril 2005 à 22:41
Oui mais tu peux aussi utiliser fetch_assoc dans une boucle et sans crochet. Suffit de préciser le champs par la suite, il sera par défaut uniquement associatif c'est tout (au contraire de array qui sera associatif et numerique)...
Voilà c'était mon dernier pinaillage :-)
Bonne nuit .... ^^
Voilà c'était mon dernier pinaillage :-)
Bonne nuit .... ^^
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:44
25 avril 2005 à 22:44
Bonne nuit :),
tu vas me manquer un peu, j'vais parler de rien à qui maintenant !
++
tu vas me manquer un peu, j'vais parler de rien à qui maintenant !
++
roukmouth
Messages postés
26
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
10 mars 2010
2
25 avril 2005 à 22:49
25 avril 2005 à 22:49
C'est très intéressant ce que vous dites mais je reviens à mon problème.
J'ai suivi ce que vous m'avez conseillé (et je vous en remercie). Donc voici le nouveau code :
Maintenant, je n'ai plus d'erreur mais il ne m'affiche plus rien du tout. Il ne m'affiche même pas "test" au début de la boucle, cela signifie donc qu'il ne rentre même pas dans la boucle??
Merci pour votre aide.
PS: Je rappelle que cette erreur reste aléatoire alors que tous les fichiers sont situés au même endroit et que les données dans la base de données sont équivalentes.
J'ai suivi ce que vous m'avez conseillé (et je vous en remercie). Donc voici le nouveau code :
while ( $ligne = mysql_fetch_array ($result, MYSQL_ASSOC) ) { echo"test"; //pour test extract($ligne); echo " <br> <img src='$lien_image' border='0' align='left'> <h3><b>$lien_titre</b></h3> Ajouté le $lien_date par $lien_membre<br> <b>Catégorie : </b>$lien_categorie<br />"; if ($lien_genre2 == "") { echo"<b>Genre : </b>$lien_genre1<br>"; } else { echo"<b>Genre : </b>$lien_genre1 / $lien_genre2<br>"; } include($lien_page); }
Maintenant, je n'ai plus d'erreur mais il ne m'affiche plus rien du tout. Il ne m'affiche même pas "test" au début de la boucle, cela signifie donc qu'il ne rentre même pas dans la boucle??
Merci pour votre aide.
PS: Je rappelle que cette erreur reste aléatoire alors que tous les fichiers sont situés au même endroit et que les données dans la base de données sont équivalentes.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:55
25 avril 2005 à 22:55
C'est que ton erreur doit se située avant, ailleur que dans la boucle en effet.
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:55
25 avril 2005 à 22:55
Si tu ecris echo"test; sans espace ça risque de ne pas marcher....
Essaie echo "test";
Si ça ne donne rien, c'est peut être que ta boucle n'est pas executée, ça donne quoi
Essaie echo "test";
Si ça ne donne rien, c'est peut être que ta boucle n'est pas executée, ça donne quoi
echo mysql_num_rows($result)juste avant ta boucle?
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 22:57
25 avril 2005 à 22:57
Et si tu met la requete suivante à la place de celle que tu as :
Je en pense pas que cela change, mais puisqu'on en est à titiller.. :)
$query = " SELECT * FROM liens WHERE lien_titre = '".$titre."'";
Je en pense pas que cela change, mais puisqu'on en est à titiller.. :)
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2005 à 23:00
25 avril 2005 à 23:00
C'est quoi ce extract() ? Ca met tout seul dans les variables ?
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
>
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
25 avril 2005 à 23:00
25 avril 2005 à 23:00
non c bon g compris..
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
25 avril 2005 à 22:49
25 avril 2005 à 22:49
C'est partie remise, on retrouvera bien d'autres fonctions à éplucher :-)