Menu

Insert into qui ne fonctionne pas [Résolu]

- - Dernière réponse :  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
Afficher la suite 

3 réponses

Messages postés
85
Date d'inscription
mercredi 24 septembre 2014
Statut
Membre
Dernière intervention
16 juillet 2019
10
0
Merci
Hello,

à quoi correspond la ligne 81 de ton fichier membres.php ?
Oups!! pardon j'ai oublié.
la ligne 81 est celle-ci
$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());	
Commenter la réponse de AstaLaVista1908
Messages postés
3434
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 juillet 2019
909
0
Merci
Bonjour,

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

Xavier
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.
Reivax962
Messages postés
3434
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
17 juillet 2019
909 -
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
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
Commenter la réponse de Reivax962
0
Merci
En fait le problème venait du paramétrage de certaines colonnes de ma bdd.

Merci pour l'aide
Commenter la réponse de philipf