Insert into qui ne fonctionne pas

Résolu/Fermé
philipf - 28 juin 2019 à 13:11
 philipf - 1 juil. 2019 à 14:29
Bonjour,
J'ai téléchargé EasyPhp Devser et j'ai quelques soucis.
Pour faire mon test d'une requête Select j'ai inséré manuellement des données et la requête fonctionne.
Pour insérer des données ça ne marche pas.

mon fichier de connexion
<?php
$host = "127.0.0.1";
$user = "root";
$password = "";
$bdd = "jumelage";

$mysqli = new mysqli($host, $user, $password, $bdd);
if ($mysqli->connect_error) {
    die('Erreur de connexion ('.$mysqli->connect_errno.')'. $mysqli->connect_error);
}
$con = mysqli_connect($host,$user,$password,$bdd);
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


le fichier qui me sert à insérer des données
<?php
include("connect.php");
include("fonctionsphp.php");
<?php
$name = isset($_POST['name']) ? $_POST['name'] : "";
$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : "";
$phone = '';
$nation = isset($_POST['nation']) ? $_POST['nation'] : "";
$mail = '';
$password = '';
$saisie = '';
if (isset($_POST['reset'])) {
	$_POST['name'] = '';
	$_POST['firstname'] = '';
	$_POST['nation'] = '';
}

if (isset($_POST['enregistrer'])) {
	if ((!empty($_POST['name'])) && (!empty($_POST['firstname'])) && (!empty($_POST['nation']))){
		//on met la 1ere lettre du nom en majuscule
		$name = ucfirst($_POST['name']);
		$firstname = ucfirst($_POST['firstname']);
		$nation = ucfirst($_POST['nation']);
		//enregistre le membre
		//$requete = "INSERT INTO membres (id, nom, prenom, phone, nationalite, mail, password)
		//VALUES('','$name','$firstname', '$phone', '$nation', '$mail', '$password')";
		exec("INSERT INTO membres (id, nom, prenom, phone, nationalite, mail, password)
		VALUES('','$name','$firstname', '$phone', '$nation', '$mail', '$password')");
		$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());	
		$saisie = "Enregistrement de $name $firstname $nation effectué";
		$_POST['name'] = '';
		$_POST['firstname'] = '';
		$_POST['nation'] = '';
	}
	else {
		$saisie = "Pas d'enregistrement effectué, les casess ne sont pas renseignées !";
	}
}
?>
<div style="text-align:center">
	<p> pour obtenir ß = alt +225</p>
	<FORM name="research" ACTION = "index.php?page=comite" METHOD="POST"> 
		Nom : <input type="text" name="name" value="" /><br /><br />
		Prenom : <input type="text" name="firstname" value="" /><br /><br />
		Nationalité : <input type="text" name="nation" value="" /><br /><br />
		<input style="cursor:pointer;" type="submit" name="enregistrer" value="Enregistrer" />
	</FORM>
	<?php echo $saisie;?>
</div>


les messages générés

Notice: Undefined variable: requete in C:\Weblocal\Sites\Jumelage\fr\membres.php on line 81

Warning: mysqli::query(): Empty query in C:\Weblocal\Sites\Jumelage\fr\membres.php on line 81

Notice: Undefined variable: requete in C:\Weblocal\Sites\Jumelage\fr\membres.php on line 81

Fatal error: Call to undefined method mysqli::error() in C:\Weblocal\Sites\Jumelage\fr\membres.php on line 81

Dans cette requête je veux seulement insérer un nom, un prénom et la nationalité dans la base de données. Le reste le sera mis à jour par les membres.

Mon ancienne requête fonctionnait avec easyPhp 5.4 mais pas avec cette version, et je j'arrive pas à m'en sortir même en consultant les tutos


Configuration: Windows / Chrome 75.0.3770.100

3 réponses

AstaLaVista1908 Messages postés 85 Date d'inscription mercredi 24 septembre 2014 Statut Membre Dernière intervention 16 juillet 2019 33
28 juin 2019 à 13:49
Hello,

à quoi correspond la ligne 81 de ton fichier membres.php ?
0
Oups!! pardon j'ai oublié.
la ligne 81 est celle-ci
$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());	
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
28 juin 2019 à 14:01
Bonjour,

