8768 sujets

Développement web côté serveur, CMS

Bonjour, je suis à la recherche du grain de sel .. des cerveaux aimables pour m'aider Smiley lol

J'ai un formulaire qui fonctionne, en ajout/supp/modif de données, tout marche parfaitement mais malgré cela j'ai des warnings

( ! ) Notice: Undefined variable: req in C:\wamp\www\clients.nlh\listing.php on line105

( ! )Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\clients.nlh\listing.php on line 105
, autrement dit la boucle while tout à la fin du code copié ci dessous.

La dernière fois que ça m'a fait ça c'était un pb de requête mais la tout s'inscrit correctement dans la BDD donc je ne comprends pas.

Ci dessous le listing.php :

<section>
  <form action="listing.php?action=rechercheClient" method="post">
    <table class="globalForm">
      <tr>
        <td class="nomChamp">Recherche nom ou prénom</td>
        <td></td>
      </tr>
      <tr>
        <td><input type="text" name="recherche" id="recherche"/></td>
        <td><input class="btnEnvoyer" type="submit" value="Rechercher"/>
      </tr>
    </table>
  </form>
</section>
<section id="listeClient">
  <?php 
	if(!empty($_GET['mess'])){
		if($_GET['mess']=='add') {
			echo'<p class="messageOk">Votre fiche est enregistrée, Merci.</p>';	
		}
		if($_GET['mess']=='upd') {
			echo'<p class="messageOk">Modifications enregistrées, Merci.</p>';	
		}
	}
	?>
  <!-- LINSTING conditions -->
  <?php
  	require_once("libs/connexion.php");
	
	$alphabet = array();
	for($i = 'A'; $i != 'AA'; $i++){
		 $alphabet[] = $i;
	}
	 foreach($alphabet as $list){
		  echo '<a class="alpha" href="listing.php?tri='.$list.'">'.$list.'</a> ';
	 }

	//si aucun GET n'est envoyé, donc qu'aucune recherche n'a été faite : 
  	if(empty($_GET)){ 
		 $sql="SELECT * FROM clientes ORDER BY nom";
         $req=mysqli_query($connexion, $sql);
		 
 
	}else{
	//si une recherche est faite : 	
		if(isset($_GET['action'])){
			if($_GET['action']=='rechercheClient' && empty($_GET['tri'])){ 
					$recherche= mysqli_real_escape_string($connexion, $_POST['recherche']);
					$sql2="SELECT * FROM clientes WHERE nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%' ORDER BY nom";
					$req=mysqli_query($connexion, $sql2);
					$nb_resultats = mysqli_num_rows($req);//fonction qui permet de comptabiliser le nb de resultat de ma requete sql
				
					if($nb_resultats==0){
						echo '<p class="messageError">Votre recherche n\'a rien donné. Veuillez réessayer.</p>';
					}
			}
		}

		//si sélection via pagination alphabetique
		if(isset($_GET['tri']) && in_array($_GET['tri'], $alphabet)){
				   $tri = $_GET['tri'];
				   $sql3= "SELECT * FROM clientes WHERE nom LIKE '$tri%' ORDER BY nom";
				   $req = mysqli_query($connexion, $sql3);
		}
	}
	
	//AFFICHAGE DE LA LISTE DES CLIENTES SELON LES CONDITIONS CI DESSUS : 
		echo '<table>';
		echo "<tr> 
					<th>Nom</th> 
					<th>Prénom</th>
					<th></th>
					<th></th>
					<th></th>
					</tr>";
	
		while($data=mysqli_fetch_assoc($req)){
			  echo '<tr>';
			  echo '<td class="liste">'.$data['nom'].'</td>';
			  echo '<td class="liste">'.$data['prenom'].'</td>';
			  echo '<td class="btn"><a href="fiche.php?nom='.$data['nom'].'&prenom='.$data['prenom'].'&datc='.$data['date_compte'].'&id='.$data['id'].'"><img src="img/voir.png"/></a></td>';
			  echo '<td class="btn"><a href="form.php?action=modifClient&id='.$data['id'].'&nom='.$data['nom'].'&prenom='.$data['prenom'].'&datc='.$data['date_compte'].'"><img src="img/modifier.png"/><a/></td>';
			  echo '<td class="btn"><a onclick="return check();" href="admin/libs/services.php?action=suppClient&id='.$data['id'].'"><img src="img/supprimer.png"/></a></td>';
			  echo '</tr>'; 
		}

