Décrivez ici votre problème ou ce que vous cherchez à faire.
Bonjour,
Je n'arrive pas à deceler le problème dans ce code.
"Variable non définie". Pourquoi je n'arrive pas à obtenir la valzur de $civilité?
Merci de votre aide

"<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbbase = "Mabase";
$numero = 25;
// La table inscriptions existe bien et les champs civilité, nom, prenom etc... de l'enregistremenr 25 sont bien remplis
$conn = mysqli_connect($dbhost,$dbuser,$dbpass,$dbbase)or die("La Connexion a échouée");

$sql = "SELECT * FROM inscriptions WHERE numero='$numero' "; 
$req = $conn->query($sql);
$req2 = mysqli_fetch_row($req)[0]; //Nbr de rows

if ($req2 == 0){
            echo "<script>attention()</script>";    
        }
    else{
    // Si IL Y A UN ENREGISTREMENT
        while ($data = mysqli_fetch_array($req))
            { 

        $civilite =$data['civilite'];
        $nom =$data['nom'];
        $prenom =$data['prenom'];
        $pseudo =$data['pseudo'];
        $profession =$data['profession'];
        $instrument =$data['instrument'];
        $adresse1 =$data['adresse1'];
        $ville =$data['ville'];
        $zip = $data['zip'];
        $mail1 =$data['mail1'];
        $phone1=$data['phone1'];
            }
        }

    mysqli_close($conn); 

echo $civilite; //ERREUR: Variable indefinie
?>
 "

Ce que je veux

Ja valeur de $civilite et des autres variables

Ce que j'obtiens

Variables non définies

5 réponses


Salut,

Essaye de vérifier si tu rentre bel et bien dans le while, car si $civilite est indéfinie il ne rentre pas dedans à mon avis ou bien un problème avec ta requête (le mysqlli_fetch_array($req) qui peut-être ne renvois rien...),
essaye de tenter un var_dump de $req et $req2 pour voir ce que ça te renvois pour être sûr..

C'est quoi le but de ton code?

ciginfo
Auteur

Merci pour cette réponse. En fait je modifie mon code qui fonctionnait bien en PhP 5 pour passage en PhP 7.Cette partie de code recupère les données des champs d'un enregistrement pointé patr le champs numero dans une BDD puis doit les afficher. Le code ci dessous etait le code qui fonctionnait bien sous Php5 mais qui ne passe pas sous PhP7, j'essaye donc de le modifier pour passer à PhP7
"<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbbase = "Mabase";
$numero = 25;

@mysql_connect($dbhost,$dbuser,$dbpass) or die("La Connexion a échouée"); @mysql_select_db($dbbase) or die("La Base $dbbase n'existe pas");

$sql = "SELECT * FROM inscriptions WHERE numero='$numero' ";
// On verifie que login et password1 existent bien
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$req2 = mysql_num_rows($req); //Nbr enregistrements
if ($req2 == 0){
// Va à cette adresse
echo "<script>attention()</script>";
}
else{
// Si IL Y A UN ENREGISTREMENT
while($data = mysql_fetch_assoc($req))
{
$numero=$data['numero'];
$titre=$data['titre'];
$date_inscription =$data['date_du_jour'];
$date_inscriptionFr = date("d/m/Y", strtotime($date_inscription)); //Affiche au format Français
$date_inscriptionFr_bis = date("Y/m/d", strtotime($date_inscription)); //Affiche au format Français
$date_soiree =$data['date_soiree'];
$date_annee = date("Y", strtotime($date_soiree));
$date_soireeFr = date("d/m/Y", strtotime($date_soiree)); //Affiche au format Français
$civilite =$data['civilite'];
$nom =$data['nom'];
$prenom =$data['prenom'];
$pseudo =$data['pseudo'];
$profession =$data['profession'];
$instrument =$data['instrument'];
$adresse1 =$data['adresse1'];
$ville =$data['ville'];
$zip = $data['zip'];
$mail1 =$data['mail1'];
$phone1=$data['phone1'];
}
}
mysql_close();

echo $civilite;
echo $nom ;
echo $prenom;
echo $profession;
// ETC....
?> "

Je ne suis pas sur du code car je n'utilise pas mysqli en générale mais voici comment j'aurai fais :

<?php

const DB_HOST = 'localhost';
const DB_USER = 'root';
const DB_PASS = 'root';
const DB_NAME = 'la-bdd';

$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$numero = 25;

// Il faut éviter de mettre un select * et privilégier
// mettre tous les champs *nécessaire*
$request = $db->prepare('select * from inscriptions where numero = ?');
$request->bind_param('i', $numero);
$request->execute();

$results = $request->get_result();
$user = $results->fetch_assoc();
$results->close();

if ($user) {
    // user n'est pas false ou null 
    echo $user['nom'];
} else {
    header('Location: /script_vers_ou_rediriger', true, 301);
    exit();
}

Après faut voir en fonction du code legacy que tu as déjà. Je me demande même si en fonction de la taille du projet, le mieux ne serait pas de refaire avec les bonnes techniques et du php 8.1 beaucoup plus à jour.

Je crois que le problème viens du contenu de ta variable $sql, je crois que tu dois retirer les côtes sur la variable $numero de ta requête sql car elle est deja dans les doubles elle sera donc par conséquent directement interprétée. Si ça ne résoud pas ton problème, essaie de dumper le résultat de la fonction mysqli_fetch_array.

ciginfo
Auteur

Merci pour toutes vos réponses qui ont été les bienvenues.
En fait si je remplace" $req2 = mysqli_fetch_row($req)[0];" par "$req2 = mysqli_num_rows($req);" tout fonctionne maintenant. Je pense que je vais m'en tenir là.
En tous cas, merci à tous