IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

SELECT AS qui se révèle être une coquille vide


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 31
    Points : 19
    Points
    19
    Par défaut SELECT AS qui se révèle être une coquille vide
    Bonsoir,

    Je ne suis pas franchement débutant, mais je n'ai pas su où poster.
    Dans une page recherche.php, j'ai écris une requête qui sélectionne des champs sur deux tables. Seuls problèmes, deux champs sont nommés pareils.
    Pour éviter le conflit d'index, j'ai décider d'utiliser le SELECT ... AS ... afin de stocker le champ dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    if(!empty($_GET['envoyer'])){
    	if(isset($_GET['recherche_rapide'])){
    		if(!empty($_GET['recherche_rapide'])){
    			$recherche = mysql_real_escape_string($_GET['recherche_rapide']);
    			$recherche_bdd = mysql_query("SELECT membre.Pseudo_id AS m_pseudo_id, membre.Pseudo, membre.Sexe, membre.Photo_profil, Article.Pseudo_id AS a_pseudo_id, Article.Titre FROM membre,Article WHERE membre.Pseudo LIKE '%$recherche%' OR Article.Titre LIKE '%$recherche%'") or die('Requête pourrie : '.mysql_error());
    			echo "<span class='sous_titre_bleu'>
    				Membre :
    				<br />
    				</span>";
     
    			while($retour_recherche_bdd = mysql_fetch_assoc($recherche_bdd)){
    				sexe($retour_recherche_bdd,$image_sexe);
    				$recherche_article = mysql_query("SELECT Article_id FROM Article WHERE Pseudo_id='".$a_pseudo_id."'");
    				$retour_article = mysql_num_rows($recherche_article);
    				echo "
    					<div style='float:left; width:97%; border-bottom:1px solid #ccc; padding:10px 0 10px 0'>
    						<div style='float:left;'>
    							<img src='photos_membre/".$retour_recherche_bdd['Photo_profil']."' />
    						</div>
    						<div style='margin-left:70px;'>
    							<span style='font-family:Arial;'>Sexe : <img src='".$image_sexe."' /></span>
    							<br />
    							<span style='font-family:Arial;'>Pseudo : </span><b style='font-family:Arial; font-size:13px;'><a href='membre.php?Pseudo=".$m_pseudo_id."'></b>".$retour_recherche_bdd['Pseudo']."</a></b>
    							<br />
    							<span style='font-family:Arial;'>Nombre d'articles publiés :	".$retour_article."</span>							
    						</div>
    						Variable : ".$m_pseudo_id."
    					</div>";
    			}
     
    		}
    		else{
    			echo '<div id="erreur">Le champ recherche doit au moins compter un caractère lors de la recherche.</div>';
    		}	
    	}
    }
    Le code me renvoie les erreurs suivantes :
    • Notice: Undefined variable: a_pseudo_id in /opt/lampp/htdocs/ETM/recherche.php on line 60
    • Notice: Undefined variable: m_pseudo_id in /opt/lampp/htdocs/ETM/recherche.php on line 70
    • Notice: Undefined variable: m_pseudo_id in /opt/lampp/htdocs/ETM/recherche.php on line 74
    J'ai donc décider d'ajouter $a_pseudo_id = ""; et $m_pseudo_id = ""; avant la requête. Pour tester la valeur de mes variables je fais un echo dessus, mais ca ne me retourne rien...

    Quelqu'un aurait une idée ?

    Merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    t'entends quelle sortent d'où ces valeurs la ?

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM membre,Article WHERE ...
    Aucune jointure n'est effectuée sur les 2 tables. Faut faire une jointure.

    Si c'est Pseudo_id qui permet de lier ces 2 tables alors peut être ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT m.Pseudo_id, m.Pseudo, m.Sexe, m.Photo_profil, a.Article_id, a.Titre
    FROM membre m
    JOIN Article a ON m.Pseudo_id = a.Pseudo_id
    WHERE ... etc ...
    A savoir qu'il n'est pas utile de récupérer les champs Pseudo_id au niveau des 2 tables, 1 seul suffit (m.Pseudo_id) car les valeurs seront les mêmes, c'est justement leur équivalence qui permettra de faire la jointure, donc de les récupérer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($retour_recherche_bdd = mysql_fetch_assoc($recherche_bdd)){
                    sexe($retour_recherche_bdd,$image_sexe);
    Concernant les erreur que te retourne Php, ça vient du faite que la fonction mysql_fetch_assoc() ne retourne pas directement des variable, mais un tableau associatif contenant les valeurs des différents champs spécifié dans le SELECT.
    Exemple pour exploiter ce tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while($membre = mysql_fetch_assoc($recherche_bdd)) {
        echo 'Pseudo_id : '.$membre['Pseudo_id'].'<br />';
        echo 'Pseudo : '.$membre['Pseudo'].'<br />';
        echo 'Sexe : '.$membre['Sexe'].'<br />';
    }
    Donc a_pseudo_id et m_pseudo_id dans ton code n'existe pas en tant que variable, mais sont stockés dans le tableau $retour_recherche_bdd['a_pseudo_id'] au même titre que $retour_recherche_bdd['Pseudo'].

    N'oubli pas qu'il y a une doc sur le Net, avec dans la plupart du temps des exemples de code :
    http://fr2.php.net/manual/fr/functio...etch-assoc.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!empty($_GET['envoyer'])){
        if(isset($_GET['recherche_rapide'])){
            if(!empty($_GET['recherche_rapide'])){
    Petite parenthèse concernant ce code.
    Si les 3 conditions, les 3 if sont impératifs pour poursuivre, alors rassemble les en 1 seule, car il y a des ET et des OU -> && ||
    Puis un isset() accepte plusieurs paramètres/valeurs (mais pas empty).
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset($_GET['envoyer'], $_GET['recherche_rapide']) && !empty($_GET['envoyer']) && !empty($_GET['recherche_rapide'])) {
        // Un seul if
    }
    else {
        // Erreur
    }

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Merci pour vos réponses.
    J'ai quelque peut modifier mon code suite à une aide.

    Concernant les SELECT ... AS ... J'ai enfin compris que les valeurs n'étaient pas stockées dans une variable propre, mais dans un tableau indexé.

    Ce qui donne $retour_recherche_bdd['m_pseudo_id'] et $retour_recherche_bdd['a_pseudo_id']
    Là, j'ai bel et bien une valeur qui ressort de ces variables.

    Pour ce qui est des jointures. Ce n'est pas un oubli de ma part, je m'explique.
    Comme vous avez pu le constater, j'ai deux tables : membre et Article. Le code ci-dessus permet le traitement d'une recherche dans ces deux tables.
    Il en ressort tous les membres et articles qui ont quelque chose a voire avec le contenu de sa recherche.
    Ainsi, il se peut que membre.Pseudo_id et Article.Pseudo_id, n'est rien en commun.

    Au sujet de la structure de mon code. J'aurais pu en effet faire plus simple en réunissant toutes les conditions en une seul. Mais comprenez pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php 
    if(!empty($_GET['envoyer'])){
    	if(isset($_GET['recherche_rapide'])){
    		if(!empty($_GET['recherche_rapide'])){
    			$recherche = mysql_real_escape_string($_GET['recherche_rapide']);
    			$recherche_bdd = mysql_query("SELECT membre.Pseudo_id AS m_pseudo_id, membre.Pseudo, membre.Sexe, membre.Photo_profil, Article.Pseudo_id AS a_pseudo_id, Article.Titre FROM membre,Article WHERE membre.Pseudo LIKE '%$recherche%' OR Article.Titre LIKE '%$recherche%'") or die('Requête pourrie : '.mysql_error());
     
    			echo "<span class='sous_titre_bleu'>
    				Membre :
    				<br />
    			</span>";
     
    			while($retour_recherche_bdd = mysql_fetch_assoc($recherche_bdd)){
    				sexe($retour_recherche_bdd,$image_sexe);
    				echo "
    				<div style='float:left; width:97%; border-bottom:1px solid #ccc; padding:10px 0 10px 0'>
    					<div style='float:left;'>
    						<img src='photos_membre/".$retour_recherche_bdd['Photo_profil']."' />
    					</div>
    					<div style='margin-left:70px;'>
    						<span style='font-family:Arial;'>Sexe : <img src='".$image_sexe."' /></span>
    						<br />
    						<span style='font-family:Arial;'>Pseudo : </span><a href='membre.php?Pseudo=".$retour_recherche_bdd['m_pseudo_id']."' style='font-family:Arial; font-size:13px; color:black; text-decoration:none;' ><b>".$retour_recherche_bdd['Pseudo']."</b></a></b>
    						<br />
    						<span style='font-family:Arial;'>Nombre d'articles publiés :	</span>								
    					</div>
    				</div>";
    			}
     
     
    		}
    		else{
    			echo '<div id="erreur">Le champ recherche doit au moins compter un caractère lors de la recherche.</div>';
    		}	
    	}
    	elseif(isset($_GET['recherche_avancee'])){
    		if(!empty($_GET['recherche_avancee'])){
    		 /* TRAITEMENT */
    		}
    		/* switch */ 					
    	}
    }
    else{
    	?>
    	<form id="recherche_avance">
    		<span class="sous_titre_bleu">
    			Recherche avancée : 
    		</span>			
    		<p>
    			Membres : <input type="radio" name="choix_radio" value="membre" onclick='$("#choix_membre").show();' />
    			Articles : <input type="radio" name="choix_radio" value="article" onclick='$("#choix_article").show();' />
     
    			<div id="choix_membre" style="display:none">
    				J'ai choisis membre ! 						
    			</div>
    			<div id="choix_article" style="display:none">
    				J'ai choisis article ! 						
    			</div>		
    		</p>		
    	</form>
    	<?php
    }
    ?>
    En quelques sortes, mon problème est résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un boulot pour cet été qui peut aussi être une sorte de stage
    Par Buebo du chalet dans le forum Stages
    Réponses: 5
    Dernier message: 14/03/2014, 19h25
  2. Erreur : Le champ ne peut pas être une chaîne vide
    Par supertoms dans le forum VBA Access
    Réponses: 5
    Dernier message: 23/04/2008, 07h05
  3. Réponses: 1
    Dernier message: 16/11/2007, 10h28
  4. [MySQL] Récupérer l'ID d'une entrée qui vient d'être créée
    Par yongblood dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/06/2007, 06h14
  5. Réponses: 2
    Dernier message: 05/06/2006, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo