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

sabrina_mef Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
AmiarZAk Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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