Requête Mysqli

maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   -  
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   -
Bjr,

une âme charitable voudrait-elle bien me dire ce qui cloche dans ma requete au niveau du message d'erreur ?
J'essaie de passer à Mysqli.

$sql = mysqli_query($bdd, "SELECT anonyme_id FROM eg_anonyme WHERE email='$email'");

$req = mysqli_query("$sql") or die ('Erreur '.$sql.' '.mysqli_error());



Messager derreur




Merci à tous.

Cdlt

9 réponses

DelNC Messages postés 2234 Date d'inscription   Statut Membre Dernière intervention   2 004
 
Bonjour,

le message indique qu'à la ligne 217 de la page verification.php vous avez un élément qui ne peut pas être du type string.

Pour pouvoir vous en dire plus, il faut le code de la page.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Voici la ligne 217 :

Pour la ligne 217 :
$req = mysqli_query("$sql") or die ('Erreur '.$sql.' '.mysqli_error());

avec les guillemets j'ai un message d'erreur, sans j'en ai 2...
0
DelNC Messages postés 2234 Date d'inscription   Statut Membre Dernière intervention   2 004
 
Je ne comprends pas votre code.

Si vous voulez faire un select, voilà un exemple
$query      = "SELECT ventes.num_travail, clients.nom_client, ventes.date_vente, ventes.observation_ventes ";
$query .= "FROM clients, articles ";
$query .= "WHERE ventes.id_client = clients.id_client ";
$query .= "AND clients.nom_client = '$nom_client' ";
$query .= ";
$result = execute_query($query);
display_table_achats_ ($result);



Donnez moi le code de votre requête, le problème peut venir de là.
0
Firoxyd Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   45
 
Bonjour,

Pourquoi faite vous d'exécuter deux fois la requête ? Il ne faut qu'un seul mysqli_query.
0
Utilisateur anonyme
 
Ouais, Firoxyd a raison! =#
La requête à la ligne 1 me semble fonctionelle, c'est la seconde qui renvoie l'erreur. Maintenant, si tu fusionnais les deux ensemble, comme ceci?

//Lorsque tu travailles avec mysqli_query, tu dois lui fournir deux paramètres, soit la connection à la bdd, et la requête.
$req = mysqli_query($bdd, "SELECT anonyme_id FROM eg_anonyme WHERE email='$email'") or die ('Erreur '.$sql.' '.mysqli_error()); 
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci à tous,
mais je ne m'en sors pas.

J'ai un script qui fonctionnait bien en MySql et je souhaite le transformer pour mySqli

if(isset($_POST['action'])) $action=$_POST['action'];
    else $action="";
     
    if(isset($_POST['genre'])) $genre=$_POST['genre'];
    else $genre="";
    
    if(isset($_POST['age'])) $age=$_POST['age'];
    else $age="";
    
    if(isset($_POST['ville_id'])) $ville_id=$_POST['ville_id'];
    else $ville_id="";

    if(isset($_POST['distribution'])) $distribution=$_POST['distribution'];
    else $distribution="";
     
    if(isset($_POST['periode'])) $periode=$_POST['periode'];
    else $periode="";
     
    if(isset($_POST['email'])) $email=$_POST['email'];
    else $email="";
     
     
    // On vérifie si les champs sont vides
    if(empty($ville_id) OR ($age))
    	{
    		echo '<font color="red">Attention, les champs avec un "*" doivent être remplis !</font>';
    	}
    
    else
    
   		{
     
    		// on regarde si l'url existe déjà
    		
    		
    		
    		
    		$req = mysqli_query($bdd, "SELECT anonyme_id FROM eg_anonyme WHERE email='$email'") 
    		or die ('Erreur '.$sql.' '.mysqli_error()); 		
				
				$res = mysql_num_rows($eq);			
    		
  		
     
    		if($res!=1)	
      	
    			{
        		echo '<font color="green">Un mail, vient de vous être envoyé, pour la confirmation de votre adresse mail.</p>';
   				}
   				
   				else
   				
    			{ // l'url existe déjà, on affiche un message d'erreur
       			echo '<font color="red">Attention, cet <b>email</b> existe déjà dans notre base !</font>';
      			}   	  	
 ?>

</body>
	<br />
	<br />
	
 <?php   
    //envoi du mail
    // message
     $message ="<html>
     <head>
     <p><img src='http://www.xxx/images/EnTeteCourrier.jpg' />
	 </head>
     <body>
       
       <p>Bonjour,</p>
       
  <table>

       <tr>

         <td>Nous vous remercions de votre inscription pour agir.</td>
       
       <br/>

       </tr>

       <td>Pour confirmer l'inscription<a href='http://www.xxxx.net/lorganisation/inscriptions/validation_add.php?Action=$action&Genre=$genre&Age=$age&Ville=$ville_id&Distribution=$distribution&Periode=$periode&EMail=$email'>
		   veuillez cliquer sur ce lien </a> s'il vous plait.</td>
 
       </tr>

       <tr>

       
       <td>Bien cordialement.</td>

       </tr>


       <tr>

         <td>www.xxxx.com</td>
         
       </tr>

       </table>	<br/>
     
       <p> </p>

      </body>
     </html>";   
   
     $headers = 'From: accueil@xxxx.com' . "\r\n" .
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";     'Reply-To: accueil@xxxx.com' . "\r\n" .
     'X-Mailer: PHP/' . phpversion();
     
     mail($email, 'validation inscription', $message, $headers);

	}
0

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

Posez votre question
Utilisateur anonyme
 
De la ligne 44 à 49, si tu y allais plus simplement? À moins que je me trompe, tu veux uniquement savoir si la requête retourne un résultat. et si tu tentais ceci?

//mysql_num_rows($eq); //mysql est obsolète il me semble!, surtout que tu as tapé $eq au lieu de $req! o=
//Alors si tu oubliais le die(), et tu essayais de cette façon?
if ($req = mysqli_query($bdd, "SELECT anonyme_id FROM eg_anonyme WHERE email='$email'")) { //Il me semble que la condition est appliquée (soit true) si la requête renvoie quelque chose, ou dans le cas contraire, on passe au suivant!

//Maintenant, de pasage, je te propose de t'informer sur les opérateurs ternaires (bon la traduction est affreuse, mais je n'y peux rien! =#). De la ligne 1 à 21, tu pourrais utiliser un raccourci syntaxique, parce que les développeurs veulent travailler le moins possible!
//if(isset($_POST['action'])) $action=$_POST['action']; else $action=""; se trauduit donc par,
$action = (isset($_POST['action'])) ? $_POST['action'] : '';

Voilà, la référence pour les ops ternaires: https://www.commentcamarche.net/contents/787-php-structures-conditionnelles#une-facon-plus-courte-de-faire-un-test-operateur-ternaire
En souhaitant que ça te donne un petit coup de pouce! =@
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Sauf si la requête plante, celle-ci retournera toujours un résultat, par contre ce jeu de résultat peut être vide. Il faut donc bien vérifier le résultat en comptant le nombre de ligne (ou mieux en faisant un fetch sur une requête SELECT COUNT).
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci à tous, je vais voir vos précieux conseils et vous faire part de mes observations le cas échéant.

Cdlt.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Toujours dans la m...

qqu'un peut-il me dire ce qui cloche ici svp, la réponse de ce test devrait être oui, et j'ai non :

$email_int = (isset($_POST['$email_int'])) ? $_POST['$email_int'] : '';    

   
    $sql1 = "SELECT intervenant_id FROM mr_intervenants WHERE email_int ='$email_int'";
    $req = $conn->query($sql1) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    // on compte le nombre de résultats
    $res = mysqli_num_rows($req);
     
    if($res!=0)	

    		
    		
	{
	  echo 'oui';
	}
	
	else
	
	{
	 echo 'non';
	}
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
je te suggère, dans
echo 'non';
, de faire aussi
echo $sql1;
: cela ne peut que t'éclairer. Cela te permettra surtout de tester la requête à la main, dans le gestionnaire de la base de données.
Je suis surpris que tu utilises $sql dans le die: pourquoi pas $sql1?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Tu sembles melanger du myslq avec du mysqli ... et de la synraxe mysqli objet avec du mysqli literale...

De plus... vu la date d'ouverture de ta discussion tu aurais mieux fait d'ouvrir une nouvelle discussion
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Ok, mais c quoi le bon code ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention  
 
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci Jordane45, mais le manuel ne m'aide guère.

J'ai tenté ça, avec query et prepare :

$email_int = (isset($_POST['$email_int'])) ? $_POST['$email_int'] : '';    

$result = $mysqli->query("SELECT intervenant_id FROM mr_intervenants WHERE email_int = '$email_int'"); 

    /* Détermine le nombre de lignes du jeu de résultats */
    $row_cnt = $result->num_rows;

if($row_cnt != 0)
    
 {
   echo 'oui';
 }
 
 else
 
 {
   echo 'non';
 } 
 



et RIEN !
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Comment ça rien ? Tu devrais afficher au moins 'oui' ou 'non' et éventuellement un message d'erreur.

Une différence avec un SELECT COUNT ?
$sql = "SELECT COUNT(*) FROM mr_intervenants WHERE email_int = '" . $mysqli->real_escape_string($email_int) . "'";

var_dump($sql);

$result = $mysqli->query($sql); 
$row = $result->fetch_row();

var_dump($row);
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
La belle erreur ...
$email_int = (isset($_POST['$email_int'])) ? $_POST['$email_int'] : '';    

A remplacer par :
$email_int = (isset($_POST['email_int'])) ? $_POST['email_int'] : '';    


Ajoute également ceci AU DEBUT de ton fichier PHP histoire d'activer l'affichage des erreurs PHP dans ta page.
error_reporting(E_ALL);
ini_set('display-errors','on');
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Et aussi ... pour afficher les éventuelles erreur dans tes requêtes

$sql = "SELECT intervenant_id FROM mr_intervenants WHERE email_int = '$email_int'";

if (!$mysqli->query($sql)) {
    printf("Erreur dans la requêter : %s\n", $mysqli->error);
}


0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci à tous, je prends le temps de tester tout cela.
0