[RESOLU] Pb variable qui ne reçoit rien

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Pb variable qui ne reçoit rien

Re: [RESOLU] Pb variable qui ne reçoit rien

par sadeq » 06 mars 2013, 01:29

Salut, il y a des erreurs logiques dans ton code. Voici la correction:
//ouvre la session
session_start();

//
$cpp="";
        $cpp.="<br><br><div align='center'>";
        if (isset($_SESSION['login']))
        {
                if($varia=="")
                {
                        //connexion a la bdd
                        include ("/admin/connectbase.php");
                        $login=$_SESSION['login'];
                        //authentification de l'utilisateur
                        $result = mysql_query("SELECT type_cpt FROM users WHERE login='".$login."'");
                        //lire le resultat de la requete
                        if ( $result && $row = mysql_fetch_array($result))
                        {
                                //distinguer l'admin ou l'utilisateur avec pouvoir
                                if ( $row['type_cpt'] == 'admin' or $row['type_cpt'] == 'avec_pouvoir' )
                                {
                                        $cpp.="<b>Liste des comptes:$login {$row[type_cpt]}</b><br>
                                        <br>
                                        <table width=\"90%\"border=\"1\">
                                                <tr>
                                                        <td align=\"center\"";
                                                                if ( $row['type_cpt'] == 'admin' )
                                                                {
                                                                        $cpp.="width=\"33%\" ";
                                                                }
                                                                else
                                                                {
                                                                        $cpp.="width=\"50%\" ";
                                                                }
                                                                $cpp.="height=\"20\"><b><u>Login</u></b>
                                                        </td>
                                                        <td align='center' ";
                                                                if ( $row['type_cpt'] == 'admin' )
                                                                {
                                                                        $cpp.="width=\"33%\" ";
                                                                }
                                                                else
                                                                {
                                                                        $cpp.="width=\"50%\" ";
                                                                }
                                                                $cpp.="height=\"20\"><b><u>Type de compte</u></b>
                                                        </td>";
                                                                if ( $row['type_cpt'] == 'admin' )
                                                                {
                                                                        $cpp.="<td align=\"center\" width=\"50%\" height=\"20\"><b><u>Modification/Suppression</u></b></td>";
                                                                }
                                                                $cpp.="</tr>";                                                 
                                                               
                                                                $result1 = mysql_query("SELECT * FROM users");                 
                                                                while ($result1 && $donnees = mysql_fetch_array($result1) )
                                                                {                              
                                                                        $cpp.="<tr>
                                                                                <td align=\"center\" width=\"50%\" height=\"20\">{$donnees[login]}</td>
                                                                                <td align=\"center\" width=\"50%\" height=\"20\">{$donnees[type_cpt]}</td>";
                                                                                if ( $row['type_cpt'] == 'admin' )
                                                                                {
                                                                                        $cpp.=" <td align=\"center\" width=\"50%\" height=\"10\"><b><u>
                                                                                                                <a href=\"?page=list_cpt&dossier=admin&varia=delete&num_log={$donnees[num]}\" title=\"\">
                                                                                                                        <img src=\"images/delete.jpg\" width=\"20\" height=\"20\" alt=\"\" border=\"0\">
                                                                                                                </a>
                                                                                                                <a href=\"?page=list_cpt&dossier=admin&varia=modif&num_log={$donnees[num]}\" title=\"\">
                                                                                                                        <img src=\"images/modif.jpg\" width=\"20\" height=\"20\" alt=\"\" border=\"0\">
                                                                                                                </a>
                                                                                                                </u></b>
                                                                                                        </td>";
                                                                                }
                                                                                $cpp.="</tr>";                                                                         
                                                                }
                                                                if ( $row['type_cpt'] == 'admin' )
                                                                {
                                                                        $cpp.=" <tr><td align=\"center\" width=\"1000%\" height=\"10\" colspan=\"3\">
                                                                                                <a href=\"?page=list_cpt&dossier=admin&varia=ajout\" title=\"\">
                                                                                                        <img src=\"images/add.jpg\" width=\"20\" height=\"20\" alt=\"\" border=\"0\">
                                                                                                </a>
                                                                                        </td></tr>";
                                                                }
                                                                $cpp.="</table>";
                                }
                        }
                }
        }
        $cpp.="</div>";
