[PHP] Insérer des valeurs dans une zone de texte [Résolu]

Insérer des valeurs dans une zone de texte [Résolu] [PHP] - PHP - Programmation

Marsh Posté le 13-10-2002 à 19:17:43    

Hello
 
Finissant de développer un site je bloque sur un petit problème...
 
En fait j'ai besoin d'inscrire des utilisateurs, pour ça aucun pb, je fait saisir les infos et les insère dans ma bas mySQL.
 
En revanche je voudrais faire un formulaire de modification mais, après avoir récupéré les valeurs de ma table dans mySQL je n'arrive pas à les afficher dans mes différentes zones de texte.
 
Comment puis-je faire ?
 
J'ai bien essayé de cette façon :
 
<?
$sql = "SELECT * FROM maTable WHERE monId = " . $newId . ";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
 
 
function print_val ($nom)
{
 $champ = mysql_result($result, 0, $nom);
 $ligne = " value=\"" . $champ . "\"";
 print($ligne);
 }
}
?>
 
<input name="txt_nom" type="text" id="txt_nom"<? print_val("nomChamp" ); ?>

 
Pour obtenir par exemple :
 
<input name="txt_nom" type="text" id="txt_nom" value="10">
 
Mais mon navigateur me met l'erreur :
 
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp\www\lol\user_modif.php on line 37
value="">

 
 
Qu'est-ce que je fais mal ?
 
 
Merci d'avance !


Message édité par guillot le 13-10-2002 à 19:45:48
Reply

Marsh Posté le 13-10-2002 à 19:17:43   

Reply

Marsh Posté le 13-10-2002 à 19:21:05    

Je pensais que ma variable $result devait être déclarée en global mais l'erreur est la même au final quand je déclare mon global $result;

Reply

Marsh Posté le 13-10-2002 à 19:31:43    

Quand tu fais un $result = mysql_query($sql), c'est mieux de tester le résultat pour vérifier que la requête est bien passée
if (! $result) {
  // traitement de l'erreur
  ...
  exit;
}

Reply

Marsh Posté le 13-10-2002 à 19:37:47    

C'est justement ce que je fais avec mon
$rows = mysql_num_rows($result);
 
Je n'ai pas affiché tout le code de ma page mais après je fait un test du nombre de résultats envoyés
if ($rows <> 0)...
 
 
 
 
Quand j'affiche les infos au début de mon code ça marche mais dans ma fonction tout est vide... même en déclarant mes variables en global...

Reply

Marsh Posté le 13-10-2002 à 19:42:39    

Guillot a écrit a écrit :

C'est justement ce que je fais avec mon
$rows = mysql_num_rows($result);
 
Je n'ai pas affiché tout le code de ma page mais après je fait un test du nombre de résultats envoyés
if ($rows <> 0)...
 
 
Quand j'affiche les infos au début de mon code ça marche mais dans ma fonction tout est vide... même en déclarant mes variables en global...



non
mysql_num_rows, ca compte le nombre de lignes du résultat. Rien à voir avec la vérification de la bonne exécution de la requête.
Une requête peut être juste et renvoyer 0 ligne.

Reply

Marsh Posté le 13-10-2002 à 19:43:19    

Bizzarerie du PHP, il faut déclarer les variables globales dans chaque fonction.
 
J'ai vu ça sur un site...
 
Mon problème est résolu :)
 
Merci

Reply

Marsh Posté le 13-10-2002 à 19:45:07    

Citation :

mysql_num_rows, ca compte le nombre de lignes du résultat. Rien à voir avec la vérification de la bonne exécution de la requête.  
Une requête peut être juste et renvoyer 0 ligne


 
Si elle s'est mal exécutée elle me renverra 0 lignes donc elle ne passera pas mon test.

Reply

Marsh Posté le 13-10-2002 à 19:53:12    

Guillot a écrit a écrit :

Citation :

mysql_num_rows, ca compte le nombre de lignes du résultat. Rien à voir avec la vérification de la bonne exécution de la requête.  
Une requête peut être juste et renvoyer 0 ligne


 
Si elle s'est mal exécutée elle me renverra 0 lignes donc elle ne passera pas mon test.



non, c'est pas comme ca que ca marche.
Si ca passe pas, $result = 0 et mysql_num_rows va mettre un message d'erreur.
Faut que tu fasses la distinction entre :
- une requête fausse (erreur de syntaxe, non connecté à la base...)
- une requête juste, qui peut renvoyer 0 ligne

Reply

Marsh Posté le 13-10-2002 à 20:59:25    

Oui c'est vrai que ça peut être utile si plantage de base par ex.
 
Généralement comme je teste ma page, je vois si ma requête est juste ou pas, mais si j'ai une valeur qu iconvient pas et que ma requête foire là je suis foutu...
 
Je m'en vais rajouter ça :)

Reply

