Récup de données dans une table

Fermé
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 - 12 sept. 2022 à 13:02
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 - 21 sept. 2022 à 10:37

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

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 sept. 2022 à 13:06

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

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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 13 sept. 2022 à 09:37

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
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 2
17 sept. 2022 à 07:54

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 2
21 sept. 2022 à 09:18

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
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 sept. 2022 à 09:38

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
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 2
21 sept. 2022 à 10:12

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
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 sept. 2022 à 10:16

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

0
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 2
21 sept. 2022 à 10:22

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
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 sept. 2022 à 10:27

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

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
21 sept. 2022 à 10:34

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
MARTEGAL Messages postés 34 Date d'inscription dimanche 11 mai 2014 Statut Membre Dernière intervention 21 septembre 2022 2
21 sept. 2022 à 10:37

OK, mais je me noie un peu !

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

Merci

0