Les erreurs:
1. session_start() n'existait pas au début (du moins dans le code fourni) elle est obligatoire!
2. $result = mysql_query("SELECT type_cpt FROM users WHERE login='".$login."'"); la variable $login doit être entourée entre quottes ( ' )
3. $cpp.="<b>Liste des comptes:$login $result</b><br> ... L'intégration de variables comme $login doit se faire dans une chaine de caractère mise entre guillemets ( " ) et non entre quottes ( ' )
4. $cpp.="<b>Liste des comptes:$login $result</b><br> ... La variable $result ne peut pas être affichée car c'est une variable ressource résultat d'un recordset SQL (curseur SQL) donc c'est juste un lien qui mène vers un ensemble d'enregistrements résultat de la requête SQL. Peut-être souhaitais-tu afficher le type du compte de l'utilisateur avec son login et dans ce cas il fallait écrire : $cpp.="<b>Liste des comptes:$login {$row[type_cpt]}</b><br> ... où la variable {$row[type_cpt]} est intégrée entre accolades { ... } car c'est un champ de tableau et non une variable simple comme $login.

5. Les autres erreurs sont liées à l'intégration du code HTML dans php et notamment l'usage des guillemets et des quottes. En principe pour les valeurs des attributs des balises HTML il faut utiliser les guillemets et non les quottes comme ici par exemple :
$cpp.=" <td align=\"center\" width=\"50%\" height=\"10\"><b><u>
  <a href=\"?page=list_cpt&dossier=admin&varia=delete&num_log={$donnees[num]}\" title=\"\">

Re: [RESOLU] Pb variable qui ne reçoit rien

par xTG » 04 mars 2013, 20:21

Que te donnes :
var_dump($result);

Re: Pb variable qui ne reçoit rien

par biddal » 04 mars 2013, 16:49

Pour les messages de trace j'en ai mis je les ai juste enlevé pour vous mettre le code! Donc cela provient bien de la ligne que j'ai cité plus haut dans laquelle je n'arrive pas à rentrer alors que le même code fonctionne sur mon autre page!
Et mysql_error(); ne me retourne rien du tout!

Re: Pb variable qui ne reçoit rien

par xTG » 04 mars 2013, 16:42

Jamais dans celui là ou jamais dans le second ? Ou peut être même jamais dans l'un d'avant ?
Un peut de message de trace t'aidera à trouver d'où cela vient.
Et pour debugguer une requête SQL tu peux utiliser la fonction mysql_error() qui te retournera la dernière erreur rencontrée.

Re: Pb variable qui ne reçoit rien

par biddal » 04 mars 2013, 15:23

Merci beaucoup pour ses renseignements!
J'ai un petit souci encore! J'ai utilisé le code que tu as mis plus haut sur une autre page mai sje n'arrive pas à faire ce que je souhaite avec!
Voici le code:
$cpp="";
	$cpp.="<br><br><div align='center'>";
	if (isset($_SESSION['login']))
	{
		if($varia=="")
		{
			//connexion a la bdd
			include ("/admin/connectbase.php");
			$login=$_SESSION['login'];
			//authentification de l'utilisateur
			$result = mysql_query("SELECT type_cpt FROM users WHERE login=".$login."");
			//lire le resultat de la requete
			if ( $result && $row = mysql_fetch_array($result))
			{
				//distinguer l'admin ou l'utilisateur avec pouvoir
				if ( $row['type_cpt'] == 'admin' or $row['type_cpt'] == 'avec_pouvoir' )
				{
					$cpp.='<b>Liste des comptes:$login $result</b><br>
					<br>
					<table width=\'90%\' border=\'1\'>
						<tr>
							<td align=\'center\' ';
								if ( $row['type_cpt'] == 'admin' )
								{
									$cpp.="width=\"33%\" ";
								}
								else
								{
									$cpp.="width=\"50%\" ";
								} 
								$cpp.="height=\"20\"><b><u>Login</u></b>
							</td>
							<td align='center' ";
								if ( $row['type_cpt'] == 'admin' )
								{
									$cpp.="width=\"33%\" ";
								}
								else
								{
									$cpp.="width=\"50%\" ";
								} 
								$cpp.="height=\"20\"><b><u>Type de compte</u></b>
							</td>";
								if ( $row['type_cpt'] == 'admin' )
								{
									$cpp.="<td align='center' width=\"50%\" height=\"20\"><b><u>Modification/Suppression</u></b></td>";
								}
								$cpp.="</tr>";							
								
								$result1 = mysql_query("SELECT * FROM users");			
								while ($donnees = mysql_fetch_array($result1) ) 
								{ 				
									$cpp.="<tr>
										<td align='center' width=\"50%\" height=\"20\">$donnees[login]</td>
										<td align='center' width=\"50%\" height=\"20\">$donnees[type_cpt]</td>";
										if ( $row['type_cpt'] == 'admin' )
										{
											$cpp.="	<td align='center' width=\"50%\" height=\"10\"><b><u>
														<a href=\"?page=list_cpt&dossier=admin&varia=delete&num_log=$donnees[num]\" title=\"\">
															<img src='images/delete.jpg' width='20' height='20' alt='' border='0'>
														</a> 
														<a href=\"?page=list_cpt&dossier=admin&varia=modif&num_log=$donnees[num]\" title=\"\">
															<img src='images/modif.jpg' width='20' height='20' alt='' border='0'>
														</a>
														</u></b>
													</td>";
										}
										$cpp.="</tr>";										
								}
								if ( $row['type_cpt'] == 'admin' )
								{
									$cpp.="	<tr><td align='center' width=\"1000%\" height=\"10\" colspan='3'>
												<a href=\"?page=list_cpt&dossier=admin&varia=ajout\" title=\"\">
													<img src='images/add.jpg' width='20' height='20' alt='' border='0'>
												</a>
											</td></tr>";
								}
								$cpp.="</table>";
				}
			}
		}
	}
	$cpp.="</div>";
Avec ce code je souhaite que certaines données permettant la modif la suppression et l'ajout s'affiche dans un tableau uniquement si c est un admin je dois donc mdifier le tableau en conséquence!
Mais le problème survient ici: if ( $result && $row = mysql_fetch_array($result))
Je ne rentre jamais dans le IF!
Ai je fais une erreur quelque part ou n'ai je pas bien compris ce que tu m'expliquais plus haut!
Merci beaucoup d'avance!

Re: [RESOLU] Pb variable qui ne reçoit rien

par sadeq » 04 mars 2013, 13:07

Cette ligne est obligatoire car elle contient la commande mysql_fetch_array($result) qui lit le résultat de la requête SQL. Sans cette commande tu ne peux pas accéder aux enregistrements retournées par le serveur MySQL suite à ta requête exécutée par mysql_query().

La lecture du résultat se fait comme ça : $row = mysql_fetch_array($result) où $result est la variable ressource résultat de mysql_query()
de ce fait $row est la variable qui contient l'enregistrement courant retourné dans $resultat. $row est donc un tableau (créé par la fonction mysql_fetch_array) qui contient les champs de l'enregistrement courant (champs qui sont mentionnés dans la requête SQL SELECT). Dans ton cas, $row ne contient qu'un seul champ nommé 'type_cpt'.

Donc en général, on écrit comme ça :
// exécution de la requête SQL
$result = mysql_query( 'SELECT x,y,z FROM ....');
// boucle de lecture des enregistrements du résultat
while ( $result && $row = mysql_fetch_array($result) ) 
{
  // ici le code de traitement des champs de l'enregistrement lu : $row['x'], $row['y'] et $row['z'] comme dans le SELECT
}
Remarque, si on sait que la requête SQL ne peut retourner qu'au maximum un enregistrement, alors on peut remplacer le WHILE par un IF. Par contre si le résultat attendu contient plusieurs enregistrements alors le WHILE est obligatoire pour pouvoir lire tous les enregistrements.

Re: Pb variable qui ne reçoit rien

par biddal » 04 mars 2013, 12:22

Ah nikel merci ça fonctionne impec!
Par contre petite question
Je ne comprend pas l'utilité de :
if ( $result && $row = mysql_fetch_array($result))
Que signifie cette ligne en fait le $result et le $row!
Tu assignes le résultat à 2 variables différentes ?
Merci breaucoup de ton aide!

Re: Pb variable qui ne reçoit rien

par sadeq » 04 mars 2013, 11:30

Bonjour,

L'écriture de ce programme est en principe simple il suffit de respecter la syntaxe de PHP quand il s'agit de concaténer du texte avec des variables et aussi choisir une bonne méthode pour intégrer du code HTML dans le code PHP ou inversement.

Voici une proposition d'écriture :
//connexion a la bdd
include ("/admin/connectbase.php");
//authentification de l'utilisateur
$result = mysql_query("SELECT type_cpt FROM users WHERE login = '".$login."'"); 
//lire le resultat de la requete
if ( $result && $row = mysql_fetch_array($result))
{
    //distinguer l'admin ou l'utilisateur avec pouvoir
    $lien_list_cpt = '';
    if ( $row['type_cpt'] == 'admin' or $row['type_cpt'] == 'avec_pouvoir' )
     {
          $lien_list_cpt ='<tr>td colspan="2" class="tabl_accadmin"><a href="?page=list_cpt&dossier=admin" title="">Liste des comptes</a></td></tr>';
     }
    //afficher les infos utilisateur authentifie (avec lien vers liste des compte en cas d'admin ou utilisateur avec pouvoir)
    echo $lien_list_cpt .' '. $login .' - '. $row['type_cpt'];
}
Voila. Je ne sais pas comment tu affiches tes données mais moi j'ai affiché comme ça avec un echo dans mon p'tit exemple. :wink:

Pb variable qui ne reçoit rien

par biddal » 04 mars 2013, 11:03

Bonjour,
Voilà j'ai un petit souci avec une variable qui n'arrive pas à récupérer une valeur d'une requête!
Voici le code en question:
if(isset($test)) { $test==""; } else { $test="rien"; }
					$cpp.="$login $test";
					include ("/admin/connectbase.php");
					$test = mysql_query("SELECT type_cpt FROM users WHERE login=dupont");
					$cpp.="$test";
					if(($test=="admin") or ($test=="avec_pouvoir"))
					{
						$cpp.="<tr>
							<td colspan='2' class='tabl_accadmin'><a href=\"?page=list_cpt&dossier=admin\" title=\"\">Liste des comptes</a></td>
						</tr>$login $test";
					}
					$test=="";
Dupont a été mis à la place de ma variable qui récupère le login normalement je l'ai mis juste pour tester si le problème ne venait pas de là mais ce n'est pas ça!
Ensuite lorsqu j'exécute ma requête sur easyphp elle fonctionne nikel et me renvoie bien la bonne réponse c'est juste au moment d'affecter la réponse à la variable test que ça merdouille!
Pouvez vous m'aider? Merci beaucoup d'avance!
Bonne journée