Page 1 sur 1

Supprimer BDD

Posté : 15 mai 2011, 08:09
par TRUNCKS
Bonjour à vous,

J'ai un tableau sur une page PHP qui récapitule des clients d'une base de données.

J'ai voulu rajouter un bouton supprimer dans une colonne, pour pouvour supprimer des clients ligne par ligne.
Je me suis un peu paumé et je crois que j'ai un peu fait n'importe quoi lol

J'ai une erreur d'index, il me dit que les champs que je POST n'existent pas.

Si vous pouvez m'aiguiller:

Code : Tout sélectionner

<?php if(isset($_POST['action'])){ $numero_client = mysql_real_escape_string($_POST['numeroclient']); $societe = mysql_real_escape_string($_POST['societe']); $nom = mysql_real_escape_string($_POST['nom']); $adresse = mysql_real_escape_string($_POST['adresse']); $code_postal = mysql_real_escape_string($_POST['codepostal']); $ville = mysql_real_escape_string($_POST['ville']); $telfixe = mysql_real_escape_string($_POST['telfixe']); $telportable = mysql_real_escape_string($_POST['telportable']); $fax = mysql_real_escape_string($_POST['fax']); $mail = mysql_real_escape_string($_POST['mail']); $remarques = mysql_real_escape_string($_POST['remarques']); $sq="delete into contact values('',\"$numero_client\",\"$societe\",\"$nom\",\"$adresse\",\"$code_postal\",\"$ville\",\"$telfixe\",\"$telportable\",\"$fax\",\"$mail\",\"$remarques\")"; $quer=mysql_query($sq ) or die('erreur sq: '.mysql_error()); //ma methode } else{ ?> <table border="5" align="center"> <tr> <td>Numéro Client</td> <td>Société</td> <td>Nom</td> <td>Adresse</td> <td>Code Postal</td> <td>Ville</td> <td>Téléphone Fixe</td> <td>Téléphone Portable</td> <td>Fax</td> <td>Mail</td> <td>Remarques</td> </tr> <?php do { ?> <tr> <form action="index.php" method="post"> <input type="hidden" name="action" value="add"> <td><?php echo $row_clients['numeroclient']; ?></td> <td><?php echo $row_clients['societe']; ?></td> <td><?php echo $row_clients['nom']; ?></td> <td><?php echo $row_clients['adresse']; ?></td> <td><?php echo $row_clients['codepostal']; ?></td> <td><?php echo $row_clients['ville']; ?></td> <td><?php echo $row_clients['telfixe']; ?></td> <td><?php echo $row_clients['telportable']; ?></td> <td><?php echo $row_clients['fax']; ?></td> <td><?php echo $row_clients['mail']; ?></td> <td><?php echo $row_clients['remarques']; ?></td> <td><input type="submit" name="Supprimer" value="Supprimer"> </td> </form> </tr> <?php } while ($row_clients = mysql_fetch_assoc($clients)); ?> </table>

Re: Supprimer BDD

Posté : 15 mai 2011, 08:33
par moogli
salut,


en fait tu utilise mal la requête delete qui devrait être de la forme
DELETE FROM LaTable where clefPrimaire = Valeur;

donc dans ton formulaire il te suffit de passer la clef primaire de la table contact pour générer ta requete sql derrière. 

Par ailleurs il serait peut être plus ergonomique d'afficher la liste des contacts (avec une pagination c'est mieux ;) ). cette liste sera en fait une liste de checkbox que tu nommera avec la notation tableau. ainsi tu récupère une tableau contenant le clef primaire a supprimer tu pourra réaliser ta requete rapidement la fonction implode de php et le IN de mysql. 

exemple
[php]
<form method="post">
<?php

<table border="5" align="center">
  <tr>
    <td>Numéro Client</td>
    <td>Société</td>
    <td>Nom</td>
    <td>Adresse</td>
    <td>Code Postal</td>
    <td>Ville</td>
    <td>Téléphone Fixe</td>
    <td>Téléphone Portable</td>
    <td>Fax</td>
    <td>Mail</td>
    <td>Remarques</td>
  </tr>
  <?php while ($row_clients = mysql_fetch_assoc($clients)){?>
    <tr>
      <td><?php echo $row_clients['numeroclient']; ?></td>
      <td><?php echo $row_clients['societe']; ?></td>
      <td><?php echo $row_clients['nom']; ?></td>
      <td><?php echo $row_clients['adresse']; ?></td>
      <td><?php echo $row_clients['codepostal']; ?></td>
      <td><?php echo $row_clients['ville']; ?></td>
      <td><?php echo $row_clients['telfixe']; ?></td>
      <td><?php echo $row_clients['telportable']; ?></td>
      <td><?php echo $row_clients['fax']; ?></td>
      <td><?php echo $row_clients['mail']; ?></td>
      <td><?php echo $row_clients['remarques']; ?></td>
      <td><input type="checkbox" name="Supprimer[]" value="<?php echo $row_clients['numeroclient']; ?>" />
      </td>
    </tr>
<tr><td colspan="12"><input type="submit" value="Supprimer" />
    <?php }  ?>
</table></form>
[/php]

avec ça le traitement devient
[php]
<?php
if (isset($_POST['Supprimer']) && is_array($_POST['Supprimer']) && (count($_POST['Supprimer'])>0)) {
// le formulaire a l'air bien soumis et l'on a coché au moins une case
$sql = 'DELETE FROM contact where numeroclient in ('.implode(',',$_POST['Supprimer']).');';
$ret = mysql_query($sql);
if ($ret === false ) {
$message = '<p class="Erreur mysql">Erreur SQL : '.mysql_error().'<br />Avec la requete : '.$sql.'</p>';
} 
else {
$message = '<P class="Succes mysql">La suppression de '.count($_POST['Supprimer']).' contact(s) c\'est effectuée avec succès</p>';
}
}

// la où tu veut dans la page tu indique le message d'erreur ou la validation
if ( !empty($message)) echo $message;
?>[/php]

alors ce code n'est pas vraiment sécurisé, tu peux par exemple utiliser [url=http://www.php.net/array_walk]array_walk[/url] afin d'utiliser mysql_real_escape_string sur chaque élément et pourquoi vérifier qu'il s'agisse bien d'un entier ;)


@+

Re: Supprimer BDD

Posté : 15 mai 2011, 11:10
par TRUNCKS
Merci, je comprend un peu mieux le principe.

Par contre, j'ai du faire une annerie, mais je n'ai plus qu'une seule ligne client au lieu de mes 20 habituelles.

Egalement, quand j'essaye de supprimer après avoir cocher, j'ai:

Erreur SQL : Unknown column '5849P' in 'where clause'
Avec la requete : DELETE FROM contact where numeroclient in (5849P);

5849p étant le numéro client de la ligne quand j'ai coché.

Merci encore pour tes explications