Récup de données dans une table

Bonjour,

Quelqu'un peut-il me dire comment récupérer des valeurs stockées dans une table afin de m'en servir dans des variables : 

  • Après un SELECT...FROM
  • Avec echo ou print_r je visionne  les valeurs
  • Comment me servir des valeurs pour les passant dans une ou des variables. Quelle est la fonction.

Merci d'avance


Windows / Edge 105.0.1343.33

8 réponses

  1. Modérateur

    Bonjour

    Il faudrait que tu montres un minimum ton code pour qu'on puisse t'aider car là ta question est des plus vague...


    0
    1. Merci Jordane. Voici mon bout de script :

      //on scrute la table 
      			$sth=$conn->prepare ("SELECT Nom, Prenom FROM adherents2022");
      			$sth->execute();
      			
      //Je lit les données de la table			
      			
      			$resultat=$sth->fetchALL(PDO::FETCH_ASSOC);	
      
      			echo '<br>';
      			print_r ($resultat);
      			echo '<br>';

      Ce que je ne sais pas faire, c'est de récupérer les éléments de  $résultat pour les travailler dans une variable. Faut-il utiliser RETURN ? Comment ?

      Je commence à peine à m'initier au PHP

      0
      1. Modérateur

        Bonjour,

        Déjà, vu que tu fais du PDO, je t'invite à prendre de bonnes habitudes immédiatement.

        Donc, pense à gérer les éventuelles erreurs dans tes requêtes SQL. Pour ça, applique ce qui est indiqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

        Ensuite, 

        La méthode fetchAll permet de stocker le résultat de ta requête dans un ARRAY

        Il te faut donc apprendre à manipuler les array en php.

        Une boucle FOREACH par exemple ...

        foreach ($resultat as $cle => $valeur ){
          echo "<br>clé du tableau associatif " . $cle ;
          echo "<br>Valeur contenu dans cette ligne : " ;
          print_r($valeur);
        
        }

        Comme tu as choisi le mode FETCHASSOC, tu te retrouves avec un tableau associatif.

        $valeur contiendra une "ligne" de résultat de ta requête SQL.

        Immaginons que ta requête retourne  un PRENOM et un NOM 

        En reprenant mon exemple précédent ( que je t'invite à tester quand même avant celui la... )

        foreach ($resultat as $cle => $valeur ){
        
          echo "<br>clé du tableau associatif " . $cle ;
          echo "<br>Valeur contenu dans cette ligne : " ;
          $prenom = $valeur["prenom"];
          $nom = $valeur["nom"]; 
          echo " PRENOM :" . $prenom. " NOM : " . $nom;
        }

        0
        1. Merci Jordane pour tes précieux conseils.

          Etant en vacances jusqu'à hier, Je réponds un peu tard. Je vais bosser tes scripts. Je te tiens au courant.

          0
          1. Salut à tous,

            Voici un bout de script que j'ai concocté après les conseils de Jordane:

            //on scrute la table adherents2022
            			$sth=$conn->prepare ("SELECT Nom, Prenom FROM adherents2022");
            			$sth->execute();			
            			
            			
            			
            			$resultat=$sth->fetchALL(PDO::FETCH_ASSOC);				
            			
            			foreach ($resultat as $cle => $valeur){
            				echo "<br> clé du tableau associatif = ". $cle;
            				echo "<br> valeur de la ligne :";				
            				$prenom = $valeur["Prenom"];
            				$nom =$valeur["Nom"];
            				}
            			
            				if (($prenom==$Prenom) and ($nom==$Nom)== false){
            				echo "<br> PW non copié dans table adherent2022";}
            				
            				else {
            						echo 'PW = '.$PW;						
            						$sth=$conn->prepare("
            					INSERT INTO adherents2022 (pw)
            					VALUES(:pw)");
            					
            					$sth->bindparam(':pw', $PW);
            					$sth->execute();
            					
            			
            			echo '<br> PW copié dans table adherent2022 <br>';
            			}			
            		
            		try{
            				$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            			}
            			catch(PDOExeption $e){
            				die('Erreur : ' .$e->getMessage());
            			}
            			

            Apparemment, le script fonctionne, puisqu' à la fin j'ai le message "PW copié dans la table adherents2022". En fait, il n'y a pas de copie dans cette table, bien qu'il n'y ait aucune erreur signalée. Je pense que le pb vient de l'INSERT INTO, mais je ne vois pas le bug.

            Merci d'avance pour votre aide

            0
            1. Contributeur

              bonjour,

              Tu n'as pas appliqué les conseils de Jordane concernant la gestion des erreurs.  Pas étonnant, donc, qu'aucune erreur ne soit signalée.

              0
          2. Alors, j'ai appliqué les conseils de Jordane en début de script que je n'ai pas mentionné en page précédente : 

            try{
            				$conn=new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
            				
            				$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            			}
            			catch(PDOExeption $e){
            				die('Erreur : ' .$e->getMessage());
            			}
            				

            Voilà !

            Merci quand même

            0
            1. Contributeur

              As-tu lu la partie concernant "Détecter les erreurs dans les requêtes" ?

              0
          3. Je crois, oui. Mais d'après ta question, il y a quelque chose que je n'ai pas fait !! Je compte sur toi pour me corriger.

            0
            1. Contributeur

              Relis attentivement l'ensemble des conseils de Jordane, et compare avec ce que tu as fait.

              0
            2. Modérateur

              Pour éviter d'y passer trois plombes..

              En gros ..

              A CHAQUE requête, la mettre dans un bloc TRY/CATCH

              comme ceci

              try{
                 $sql = "NSERT INTO adherents2022 (pw) VALUES(:pw)";
                 $sth = $conn->prepare($sql);
                 $sth->bindparam(':pw', $PW);
                 $sth->execute();
              }catch(Exception $e){
                echo "Erreur : " . $e->getMessage();
              }
              0
          4. OK, mais je me noie un peu !

            Je vais reprendre ça à tête reposée.

            Merci

            0