mysql_fetch_array

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 09:57

bonjour,
voici mon code pour afficher des données (sans mise en page !)
//affichage des noms

$query1="SELECT * FROM formulaire ORDER BY num";
$resultat = mysql_query($query1);
echo"texte avant le if";
if($lig=mysql_fetch_array($resultat))
{
	do
		{//recuperation des données
		$num=$lig{'num'};
		$nom=$lig{'nom'};
		//affichage des données
		echo "$num,$nom";
		echo "il y a des données";
		}
		while($lig=mysql_fetch_array($mysql_resultat));
		}else{
		echo"aucune donnée";
		}
		//fermeture de la bse
		mysql_close();
?>
mais quand je lance mon script il me marque

Connexion réussietransaction ok texte avant le if
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/sites/vhbu/8/84/58696/public/www/exosphp/index.php on line 36
aucune donnée

mai sje ne vois pas pourquoi il me dit que mon argument n'est pas bon !
merci

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 mars 2007, 09:59

Modération :
kkdzil, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).
Je l'ai fait pour toi cette fois ci, mais je ne réitérerais pas.

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 mars 2007, 10:03


while($lig=mysql_fetch_array($mysql_resultat));

D'où sort la var $mysql_resultat ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 10:06

merci pour les balises :oops:

bon en fait j'ai un problème plus haut dans le code vu mes nouveaux tests.

je vais y reflechir....

Eléphant du PHP | 55 Messages

29 mars 2007, 10:08

Vérifie que
$resultat = mysql_query($query1);
est bien susceptible de te renvoyer des résultats (autrement dit si ta requête SQL est bonne).

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 10:20

en fait j'ai fait des essais et j'ai oublié de faire le changement de nom ailleurs.

oulà manifestement j'ai un problème avec mes variables !

j'ai un champs nom et un bouton envoyé

mais dès le départ ma variable $nom n'est pas reconnue


<?
//connexion à la base de données

$connexion=mysql_connect(host,'base','code');
mysql_select_db("formulaire");

if(!$connexion){ 

 Echo'Connection Impossible'; 

 exit(); 
 } else{ 

Echo'Connexion réussie'; 
if($nom!==""){
$requete="INSERT INTO formulaire (nom) VALUES ('$nom');";
mysql_query($requete,$connexion);
echo"transaction ok";}
}  
?>
<html>
<head>
<title>Formulaire de saisie de coordonnées</title>
</head>
<body>

<?
//affichage des noms

$query1="SELECT * FROM formulaire ORDER BY num";
$resultat = mysql_query($query1);
echo"texte avant le if";
if($lig=mysql_fetch_array($resultat))
{
	do
		{//recuperation des données
		$num=$lig{'num'};
		$nom=$lig{'nom'};
		//affichage des données
		echo "$num,$nom";
		echo "il y a des données";
		}
		while($lig=mysql_fetch_array($resultat));
		}else{
		echo"aucune donnée";
		}
		//fermeture de la bse
		mysql_close();
?>
	
<form name="toto" action="<? echo $PHP_SELF;?>" method="post">

	<table width="600" align="center">
    <tr> 
      <td colspan="2" align="center" heigth="25"><div align="left"><font face="arial" size="2">NOM</font> 
        </div></td>
    </tr>
    <tr> 
      <td width="450" height="20"><input type="text" name="nom" size="40" maxlength="40"> 
      </td>
    </tr>
  </table>
	<div align="left">
    <p> 
      <input type="submit" name="toto" value="Envoyer">
      <a href="affichage.php">Afficher la liste</a></p>
    </div>

</form>


</body>

</html>

je pense que je n'ai pas compris comment lui dire que ce qu'il y a à l'interieur de mon champs nom ça doit etre ma variable $nom

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 mars 2007, 10:36

Ta variable $nom est définie à partir de la valeur passée dans ton formulaire. Quand tu ouvres ta page pour la première fois, celle-ci ne peut pas être définie, il te faut donc gérer ce cas :)
$nom = ''; // on défini la variable avec une valeur par défaut

if (isSet($_POST['nom'])) // si jamais on récupère une valeur du formulaire
  $nom = $_POST['nom']; // on l'utilise en écrasant la valeur par défaut
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 10:41

ok merci ! je vais essayer ! :D

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 10:58

