Partage
  • Partager sur Facebook
  • Partager sur Twitter

exploiter une table par un formulaire client

Sujet résolu
    11 septembre 2010 à 16:58:55

    Bonjour d’abord merci pour le site du ZERO où je vais chercher des réponses et des cours.
    Maintenant voilà des jours que je galère sur un script que j’ai pompé mais comprends à peu près.

    Ma table « dormir » a 40 enregistrements d’hébergements pour les gens de la rue
    Chaque hébergement est soit un foyer, soit une chambre, soit un logement
    Chaque hébergement accepte ou non les hommes, les femmes, les couples, les enfants, les animaux.
    J’ai donc une table qui a pour champs
    id, homme ,femme, couple, animaux, enfants, foyer, chambre, logement, nom, adresse, contact, beneficiaires, heuresdouverture, gestionnaire.
    Si un hébergement accepte les animaux je mets 1 dans le champ.
    Si un hébergement est un foyer je mets 1 dans le champ Etc…

    La connexion à la base se fait ainsi
    <?php
    # FileName="Connection_php_mysql.htm"
    # Type="MYSQL"
    # HTTP="true"
    $hostname_fds = "";
    $database_fds = "";
    $username_fds = "";
    $password_fds = "";
    $fds = mysql_pconnect($hostname_fds, $username_fds, $password_fds) or trigger_error(mysql_error(),E_USER_ERROR); 
    ?>
    


    J’ai un formulaire client qui interroge le table « dormir » et pour répondre quels hébergements correspondent au formulaire

    je fais le script de la requête :

    <?php
    
    if (isset ($_POST['homme'] )) {
        $critere[] = "situation = 1"; 
    }
    elseif (isset ($_POST['femme'] )) {
        $critere[] = "situation = 1"; 
    }
    elseif(isset ($_POST['couple'] )) {
        $critere[] = "situation = 1";  
    }
     elseif (isset ($_POST['animaux'] )) {
    	$critere[] = "situation = 1";
    }
    elseif (isset ($_POST['enfants'] )) {
    	$critere[] = "situation = 1";
    }
    elseif(isset ($_POST['foyer'] )) {
        $critere[] = "situation = 1"; 
    }
    elseif (isset ($_POST['chambre'] )) {
        $critere[] = "situation = 1"; 
    }
    elseif(isset ($_POST['logement'] )) {
        $critere[] = "situation = 1"; 
    }
    
    $sql = 'SELECT * FROM dormir';
     
     if (isset($critere)) {
      $sql .= " WHERE " . implode(" AND ", $critere);
    }
     
    $fds ->query($sql);
     
    {
     
    echo '<p></p>'; ?>
          
    <a class ="palatino16blanc" ><?php echo ($sql['nom']).'<br />'; ?></a></a>
    
    <a class ="palatino14gris" >
    <?php  echo  nl2br ($sql['adresse']).'<br />' ;?></a> 
    
    <a class ="palatino14grisitalic" >
    <?php	  echo '________________________________';
    }	
    ?></a>
    


    J’obtiens

    Fatal error: Call to a member function on a non-object
    pour

    $fds->query($sql);
    


    Qui pourrait me dire d’où vient cette erreur ? et m’aider à corriger mon script.
    Merci d’avance.

    Pour visualiser ce que je raconte : leroymichel.com/fds/seloger.ph
    • Partager sur Facebook
    • Partager sur Twitter
      11 septembre 2010 à 17:29:32

      Ben elle $fds est un identifiant de connexion, pas un objet. Donc faut utiliser mysql_query().
      • Partager sur Facebook
      • Partager sur Twitter
        11 septembre 2010 à 20:23:15

        merci rotoclap
        je suis paumé, tu peux m'en dire un peu plus
        qu'est-ce que je fais avec mysql_query
        • Partager sur Facebook
        • Partager sur Twitter
          11 septembre 2010 à 20:49:42

          Ben au lieu de faire ça : $fds ->query($sql);
          Tu fais ça : $result = mysql_query($sql, $fds);

          La fonction te renverra des lignes que tu pourras ensuite faire défiler avec la fonction mysql_fetch_*() que tu préfères. Regarde quand même dans la doc l'ordre des paramètres de mysql_query parce que l'identifiant de connexion est facultatif, donc pas sûr de l'ordre (moi je le mets jamais).
          • Partager sur Facebook
          • Partager sur Twitter
            11 septembre 2010 à 21:38:41

            merci pour ton aide rotoclap
            j'ai fait ça, mais la colonne réponses est vide ?
            <?php
            
            $sql = 'SELECT * FROM dormir';
             
            if (isset($critere)) {
              $sql .= " WHERE " . implode(" AND ", $critere);
            }
              
              $result = mysql_query($sql);
              while ($donnees= mysql_fetch_*($result))
            {
            echo '<p></p>'; ?>
            <a class ="palatino16blanc" ><a href="/fds/scriptselogerdetails.php"><?php echo $donnees['nom'].'<br />'; ?></a></a>
             
            <a class ="palatino14gris" >
            <?php  echo $donnees['adresse'] .'<br />' ;?></a> 
             
            <a class ="palatino14grisitalic" >
            <?php	  echo '________________________________';
            }	
            ?></a>
            <?php
            // on ferme la requête (chaque requête doit être fermée)
            mysql_free_result($result);
            ?>
            
            • Partager sur Facebook
            • Partager sur Twitter
              11 septembre 2010 à 23:49:32

              Non mais quand j'ai écrit mysql_fetch_*() c'est parce que y'en a plusieurs, faut pas retaper tel quel. Mets mysql_fetch_array(), ça correspondra avec la suite déjà.
              • Partager sur Facebook
              • Partager sur Twitter
                2 octobre 2010 à 11:18:19

                Merci pour tes réponses qui me font progresser.
                J'en suis là pour l'instant:
                en faisant ça j'obtiens :

                Erreur SQL !
                WHERE
                You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE' at line 1

                Peux-tu m'aider à corriger ce code . J'ai essayé Where mais sans résultats.

                <?php
                
                if (isset ($_POST['homme'] )) {
                    $critere = " situation = 1"; 
                    
                }
                if (isset ($_POST['femme'] )) {
                    $critere ="situation = 1"; 
                    
                }
                if(isset ($_POST['couple'] )) {
                    $critere = "situation = 1";  
                    
                }
                if (isset ($_POST['animaux'] )) {
                    $critere = "situation = 1";
                    
                }
                if (isset ($_POST['enfants'] )) {
                    $critere = "situation = 1";
                    
                }
                if(isset ($_POST['foyer'] )) {
                    $critere ="situation = 1"; 
                    
                }
                if (isset ($_POST['chambre'] )) {
                    $critere = "situation = 1"; 
                    
                }
                if(isset ($_POST['logement'] )) {
                    $critere = "situation = 1"; 
                    
                }
                $sql = 'SELECT * FROM dormir';
                
                
                if (isset($critere)) {
                 $sql = " WHERE " . implode(" AND ", $critere);  
                 
                }
                 $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
                 
                     
                        
                         //boucle
                        while ($row_Rsselogerreponses = mysql_fetch_array($req))
                    
                ?>
                
                • Partager sur Facebook
                • Partager sur Twitter
                  2 octobre 2010 à 19:03:40

                  implode sert à rien ici. Il suffit de faire une concaténation "WHERE ".$critere
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 octobre 2010 à 21:45:54

                    Avec ce code que j'ai un peu corrigé, j'obtiens le message
                    Erreur SQL !
                    SELECT * FROM dormir WHERE Array
                    Unknown column 'Array' in 'where clause'

                    help! qu'est-ce que je dois rajouter dans $critere ?

                    <div id= "colonnereponse">
                        <?php
                     
                    
                    if (isset ($_POST['homme'] )) {
                        $critere [] = " homme = 1"; 
                        
                    }
                    if (isset ($_POST['femme'] )) {
                        $critere[] ="femme = 1"; 
                        
                    }
                    if(isset ($_POST['couple'] )) {
                        $critere []= "couple = 1";  
                        
                    }
                    if (isset ($_POST['animaux'] )) {
                        $critere[] = "animaux = 1";
                        
                    }
                    if (isset ($_POST['enfants'] )) {
                        $critere []= "enfants = 1";
                        
                    }
                    if(isset ($_POST['foyer'] )) {
                        $critere []="foyer = 1"; 
                        
                    }
                    if (isset ($_POST['chambre'] )) {
                        $critere[] = "chambre = 1"; 
                        
                    }
                    if(isset ($_POST['logement'] )) {
                        $critere[] = "logement = 1"; 
                        
                    }
                    $sql = 'SELECT * FROM dormir';
                    
                    
                    if (isset($critere)) {
                     $sql.= " WHERE " .($critere);  
                     
                    }
                     $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
                     
                          //on organise $req en tableau associatif  $data['champ']
                            //en scannant chaque enregistrement récupéré
                            //on en profite pour gérer l'affichage
                            
                             //boucle
                            while ($row_Rsselogerreponses = mysql_fetch_array($req))
                        
                    ?>
                    
                    <?php echo '<p></p>'; ?>
                        
                       <?php do { ?>
                           <a class ="palatino16blanc" ><a href="selogerreponsesancienagarder.php?id= <?php echo $row_Rsselogerreponses['id']; ?>">
                         <?php echo $row_Rsselogerreponses['nom']. '<br />'; ?></a></a>
                           
                          <a class ="palatino14gris" > <?php echo $row_Rsselogerreponses['adresse'].'<br />' ;?></a> 
                           
                          <a class ="palatino14grisitalic" >   <?php echo '________________________________ '?></a>
                          <?php echo " ",'<br />'; ?> 
                          <?php } while ($row_Rsselogerreponses = mysql_fetch_assoc($Rsselogerreponses)); ?>
                    
                     </div>
                      
                      
                      <div id="colonnereponsedetailleetitre"></div>
                    <div class="palatino14gris" id="colonnereponsedetaillee">
                    <?php echo '<p></p>'; ?>
                    <span class="palatino16blanc"><?php echo $row_Rsreponsedetails['nom']. '<br />'; ?></span> 
                    <?php echo $row_Rsreponsedetails['adresse']. '<br />'; ?> 
                    <?php echo $row_Rsreponsedetails['contact']. '<br />'; ?>
                    <?php echo '<p>    </p> ';?>
                     Bénéficiaires : <?php echo $row_Rsreponsedetails['beneficiaires']. '<br />'; ?>
                     Heures d'ouverture : <?php echo $row_Rsreponsedetails['heuresdouverture']. '<br />'; ?>
                     <?php echo '<p></p>'; ?>
                     Plan : <?php echo '<p></p>'; ?> <?php echo $row_Rsreponsedetails['map']. '<br />'; ?>
                     <?php echo '<p></p>'; ?><?php echo $row_Rsreponsedetails['photomap']; ?>
                     
                      </div>
                    
                    </div>
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 octobre 2010 à 23:33:33

                      Ah ben oui là forcément $critere est un tableau maintenant, donc forcément ça marche pas.

                      Essaie plutot dans cet ordre là :

                      $sql = 'SELECT * FROM dormir WHERE 1=1 ';
                      
                      if (isset ($_POST['homme'] )) {
                          $sql .= " AND homme = 1 "; 
                          
                      }
                      if (isset ($_POST['femme'] )) {
                          $sql .= " AND femme = 1 "; 
                          
                      }
                      if(isset ($_POST['couple'] )) {
                          $sql .= " AND couple = 1 ";  
                          
                      }
                      if (isset ($_POST['animaux'] )) {
                          $sql .= " AND animaux = 1 ";
                          
                      }
                      if (isset ($_POST['enfants'] )) {
                          $sql .= " AND enfants = 1 ";
                          
                      }
                      if(isset ($_POST['foyer'] )) {
                          $sql .= " AND foyer = 1 "; 
                          
                      }
                      if (isset ($_POST['chambre'] )) {
                          $sql .= " AND chambre = 1 "; 
                          
                      }
                      if(isset ($_POST['logement'] )) {
                          $sql .= " AND logement = 1 "; 
                          
                      }
                      


                      Ensuite t'envoies ton mysql_query()
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 octobre 2010 à 9:10:58

                        SUPER! MERCI... MERCI...ET ENCORE MERCI! TON CODE fait correctement le tri

                        Maintenant un dernier petit souci : dans la page réponse, quand clique sur le nom d'un hébergement obtenu par la sélection, j'obtiens bien les détails mais en même temps la colonne des hébergements sélectionnés réaffiche tous les enregistrements.
                        Comment puis-je éviter ça?

                        Dernier point:
                        Comment afficher directement les détails du premier enregistrement sélectionné pour ne pas voir la colonne détails avec seulement les mots "bénéficiaires:" ou "plan: "

                        ENCORE MERCI

                        <div id="colonnereponsetitre"></div>
                         
                        <div class="palatino14gris" id= "colonnereponse">
                            <?php
                         
                         
                        $sql = 'SELECT * FROM dormir WHERE 1=1 ';
                         
                        if (isset ($_POST['homme'] )) {
                            $sql .= " AND homme = 1 "; 
                            
                        }
                        if (isset ($_POST['femme'] )) {
                            $sql .= " AND femme = 1 "; 
                            
                        }
                        if(isset ($_POST['couple'] )) {
                            $sql .= " AND couple = 1 ";  
                            
                        }
                        if (isset ($_POST['animaux'] )) {
                            $sql .= " AND animaux = 1 ";
                            
                        }
                        if (isset ($_POST['enfants'] )) {
                            $sql .= " AND enfants = 1 ";
                            
                        }
                        if(isset ($_POST['foyer'] )) {
                            $sql .= " AND foyer = 1 "; 
                            
                        }
                        if (isset ($_POST['chambre'] )) {
                            $sql .= " AND chambre = 1 "; 
                            
                        }
                        if(isset ($_POST['logement'] )) {
                            $sql .= " AND logement = 1 "; 
                            
                        }
                         
                        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
                         
                              //on organise $req en tableau associatif  $data['champ']
                                //en scannant chaque enregistrement récupéré
                                //on en profite pour gérer l'affichage
                        		
                        		  //boucle
                                while ($row_Rsselogerreponses = mysql_fetch_array($req))
                        		
                        	
                           {        
                                  // on affiche les résultats 
                        			
                         echo '<p></p>'; ?>
                          <a class ="palatino16blanc"><a href="selogerreponsesancienagarder.php?id=<?php echo $row_Rsselogerreponses['id']; ?>"><?php echo $row_Rsselogerreponses['nom']. '<br />'; ?></a></a> 
                          <a class ="palatino14gris" ><?php echo $row_Rsselogerreponses['adresse'].'<br />' ;?></a>
                          <a class ="palatino14grisitalic" > <?php echo '________________________________ '?></a> 
                          <?php echo " ",'<br />';}?></div>
                          
                          
                         
                        <div id="colonnereponsedetailleetitre"></div>
                        <div class="palatino14gris" id="colonnereponsedetaillee">
                        <?php echo 
                        '<p></p>',
                        $row_Rsreponsedetails['nom'].'<br />', 
                        $row_Rsreponsedetails['adresse']. '<br />',
                        $row_Rsreponsedetails['contact']. '<br />',
                        '<p></p>',
                        "Bénéficiaires : ",$row_Rsreponsedetails['beneficiaires'].'<br />',
                        "Heures d'ouverture : ",$row_Rsreponsedetails['heuresdouverture'].'<br />',
                        '<p></p>',
                        "Plan :", '<br />',
                        $row_Rsreponsedetails['map'].'<br />' ; ?>
                         
                          </div>
                         
                        </div>
                         
                        <?php mysql_free_result ($req);  
                                                        
                                //On ferme sql
                                mysql_close ();  ?>
                        <?php
                        mysql_free_result($Rsselogerreponses);
                         
                        mysql_free_result($Rsreponsedetails);
                        ?>
                         
                         
                          
                          
                          <code type="php">
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 octobre 2010 à 22:34:28

                          HELP! HELP! HHHHEEEEELLLLLP! HHHHHHHHHHHHHHHHHHHEEEEEEEEEEEEEEEEEEEEELLLLLLLLLLLLLLLLP!

                          Maintenant un dernier petit souci : dans la page réponse, quand clique sur le nom d'un hébergement obtenu par la sélection, j'obtiens bien les détails mais en même temps la colonne des hébergements sélectionnés réaffiche tous les enregistrements.
                          Comment puis-je éviter ça?

                          Dernier point:
                          Comment afficher directement les détails du premier enregistrement sélectionné pour ne pas voir la colonne détails avec seulement les mots "bénéficiaires:" ou "plan: "

                          ENCORE MERCI MERCI MERCI MERCI MERCI :)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          exploiter une table par un formulaire client

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown