[RESOLU] function de recherche dans SQL

Eléphant du PHP | 111 Messages

03 avr. 2021, 19:00

Bonjour,

j'ai une erreur en ligne 12
Notice: Undefined variable: pdo in /home/lesfigueci/www/P2/connexion.php on line 12

Fatal error: Uncaught Error: Call to a member function prepare() on null in /home/lesfigueci/www/P2/connexion.php:12 Stack trace: #0 /home/lesfigueci/www/P2/connexion.php(40): chercheEmail('*******@gmail.c...') #1 {main} thrown in /home/lesfigueci/www/P2/connexion.php on line 12

Alors que si je met en commentaire // chercheEmail($mail);
et que j'enleve les comentaires sur mon query et mon try cela fonctionne sauriez vous me dire pourquoi ?
require('_connexion_pdo.php');

function chercheEmail($mail){
	$query = 'SELECT * FROM membres where email = "'.$mail.'" ;'; 
		try {
			$bdd_select = $pdo->prepare($query);
			$bdd_select->execute();
			$NbreData = $bdd_select->rowCount();    // nombre d'enregistrements (lignes)
			$rowAll = $bdd_select->fetchAll();      // tout dans le meme tableau
		} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
		
	return ($rowAll);
}



if (isset($_POST['mail']))
   $mail = htmlspecialchars($_POST['mail']);
if (isset($_POST['mdp'])){
	$mdp = htmlspecialchars($_POST['mdp']);
	$mdp = hash('sha256',$_POST['mdp']);}
if (isset($_POST['mail'],$_POST['mdp'])){
	/*
$query = 'SELECT * FROM membres where email = "'.$mail.'" ;'; 

  try {
    $bdd_select = $pdo->prepare($query);
    $bdd_select->execute();
    $NbreData = $bdd_select->rowCount();    // nombre d'enregistrements (lignes)
    $rowAll = $bdd_select->fetchAll();      // tout dans le meme tableau

  } catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
*/
	chercheEmail($mail);

Mammouth du PHP | 2703 Messages

03 avr. 2021, 19:22

la raison est donnée : "Notice: Undefined variable: pdo in /home/lesfigueci/www/P2/connexion.php on line 12"
https://www.php.net/manual/fr/language. ... .scope.php

Eléphant du PHP | 111 Messages

03 avr. 2021, 20:39

Oui d'accord j'accepte que le require de ma connexion PDO doit etre dans la fonction cela ne me dérange pas outre
mesure, mais bon ... elle est quand même lancée avant donc j'aurai cru que ... mais non d'accord

J'ai une fois le require intégrée dans la fonction
une autre erreur sur mon print_t $rowAll qui est une variable non connue à priori

Notice: Undefined variable: rowAll in /home/lesfigueci/www/P2/connexion.php on line 42

et là la variable est connue vu que c'est la valeur de retour de ma fonction non ?
<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);

require('membre.php');


function chercheEmail($mail){
	require('_connexion_pdo.php');
	$query = 'SELECT * FROM membres where email = "'.$mail.'" ;'; 
		try {
			$bdd_select = $pdo->prepare($query);
			$bdd_select->execute();
			$NbreData = $bdd_select->rowCount();    // nombre d'enregistrements (lignes)
			$rowAll = $bdd_select->fetchAll();      // tout dans le meme tableau
		} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
	return ($rowAll);
}
if (isset($_POST['mail']))
   $mail = htmlspecialchars($_POST['mail']);
if (isset($_POST['mdp'])){
	$mdp = htmlspecialchars($_POST['mdp']);
	$mdp = hash('sha256',$_POST['mdp']);}
if (isset($_POST['mail'],$_POST['mdp'])){
	chercheEmail($mail);
	print_r($rowAll);
}

Eléphant du PHP | 111 Messages

03 avr. 2021, 20:42

Ok Ok je n'ai rien dit

$rowAll=chercheEmail($mail);
print_r($rowAll);

Avatar du membre
Mammouth du PHP | 1609 Messages

06 avr. 2021, 11:23

Salut, tu n'as pas besoin de mettre le require dans la fonction, il suffit d'utiliser le mot clé global en déclarant la variable $pdo comme global au début de la fonction, ainsi php sait qu'il doit aller chercher la variable dans le scope global.
function chercheEmail($mail) {
    global $pdo;
https://www.php.net/manual/fr/language. ... .scope.php
Le require doit bien sur être présent dans la page dans le scope global.
Développeur web depuis + de 20 ans