bon alors 2 ptits pb (j'ai tout réécris proprement mais bon)

j'ai defini nom mais je ne sais pas où mettre tes 2 autres lignes :?

if (isSet($_POST['nom'])) // si jamais on récupère une valeur du formulaire
$nom = $_POST['nom']; // on l'utilise en écrasant la valeur par défaut

avant mon test ?
if ($nom != "")
et avec mon code il bloque toujours sur mon tableau

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/sites/vhbu/8/84/58696/public/www/exosphp/index.php on line 44
Aucune donnée correspondant à votre recherche !!!

je vous le remet là il est bien propre !

<?

// connection à la base de données

$connexion=mysql_connect("host","base","mdp");

mysql_select_db("formulaire");


//Si nom différent de rien on insert le nom

$nom = ''; // on défini la variable avec une valeur par défaut 

if ($nom != "")
	{
	//insertion dans la table formulaire
	$requete="INSERT INTO formulaire (nom) VALUES ('$nom');";
	
	mysql_query($requete,$connexion);
	}

echo "nom vaut $nom";

?>

<html>
<head>
<title>Formulaire de saisie d'un nom</title>
</head>
<body>

<?


//Affichage de tous les noms triés par num


echo "<table width='600' align='center'>";
 echo "<tr><td colspan='3' align='center'><b><u>Liste des noms</u></b></td></tr>";
 
$query1 = "SELECT * FROM articles_info ORDER BY num";

$mysql_resultat = mysql_query($query1);

if ($lig = mysql_fetch_array($mysql_resultat))
{
	do
		{
		
		//récupération des données
		$num=$lig{'num'};
		$nom=$lig{'nom'};
		
			//affichage des données 
		
		  echo "<tr>";
		    echo "<td width='100'>$num</td>";
		    echo "<td width='300'>$nom</td>";
	
		  echo "</tr>";

		
		}
		
	while ($lig = mysql_fetch_array($mysql_resultat));
		
}
else
{

echo "Aucune donnée correspondant à votre recherche !!!";

}

		echo "</table>";

echo "<hr>";

//fermeture de la base
mysql_close();

?>

<form name="saisie" action="<? echo $PHP_SELF; ?>" method="post">

	<table width="600" align="center">
		
		<tr>
		  <td colspan="2" align="center" heigth="25">
			<font face="arial" size="3">Entrer un nom</font>
		  </td>
		</tr>

		<tr>
		  <td width="450">
			<font face="arial" size="2">Nom</font>
		  </td>
			
		  </td>
		</tr>

		<tr>
		  <td width="450">
			<input type="text" name="nom" size="40" maxlength="40">
			</tr>
		
		<tr>
		  <td colspan="2" align="center">
			<input type="submit" value="Valider la saisie">
		  </td>
		</tr>

	</table>

</form>

</body>

</html>
je suis bien perdue là...

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 11:01

si chu bête je l'ai mis à la suite sinon à cahque fois je lui dit que nom ne vaut rien

//Si nom différent de rien on insert le nom

$nom = ''; // on défini la variable avec une valeur par défaut 
if (isSet($_POST['nom'])) // si jamais on récupère une valeur du formulaire 
$nom = $_POST['nom']; // on l'utilise en écrasant la valeur par défaut 

if ($nom != "")
	{
	//insertion dans la table formulaire

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 mars 2007, 11:07

C'est laquelle, la ligne 44 ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

kkdzil
Invité n'ayant pas de compte PHPfrance

29 mars 2007, 11:15

c'est celle là

if ($lig = mysql_fetch_array($mysql_resultat)) 
bon avant d'afficher je voulais vérifier que j'envoyais bien mes données mais c'est râté il fait une transaction alors que nom =""

j'ai donc supprimé une bonne partie du code !

<?

// connection à la base de données

$connexion=mysql_connect("195.8.66.15","cm148481","83mf7pi1");

mysql_select_db("formulaire");


//Si nom différent de rien on insert le nom

$nom = ''; // on défini la variable avec une valeur par défaut  
if (isSet($_POST['nom'])) // si jamais on récupère une valeur du formulaire  
$nom = $_POST['nom']; // on l'utilise en écrasant la valeur par défaut  

if ($nom != "")
	{
	//insertion dans la table formulaire
	$requete="INSERT INTO formulaire (nom) VALUES ('$nom');";
	
	mysql_query($requete,$connexion);
	
	echo "Insertion dans table ok";
	mysql_close();	
	}
	
	
	
?>

<html>
<head>
<title>Formulaire de saisie d'un nom</title>
</head>
<body>

<form name="saisie" action="<? echo $PHP_SELF; ?>" method="post">

	<table width="600" align="center">
		
		<tr>
		  <td colspan="2" align="center" heigth="25">
			<font face="arial" size="3">Entrer un nom</font>
		  </td>
		</tr>

		<tr>
		  <td width="450">
			<font face="arial" size="2">Nom</font>
		  </td>
			
		  </td>
		</tr>

		<tr>
		  <td width="450">
			<input type="text" name="nom" size="40" maxlength="40">
			</tr>
		
		<tr>
		  <td colspan="2" align="center">
			<input type="submit" value="Valider la saisie">
		  </td>
		</tr>

	</table>

</form>

</body>

</html>
et là il me met direct

Insertion dans table ok alors qu'il n'est pas censé transmettre quelque chose !

j'ai vraiement un pb avec la récupération de mon champs mais je vois pas où...

Mammouth du PHP | 693 Messages

29 mars 2007, 11:22

Sinon, je te conseille quand tu dévellope t on script de mettre à chaque fois que tu fais un requet SQL ca :
$result=mysql_query($requet) or die(mysql_error())
Ca te permettera de voir si ta requet SQL est bonne.

Eléphant du PHP | 170 Messages

29 mars 2007, 11:26

Perso je préfères !empty() à isset() sur des valeurs passées via un formulaire.
Tout dépend évidement de ce qu'on attend dans les champs du formulaire.

isset($_POST['pouet']) est toujours vrai dès que le formulaire est soumis.

Enfin oui, c'est une autre manière de faire.
Attention je n'ai pas dit que !empty() était la panacée et que isset() doit être mis au placard, mais dans une grande majorité des cas, !empty() c'est parfait.
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 mars 2007, 11:26

a quoi sert de faire le IF puis le WHILE ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.