Marsh Posté le 16-10-2002 à 11:12:30    

Guillot a écrit a écrit :

Bizzarerie du PHP, il faut déclarer les variables globales dans chaque fonction.
 
J'ai vu ça sur un site...
 
Mon problème est résolu :)
 
Merci
 



C'est pas une bizareri du langage, quand tu fais un global $var, t'indique juste au compilateur qu'a partir de maintenant et jusqu'à la sortie du bloc en court, la variable $var corespond à l'utilisation de la variable globale corespondante.
C'est une protection.
Par contre, il y a un autre mot clé de php qui permet de déclarer des variables utilisables partout sans les redéclaré dans chaque fonction mais après, pour le débugage, c'est la croit et la banière pour trouver d'où sort telle ou telle valeur quand c'est pas toi qui a écrit le code.

Reply

Marsh Posté le 16-10-2002 à 11:12:30   

Reply

Marsh Posté le 17-10-2002 à 00:36:31    

L'autre façon de les déclarer globalement c'est laquelle ?
 
je sais qu'on peut utiliser #define() pour les constantes mais pour les variables, ça m'intéresse bien.
 
Etant donné que j'ai écrit tout les scripts du site et que j'ai fait un cahier des charges, un guide développeur, suffira que je l'explique dedans pr comprendre...
 
Merci

Reply

Marsh Posté le 17-10-2002 à 10:26:34    

Guillot a écrit a écrit :

L'autre façon de les déclarer globalement c'est laquelle ?
 
je sais qu'on peut utiliser #define() pour les constantes mais pour les variables, ça m'intéresse bien.
 
Etant donné que j'ai écrit tout les scripts du site et que j'ai fait un cahier des charges, un guide développeur, suffira que je l'explique dedans pr comprendre...
 
Merci
 



Ben ça, je m'en rapelles pas, je l'ai jamais utilisé d'une part par ce que j'en ai jamais eu besoin (je me suis toujours déclaré avec les global), d'autre part par ce que je trouves que ca rend le code moins clair (c'est peut être pour ça que j'arrives pas à comprendre comment fonctionne certain programmes trouvés sur le net) et enfin par ce que je trouves que ca complique le travail du programmeur (quand tu créé une nouvelle fonction, tu peux pas utiliser une variable locale ayant le même nom qu'une variable existant partout et quand tu créé une vairable existant partout, si une variable locale de même nom existe quelque part, alors t'auras droit à un gros bug sans savoir d'où ça vient).
 
Désolé de pas pouvoir t'aider plus.

Reply

Marsh Posté le 17-10-2002 à 10:48:40    

Citation :

quand tu créé une nouvelle fonction, tu peux pas utiliser une variable locale ayant le même nom qu'une variable existant partout et quand tu créé une vairable existant partout, si une variable locale de même nom existe quelque part, alors t'auras droit à un gros bug sans savoir d'où ça vient


 
Normalement si tu faisais bien, tu nommerais tes variables différemment de tes variables locales.
 
Par ex :
"GmaVariable" pour une globale
"maVariable" pour une locale
 
Après c'est toi qui voit comment faire, mais le mieux c'est de faire comme ça.
 
Dans le cas de programmes très longs, mettre le type de la variable peut aussi être utile (booléen, numérique, string...).
 
Avec tout ça tu devrais avoir une marge avant de retomber 2 fois sur la même variable !!
 
 
Sinon pour mon cas de variables globales, en fait j'en ai assez rarement besoin donc je me débrouillerais avec mon "global" :D

Reply

Marsh Posté le 17-10-2002 à 12:00:28    

Guillot a écrit a écrit :

Citation :

quand tu créé une nouvelle fonction, tu peux pas utiliser une variable locale ayant le même nom qu'une variable existant partout et quand tu créé une vairable existant partout, si une variable locale de même nom existe quelque part, alors t'auras droit à un gros bug sans savoir d'où ça vient


 
Normalement si tu faisais bien, tu nommerais tes variables différemment de tes variables locales.
 
Par ex :
"GmaVariable" pour une globale
"maVariable" pour une locale
 
Après c'est toi qui voit comment faire, mais le mieux c'est de faire comme ça.
 
Dans le cas de programmes très longs, mettre le type de la variable peut aussi être utile (booléen, numérique, string...).
 
Avec tout ça tu devrais avoir une marge avant de retomber 2 fois sur la même variable !!
 
 
Sinon pour mon cas de variables globales, en fait j'en ai assez rarement besoin donc je me débrouillerais avec mon "global" :D



C'est vrai que j'ai pas fait comme ça.
Et c'est vrai aussi que mes fonctions font rarement plus de 100 lignes. (et bien souvent beaucoup moins)
Par contre, j'ai utilisé quelques conventions de nom de variables à certains endroits pour être sur de ne pas les confondre avec les autres.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed