[RESOLU] mysqli : probleme insertion dans une BDD - message erreur

Petit nouveau ! | 9 Messages

24 juil. 2015, 23:43

Bonjour,

Je viens vers vous pour demander de l'aide lors de ma requête.
Par le biais d'un formulaire, je cherche à insérer des données dans une table "articles". Mais j'obtient plusieur message d'erreur.
Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in ajout.php on line 16

Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in /ajout.php on line 19
L'insertion des données a échoué.
Warning: mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean given in /ajout.php on line 28
Voici mon script :
<body>
	<form name="Formulaire" action="ajout.php" method="post">
		
		<label for="code">Code</label>
		<input type="text" id="code" name="code" required/><br />
		
		<label for="designation">Désignation</label>
		<input type="text" id="designation" name="designation" required/><br />
		
		<label for="PU">Prix Unitaire</label>	
		<input type="number" id="PU" name="PU" /><br />
		
		<label for="MadeIn">MadeIn</label>
		<input type="text" id="MadeIn" name="MadeIn" /><br />
		
		<input type="submit">
	</form>
<?php
	include('connect.php');
	
	if (file_exists('connect.php')) {
		
		// Préparation de la requête
		$requete = "INSERT INTO articles (code, designation, PU, MadeIn) VALUES (?, ?, ?, ?)";
		$stmt = mysqli_prepare($connexiondb, $requete); 
		
		// Récupération de la saisie du formulaire
		$code = $_POST['code'];
		$designation = $_POST['designation'];
		$pu = $_POST['PU'];
		$madeIn= $_POST['MadeIn'];
		
		mysqli_stmt_bind_param($stmt, "ssds", $code, $designation, $pu, $madeIn);
		
		// Exécution de la requête
		$resultat = mysqli_stmt_execute($stmt);
		
		if ($resultat){
			echo "Les données ont bien été insérées.";
		}else{
			echo "L'insertion des données a échoué.";
		}
		
		// Fermeture du traitement
		mysqli_stmt_close($stmt);
		
		include('close.php');
	}
	
?>
Après de multiple recherches, verifications de syntaxe, je craque et demande votre aide.
Je pense que la grosse partie du problème vient de : $stmt = mysqli_prepare($connexiondb, $requete);

Mais je ne vois pas du tout comment le régler.

Je compte sur votre gentillesse.

Merci!
Modifié en dernier par moogli le 26 juil. 2015, 18:57, modifié 1 fois.
Raison : bbcode adapté

Mammouth du PHP | 688 Messages

25 juil. 2015, 00:45

quel est le contenu de connect.php ?

Petit nouveau ! | 9 Messages

25 juil. 2015, 09:14

Voici
<?php
define('SERVEUR','10.0.241.89');
define('USER','cefiidev411');
define('PASSWORD','******');
define('BASE','cefiidev411');

$connexiondb = mysqli_connect(SERVEUR, USER, PASSWORD, BASE);

if (!$connexiondb){
echo "Connexion au serveur refusée!<br /><br />";
}else{
echo "Connexion au serveur réussi!<br /><br />";
}
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 juil. 2015, 21:46

salut,

Les messages t'indique que le premier paramètre ets un booleen alors qu'un mysqli_stmt est attendu.
au vu du code c'est que la variable $stmt est un booleen. Pour que cela arrive il faut que mysqli_prepare retourne false.

Pour avoir le message d'erreur tu peux utiliser mysqli_error comme dans dans mon exemple de code "corrigé" si dessous.
Avec ce message d'erreur tu devrais pouvoir avancer.
Il est important d'avoir ces messages d'erreurs afin de pouvoir faire en sorte que ton code puisse l'indiquer à l'utilisateur sans que cela ne nuise à son "expérience" sur son site (en claire si ton site laisse une page blanche c'est pas bon).
<?php
include('connect.php');

if (file_exists('connect.php')) {

    // Préparation de la requête
    $requete = "INSERT INTO articles (code, designation, PU, MadeIn) VALUES (?, ?, ?, ?)";
    $stmt = mysqli_prepare($connexiondb, $requete);
    if (!$stmt) {
        echo mysqli_error($connexiondb);
    } else {

        // Récupération de la saisie du formulaire
        $code = $_POST['code'];
        $designation = $_POST['designation'];
        $pu = $_POST['PU'];
        $madeIn = $_POST['MadeIn'];

        mysqli_stmt_bind_param($stmt, "ssds", $code, $designation, $pu, $madeIn);

        // Exécution de la requête
        $resultat = mysqli_stmt_execute($stmt);

        if ($resultat) {
            echo "Les données ont bien été insérées.";
        } else {
            echo "L'insertion des données a échoué.";
        }

        // Fermeture du traitement
        mysqli_stmt_close($stmt);

        include('close.php');
    }
}
?>
@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 9 Messages

26 juil. 2015, 23:29

Merci beaucoup ça va m'être très utile pour la suite.

L'erreur venait de la colonne MadeIn de ma base de donnée.
Au lieu d'avoir écrit MadeIn ( made in ) avec un i majuscule, j'y avais écrit avec un L minuscule pour je ne sais quelle raison.
Petite étourderie !

Merci encore!