Problème de double insertion dans la base de donnée

Fermé
sabrina_mef Messages postés 16 Date d'inscription vendredi 8 mai 2015 Statut Membre Dernière intervention 2 juillet 2015 - 31 mai 2015 à 23:49
AmiarZAk Messages postés 2 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015 - 3 juin 2015 à 01:17
Bonjour,
svp comment je peut résoudre ce problème
quand j'exécute une requête d'insertion a partir d'un code php, la même ligne est inséré 3 fois dans la table .
(j'ai désinstallé wampserver 2 fois dans la première fois l'ajout exécute 2 fois la même ligne et cette fois insère 3 fois la même ligne).

<?php 
if(isset($_POST['sujet'])) {

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO rapport_tmp (sujet, encadreur, proprietaire, domaine, annee, unite, resume, piecejointe)
VALUES
('" . $_POST["sujet"] . "', '" . $_POST["encadreur"] . "', '" . $_POST["proprietaire"] . "', '" . $_POST["domaine"] . "', '" . $_POST["annee"] . "', '" . $_POST["unite"] . "','" . $_POST["resume"] . "','" . $_POST["piecejointe"] . "')";
$ok= $conn->query($sql);

$conn->close();
}
?>
<html>
<body>
<div align="center">
<form action="" method="POST">
<table width="90%">
<tr><td bgcolor="#C2E2DA"><label>Sujet<span style="color:#FF0000"> *</span></label></td>
<td><input name="sujet" type="text" value="" required="required"/></td>
<tr><td bgcolor="#C2E2DA"><label>Encadreur<span style="color:#FF0000"> *</span></label></td>
<td><input name="encadreur" type="text" value="" required="required"/></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Proprietaire<span style="color:#FF0000"> *</span></label></td>
<td><input name="proprietaire" type="text" value="" required="required" /></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Domaine<span style="color:#FF0000"> *</span></label></td>
<td><select name='domaine' required="required">
<option selected='selected'>domaine d'étude</option>
<option value='Informatique'>Informatique</option>
<option value='Gestion et Economie'>Gestion et Economie</option>
<option value='Science'>Science</option>
<option value='Mathématique'>Mathématique</option>
<option value='Technique'>Technique</option>
<option value='Juridique'>Juridique</option>
</select></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Année universitaire<span style="color:#FF0000"> *</span></label></td>
<td><select name="annee" required="required">
<option selected="selected" >selectionner l'année</option>
<option value="2008-2009">2008-2009</option>
<option value="2009-2010">2009-2010</option>
<option value="2010-2011">2010-2011</option>
<option value="2011-2012">2011-2012</option>
<option value="2012-2013">2012-2013</option>
<option value="2013-2014">2013-2014</option>
<option value="2014-2015">2014-2015</option>
</select></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Unité de recherche<span style="color:#FF0000"> *</span></label></td>
<td><select name='unite'>
<option selected='selected'>quelle établissement</option>
<option value='ISGG' required="required">ISGG</option>
<option value='FSEG'>FSEG</option>
<option value='ISLG'>ISLG</option>
<option value='ISIMG'>ISIMG</option>
<option value='ENIG'>ENIG</option>
<option value='H2O'>H2O</option>
<option value='ISSAT'>ISSAT</option>
</select></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Resumé<span style="color:#FF0000"> *</span></label></td>
<td><textarea cols="50" name="resume" rows="5" required="required"></textarea></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Piéce Jointe<span style="color:#FF0000"> *</span></label></td>
<td><fieldset><input type="file" name="piecejointe" required="required"></fieldset></td></tr>
<tr><td bgcolor="#C2E2DA"></td><td><div align="right"><input type="submit" value="partagez"></div>
</td></tr>
</table>
</form></div>
</body>
</html>
A voir également:

3 réponses

AmiarZAk Messages postés 2 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015
1 juin 2015 à 05:58
Bonjour,
J'ai exécuté votre script sur ma machine, le résultat d'insertion est correcte :


Essayez juste d'écrire vos requêtes d'une façon a respecter la structure des requêtes préparées avec MySQLi afin d'assurer la meilleure sécurité en évitant les injections SQL.
voici votre scripte après l'avoir améliorer :


