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

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>

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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>
    
    1. 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
      1. 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.