et un extrait du fichier de services avec mes fonctions :

	function ajoutClient(){
		global $connexion;
		
	$nom    =  mysqli_real_escape_string($connexion,$_POST['nom']);
    $prenom =  mysqli_real_escape_string($connexion,$_POST['prenom']);
    $jour   = intval($_POST['jour']);
    $mois   =  mysqli_real_escape_string($connexion,$_POST['mois']);
    $tel    =  mysqli_real_escape_string($connexion,$_POST['tel']);
    $mail   =  mysqli_real_escape_string($connexion,$_POST['mail']);
	$date_compte = $_POST['date'];
	$date = $_POST['date'];
	$presta =  mysqli_real_escape_string($connexion,$_POST['presta']);
	$coiffeuse = $_POST['coiffeuse'];

		$sql="INSERT INTO clientes (nom, prenom, jour, mois, tel, mail, date_compte) ";
		$sql .="values('$nom', '$prenom', '$jour', '$mois', '$tel', '$mail', '$date_compte') ";
			mysqli_query($connexion, $sql);

		if($_POST['presta']!= NULL){
			
			$sql2="INSERT INTO presta (id_clientes, date, nom, prenom, coiffeuse, presta) ";
			$sql2 .="values(LAST_INSERT_ID(),'$date', '$nom', '$prenom', '$coiffeuse', '$presta') ";
			mysqli_query($connexion, $sql2);

		}
		header("Location:../../listing.php?mess=add");
		
	} //FIN function ajoutClient 

function modifClient(){
global $connexion;
	$nom    = mysqli_real_escape_string($connexion,$_POST['nom']);
    $prenom = mysqli_real_escape_string($connexion,$_POST['prenom']);
    $jour   = intval($_POST['jour']);
    $mois   = mysqli_real_escape_string($connexion,$_POST['mois']);
    $tel    = mysqli_real_escape_string($connexion,$_POST['tel']);
    $mail   = mysqli_real_escape_string($connexion,$_POST['mail']);
	$date = $_POST['date'];
	$presta = mysqli_real_escape_string($connexion,$_POST['presta']);
	$id_clientes = $_POST['id_clientes'];
	$coiffeuse = $_POST['coiffeuse'];

		$sql="UPDATE clientes SET nom='$nom', prenom='$prenom', jour='$jour', mois='$mois', tel='$tel', mail='$mail' WHERE id=".$_GET['id'] ;	

		mysqli_query($connexion, $sql);
		
		if($_POST['presta']!= NULL){
			$sql2="INSERT INTO presta (date, nom, prenom, coiffeuse, presta, id_clientes) ";
			$sql2 .="values('$date', '$nom', '$prenom', '$coiffeuse','$presta', '$id_clientes') ";
			mysqli_query($connexion, $sql2);
		}else{
			$sql3="UPDATE presta SET nom='$nom', prenom='$prenom' WHERE id_clientes=".$_GET['id'] ;	
			mysqli_query($connexion, $sql3);
			};
		header("Location:../../listing.php?mess=upd");
}


A plusieurs cerveaux nous avons cherché le pourquoi en vain..
La seule solution trouvé est sale: faire des req1 / req2 /req3 et dupliquer la boucle while dans chacune des conditions. Ca marche mais ca ne m'enchante pas de faire comme ça et surtout de ne pas comprendre d'où vient le pb.
Help please !
Bonjour,

Pour le problème suivant :
( ! ) Notice: Undefined variable: req in C:\wamp\www\clients.nlh\listing.php on line105

C'est parce que tu n'initialise pas ta variable $req avant de l'appeler avec
while($data=mysqli_fetch_assoc($req)){

Et l'erreur se situe ici :
	//si aucun GET n'est envoyé, donc qu'aucune recherche n'a été faite : 
  	if(empty($_GET)){ 
		 $sql="SELECT * FROM clientes ORDER BY nom";
         $req=mysqli_query($connexion, $sql);
		 
 
	}else{
	//si une recherche est faite : 	
		if(isset($_GET['action'])){
			if($_GET['action']=='rechercheClient' && empty($_GET['tri'])){ 
					$recherche= mysqli_real_escape_string($connexion, $_POST['recherche']);
					$sql2="SELECT * FROM clientes WHERE nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%' ORDER BY nom";
					$req=mysqli_query($connexion, $sql2);
					$nb_resultats = mysqli_num_rows($req);//fonction qui permet de comptabiliser le nb de resultat de ma requete sql
				
					if($nb_resultats==0){
						echo '<p class="messageError">Votre recherche n\'a rien donné. Veuillez réessayer.</p>';
					}
			}
		}

		//si sélection via pagination alphabetique
		if(isset($_GET['tri']) && in_array($_GET['tri'], $alphabet)){
				   $tri = $_GET['tri'];
				   $sql3= "SELECT * FROM clientes WHERE nom LIKE '$tri%' ORDER BY nom";
				   $req = mysqli_query($connexion, $sql3);
		}
	}

Si tu te trouves dans la condition "else" mais que tu n'es pas dans la condition "if(isset($_GET['action']))" et "if($_GET['action']=='rechercheClient' && empty($_GET['tri']))" et pas dans la condition "if(isset($_GET['tri']) && in_array($_GET['tri'], $alphabet))" alors ta variable $req n'est pas créée. Ce qui déclenche donc ta seconde erreur :
( ! )Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\clients.nlh\listing.php on line 105


À toi de voir ensuite pourquoi tu ne remplie aucune des conditions. Smiley cligne
Modifié par Raphi (12 Jun 2015 - 14:50)
Merci pour votre aide grâce à vos remarques et celles d'autres personnes j'ai effectivement constaté qu'il me manquait une condition pour couvrir toutes les possibilités.

if(isset($_GET['mess'])) dans mon else !

Smiley biggrin Smiley biggrin