C'est normal : tu as commenté la ligne qui définit $requete, et ensuite tu fais $resultat = $mysqli->query($requete)...

Xavier
0
Ok mais comme je l'ai dit la requête mise en commentaire fonctionnait avec EasyPhp 5.4 mais elle ne fonctionne pas avec 5.6
D'après ce que j'ai pu lire une insertion avec 5.6 doit être
exec("INSERT INTO membres (id, nom, prenom, phone, nationalite, mail, password)
VALUES('','$name','$firstname', '$phone', '$nation', '$mail', '$password')");

je ne sais pas comment écrire le code pour gérer les erreurs de la requête.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 1 juil. 2019 à 10:49
Bonjour,

Alors déjà, non, exec() ne sert pas à exécuter une requête SQL, ça a un tout autre sens en PHP : https://www.php.net/manual/fr/function.exec.php

Ensuite, j'ai l'impression qu'il y a quelques mélanges dans ton code.
Dans ton fichier de connexion pour commencer : pourquoi te connectes-tu deux fois en utilisant deux méthodes différentes ? Je te suggère de ne retenir que la première, qui définit $mysqli.

Ensuite, exécute tes requêtes comme ça :
$requete = "INSERT INTO membres (nom, prenom, phone, nationalite, mail, password)
            VALUES('$name','$firstname', '$phone', '$nation', '$mail', '$password')";
$mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error); 

Tu dis que ça ne marche plus avec EasyPhp 5.6, mais pourtant ça devrait. Pourrais-tu m'en dire plus ? Tu as un message d'erreur ? Une source ? La doc de Php en tout cas ne dit rien de tel : https://www.php.net/manual/fr/mysqli.query.php

Xavier
0
Bonjour,
Merci pour la réponse.
J'ai regardé d'un peu plus près depuis mon post et voilà mon fichier membres.php
<?php
//connexion à la bdd
$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');

$nom = isset($_POST['nom']) ? $_POST['nom'] : '';
$prenom = isset($_POST['prenom']) ? $_POST['prenom'] : '';
$telephone = isset($_POST['telephone']) ? $_POST['telephone'] : 'NULL';
$nationalite = isset($_POST['nationalite']) ? $_POST['nationalite'] : '';
$mail = '';
$password = '';
$saisie = '';

if (isset($_POST['enregistrer'])) {
	if ((!empty($_POST['nom'])) && (!empty($_POST['prenom'])) && (!empty($_POST['nationalite']))){
		//on met la 1ere lettre du nom en majuscule
		$nom = ucfirst($_POST['nom']);
		$prenom = ucfirst($_POST['prenom']);
		$telephone ='';
		$nationalite = ucfirst($_POST['nationalite']);
		//enregistre le membre
		//requête avec 5.6 
		try
		{
			$sql = 'INSERT INTO membres(nom, prenom, telephone, nationalite)
				VALUES(:nom, :prenom, :telephone, :nationalite)';
			$req = $cnx->prepare( $sql );
			$req->execute(array('nom'=>$nom, 'prenom'=>$prenom, 'telephone'=>$telephone, 'nationalite'=>$nationalite));
			$saisie = "Enregistrement de nom :$nom, prénom :$prenom, telephone :$telephone, nationalité: $nationalite effectué";
		}
		catch(Exception $e)
		{
			die('erreur : '.$e->getMessage());
		}

		$_POST['nom'] = '';
		$_POST['prenom'] = '';
		$_POST['nationalite'] = '';
	}
	else {
		$saisie = "Pas d'enregistrement effectué, les cases ne sont pas renseignées !";
	}
}

?>
<div style="text-align:center">
	<p> pour obtenir ß = alt +225</p>
	<FORM name="research" ACTION = "index.php?page=comite" METHOD="POST"> 
		Nom : <input type="text" name="nom" value="" /><br /><br />
		Prenom : <input type="text" name="prenom" value="" /><br /><br />
		Nationalité : <input type="text" name="nationalite" value="" /><br /><br />
		<input style="cursor:pointer;" type="submit" name="enregistrer" value="Enregistrer" />
	</FORM>
	<?php echo $saisie;?>
</div>


Malgré les modifications je n'ai toujours rien dans la table des membres
0
En fait le problème venait du paramétrage de certaines colonnes de ma bdd.

Merci pour l'aide
0