<?php 
// tester l'existance des variables 
if(isset($_POST['sujet']) and isset($_POST['encadreur'])and isset($_POST['proprietaire']) and isset($_POST['proprietaire']) and isset($_POST['domaine']) and isset($_POST['annee']) and isset($_POST['unite']) and isset($_POST['resume']) and isset($_POST['piecejointe'])) 
{ 
// tester si les variables ne sont pas vides 
   if (!empty($_POST['sujet']) and !empty($_POST['encadreur']) and !empty($_POST['proprietaire']) and !empty($_POST['proprietaire']) and !empty($_POST['domaine']) and !empty($_POST['annee']) and !empty($_POST['unite']) and !empty($_POST['resume']) and !empty($_POST['piecejointe']))
   {
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Filtrage des inputs (sécurisé les entrée afin d'éviter les injection SQL)
$sujet = htmlspecialchars(addcslashes($_POST['sujet'], '\''));
$encadreur = htmlspecialchars(addcslashes($_POST['encadreur'], '\''));
$proprietaire = htmlspecialchars(addcslashes($_POST['proprietaire'], '\''));
$domaine = htmlspecialchars(addcslashes($_POST['domaine'], '\''));
$annee = htmlspecialchars(addcslashes($_POST['annee'], '\''));
$unite = htmlspecialchars(addcslashes($_POST['unite'], '\''));
$resume = htmlspecialchars(addcslashes($_POST['resume'], '\''));
$piecejointe = htmlspecialchars(addcslashes($_POST['piecejointe'], '\''));

// On utilise des requêtes prépéarées  avec MySQLi pour assurer la sécurité de la base de donnée en évitant les injections SQL 
$link = mysqli_connect($servername, $username, $password, $dbname);
echo "<h1> Connexion OK</h1>";

if(($stmt = mysqli_prepare($link, "INSERT INTO rapport_tmp VALUES(NULL,?,?,?,?,?,?,?,?)")) )  // NULL pour REF  de type INT  qui est un identificateur , on met NULL quand on insert pas de valeur a une colonne 
			{	echo "<h1> mysqli_prepare OK</h1>";
				mysqli_stmt_bind_param($stmt, "sssssssb", $sujet, $encadreur, $proprietaire, $domaine, $annee, $unite, $resume, $piecejointe); // isssssssb : désigne le type des variable a inséré   i : entier , s : string, b : blob 
				echo "<h1> mysqli_stmt_bind_param OK</h1>";
				mysqli_stmt_execute($stmt);
				
				echo "<h1> Insertion Reussit</h1>";
				mysqli_stmt_close($stmt);
			}else {echo "<h1> Probleme  d Insertion </h1>";}
                mysqli_close($link);
}
}
?>
<html>
<body>
<div align="center">
<form action="" method="POST">
<table width="90%">
<tr><td bgcolor="#C2E2DA"><label>Sujet<span style="color:#FF0000"> *</span></label></td>
    <td><input name="sujet" type="text" value="" required="required"/></td>
<tr><td bgcolor="#C2E2DA"><label>Encadreur<span style="color:#FF0000"> *</span></label></td>
    <td><input name="encadreur" type="text" value="" required="required"/></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Proprietaire<span style="color:#FF0000"> *</span></label></td>
<td><input name="proprietaire" type="text" value="" required="required" /></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Domaine<span style="color:#FF0000"> *</span></label></td>
<td><select name='domaine' required="required">
<option selected='selected'>domaine d'étude</option>
<option value='Informatique'>Informatique</option>
<option value='Gestion et Economie'>Gestion et Economie</option>
<option value='Science'>Science</option>
<option value='Mathématique'>Mathématique</option>
<option value='Technique'>Technique</option>
<option value='Juridique'>Juridique</option>
</select></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Année universitaire<span style="color:#FF0000"> *</span></label></td>
    <td><select name="annee" required="required">
<option selected="selected" >selectionner l'année</option>
<option value="2008-2009">2008-2009</option>
<option value="2009-2010">2009-2010</option>
<option value="2010-2011">2010-2011</option>
<option value="2011-2012">2011-2012</option>
<option value="2012-2013">2012-2013</option>
<option value="2013-2014">2013-2014</option>
<option value="2014-2015">2014-2015</option>
</select></td></tr>

<tr><td bgcolor="#C2E2DA"><label>Unité de recherche<span style="color:#FF0000"> *</span></label></td>
<td><select name='unite'>
<option selected='selected'>quelle établissement</option>
<option value='ISGG' required="required">ISGG</option>
<option value='FSEG'>FSEG</option>
<option value='ISLG'>ISLG</option>
<option value='ISIMG'>ISIMG</option>
<option value='ENIG'>ENIG</option>
<option value='H2O'>H2O</option>
<option value='ISSAT'>ISSAT</option>
</select></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Resumé<span style="color:#FF0000"> *</span></label></td>
    <td><textarea cols="50" name="resume" rows="5" required="required"></textarea></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Piéce Jointe<span style="color:#FF0000"> *</span></label></td>
<td><fieldset><input type="file" name="piecejointe" required="required"></fieldset></td></tr>
<tr><td bgcolor="#C2E2DA"></td><td><div align="right"><input type="submit" value="partagez"></div>
</td></tr>
</table>
</form></div>
</body>
</html>
0
sabrina_mef Messages postés 16 Date d'inscription vendredi 8 mai 2015 Statut Membre Dernière intervention 2 juillet 2015
1 juin 2015 à 15:46
malgré que j'ai changé le script, le problème n'a pas résolu :/
ce problème juste sur ma machine, par ce que j'ai exécuté le même script sur une autre machine, le résultat d'insertion est correcte
0
AmiarZAk Messages postés 2 Date d'inscription lundi 1 juin 2015 Statut Membre Dernière intervention 3 juin 2015
3 juin 2015 à 01:17
Alors vaut mieux d'installer une version de WampServeur La plus récente, peut être ça va résoudre votre problème, de ma part j'ai installer la version wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12- , bon courage.
0