suppression dans une base de données

Eléphant du PHP | 71 Messages

11 janv. 2006, 14:45

Bonjour !

Voilà je sui entrain de faire un répertoire téléphonnique j'ai réussit à créer une premiere page qui m'afficher tous les gens contenu dasn ma base avec leur nom prenom et numero de tel. j'ai ajouter une page ajout d'une entrée pour ahjouter d'autre personne.
Dans la page principal tout se présente dans un tableau avec nom prenom telephnoe. Maintenant je voudrais réjouter un champ dasn le tableau avec un loen modifier ou supprimer. Pourriez vouz me montrer comment l'on opère si je veux supprimer en cliquant su le lien une des personne contenetu dans le tableau ex :

Voici le tableau :

Nom Prenom Telephone Modif
Moi nicolas 020302011 supp ou modif

en cliquant sur supp je veux que cette ligne soit sûpprimmer ou sij e clik sur modif on peux modifier soit le nom ou le numéro de telephonne.

Voilà merci je vous met le code de la page principal en dessous :


<?php
// on se connecte à la base de données
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('repertoire_tel', $base);
?>
<html>
<head>
<title>affichage du répertoire</title>
</head>
<body>
<?php
// structure de la mise en page
echo '<h3><p><center>Répertoire téléphonnique</center></p></h3><br><br>';
echo '<center>';
echo '<p><a href="ajout.php">Ajouter une entrée</a></p>';
echo '<table border cellspacing="0" width="600">';
echo '<tr>';
echo '<td width="100"><p><center>Nom</center></p></td>';
echo '<td width="100"><p><center>Prénom</p></center></td>';
echo '<td width="200"><p><center>Addresse</p></center></td>';
echo '<td width="200"><p><center>téléphonne</p></center></td>';
echo '</tr>';

// lancement de la requête  
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';

$sql = 'SELECT nom, prénom, addresse, telephone FROM liste_proprietaire ';
if($lettre) {
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
    $sql .=  strtolower($lettre) . '){1}"';
    }

$sql .= 'ORDER BY nom'; 

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());


//on récupère le résultat sous la forme d'un tableau en scanan tous les tuples
while ($data = mysql_fetch_array($req)) {
	// on effectu l'affichage des résultat
	echo "<tr><td>";
	echo $data['nom'];
	echo "</td><td>";  
	echo $data['prénom'];
	echo "</td><td>";
	echo $data['addresse'];
	echo "</td><td>";
	echo $data['telephone'];
	echo "</td></tr>";
}

echo '</center>';
// on libère l'espace mémoire alloué pour cette intérrogation de base
mysql_free_result ($req);
mysql_close ();
?>
</body>
</html>
Merci

Mammouth du PHP | 19672 Messages

11 janv. 2006, 14:52

Suggestion : pour chaque ligne extraite, crée deux liens comportant en paramètre la clé primaire de la ligne.

Crée ensuite deux pages :
- modifier.php
- supprimer.php

Dans la première, tu recrées un formulaire déjà rempli avec les valeurs correspondantes. Pour faire ça, tu récupères le paramètre de l'url et tu crées une requête pour récupérer les informations correspondant à cette clé. Chaque élément sera alors ensuite ajouté dans le formulaire. Un changement et tu crées une requête UPDATE;

Dans la seconde, tu crées un simple formulaire avec un champ caché comportant la clé récupérée de l'url et un bouton de confirmation (on est jamais à l'abri d'une fausse manoeuvre et l'a suppression sera irréversible) : au clic, tu recharges la page et tu crées une requête DELETE pointée sur la bonne ligne.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

11 janv. 2006, 14:56

Oui je me douté bien que cela se faisait ainsi mais en faite j'ai du mal avec le syntaxe pour la récupération de url créer j'aimerais bien savoir comment on s'y prend pour cette fameuse URL. Merci...

Mammouth du PHP | 19672 Messages

11 janv. 2006, 15:03

C'est pas compliqué :
imagine une url sous la forme http://mon-site.com/index.php?param=valeur

Tu as là un paramètre avec un nom et une valeur que tu récupères dans une super-globale $_GET:
<?php
$parametre = isset($_GET['param']) ? $_GET['param'] : null;
//...
?>
Ensuite tu peux travailler avec la variable $parametre qui est initialisée avec la valeur transmise (si elle n'est pas vide.)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 16:28

Mais concretement avec mon code cela donne quoi ? lol je sui bête

Mammouth du PHP | 19672 Messages

11 janv. 2006, 16:32

Je ne te ferai pas un code complet, faut pas rêver, mais si tu me montres ce que tu as déjà commencé à faire en m'indiquant où ça bloque, je peux t'aider à avancer en te précisant ce qui est erroné.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

11 janv. 2006, 18:34

voici le code que j'ai mis :
<?php
// on se connecte à la base de données
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('repertoire_tel', $base);
?>
<html>
<head>
<title>affichage du répertoire</title>
</head>
<body>
<?php
// structure de la mise en page
echo '<h3><p><center>Répertoire téléphonnique</center></p></h3><br><br>';
echo '<center>';
echo '<p><a href="ajout.php">Ajouter une entrée</a></p>';
echo '<table border cellspacing="0" width="600">';
echo '<tr>';
echo '<td width="100"><p><center>Nom</center></p></td>';
echo '<td width="100"><p><center>Prénom</p></center></td>';
echo '<td width="200"><p><center>Addresse</p></center></td>';
echo '<td width="200"><p><center>téléphonne</p></center></td>';
echo '</tr>';

// lancement de la requête  
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';

$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
if($lettre) {
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
    $sql .=  strtolower($lettre) . '){1}"';
    }

$sql .= 'ORDER BY nom'; 

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());


//on récupère le résultat sous la forme d'un tableau en scanan tous les tuples
while ($data = mysql_fetch_array($req)) {
	// on effectu l'affichage des résultat
	echo "<tr><td>";
	echo $data['nom'];
	echo "</td><td>";  
	echo $data['prénom'];
	echo "</td><td>";
	echo $data['addresse'];
	echo "</td><td>";
	echo $data['telephone'];
	echo "</td></tr>";
echo '<a href="supression.php?id='.$data['id'].'">supprimer</a>';

}

echo '</center>';
// on libère l'espace mémoire alloué pour cette intérrogation de base
mysql_free_result ($req);
mysql_close ();
?>
</body>
</html>

Mammouth du PHP | 19672 Messages

11 janv. 2006, 18:39

Je ne te ferai pas un code complet, faut pas rêver, mais si tu me montres ce que tu as déjà commencé à faire en m'indiquant où ça bloque, je peux t'aider à avancer en te précisant ce qui est erroné.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

11 janv. 2006, 18:42

Ben justement je bloque au niveau du lien la j'ai mis en parametre le du lien id ainsi je peut le passer dans la page que j'ai créé supprime mais ca marche pas pourtant je récupere bien l'idé de chaque champ mais par contre la valeur que l'on met avant ? dans le lien correspond à quoi je veux pas que l'on me fasse mon code

Mammouth du PHP | 19672 Messages

11 janv. 2006, 18:57

Mouais, on va commencer par faire le ménage dans ton code, tu n'est pas logique et surtout, tu produis un html fantaisiste puisque le lien de suppresion est hors tableau. Proposition, vérifie et continue sur cette lancée mais fais donc preuve de logique quand tu codes.
<?php
// on se connecte à la base de données
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('repertoire_tel', $base);
?>
<html>
<head>
<title>affichage du répertoire</title>
</head>
<body>
<?php
// structure de la mise en page
?>
<center><h3>Répertoire téléphonnique</h3></center>
<br>
<br>
<center>
<p><a href="ajout.php">Ajouter une entrée</a></p>
<table border="0" cellspacing="0" width="600">
  <tr>
    <th width="100"><p>Nom</p></th>
    <th width="100"><p>Prénom</p></th>
    <th width="200"><p>Addresse</p></th>
    <th width="100"><p>téléphone</p></th>
    <th width="100">Supprimer</th>
  </tr>
<?php
// lancement de la requête
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';

$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
if($lettre)
{
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
    $sql .=  strtolower($lettre) . '){1}"';
}

$sql .= 'ORDER BY nom';

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

//on récupère le résultat sous la forme d'un tableau en scanan tous les tuples
while ($data = mysql_fetch_array($req))
{
    // on effectu l'affichage des résultat
?>
  <tr>
    <td><?php echo($data['nom']); ?></td>
    <td><?php echo($data['prénom']); ?></td>
    <td><?php echo($data['addresse']); ?></td>
    <td><?php echo($data['telephone']); ?></td>
    <td><p><a href="supression.php?id=<?php echo($data['id']); ?>">supprimer</a></p></td>
  </tr>
<?php
}
?>
</table>
</center>
<?php
// on libère l'espace mémoire alloué pour cette intérrogation de base
mysql_free_result ($req);
mysql_close ();
?>
</body>
</html>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

11 janv. 2006, 19:04

Oui mais ca me supprime tout dans la base au lieu de un seul. Le probleme c'est que dans mon fichier supprimer je tsete avec $_get...
voici ùais deux code :
<?php 
// on se connecte à la base de données 
$base = mysql_connect ('localhost', 'root', ''); 
mysql_select_db ('repertoire_tel', $base); 
?> 
<html> 
<head> 
<title>affichage du répertoire</title> 
</head> 
<body> 
<?php 
// structure de la mise en page 
?> 
<center><h3>Répertoire téléphonnique</h3></center> 
<br> 
<br> 
<center> 
<p><a href="ajout.php">Ajouter une entrée</a></p> 
<table border="0" cellspacing="0" width="600"> 
  <tr> 
    <th width="100"><p>Nom</p></th> 
    <th width="100"><p>Prénom</p></th> 
    <th width="200"><p>Addresse</p></th> 
    <th width="100"><p>téléphone</p></th> 
    <th width="100">Supprimer</th> 
  </tr> 
<?php 
// lancement de la requête 
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : ''; 

$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire '; 
if($lettre) 
{ 
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|'; 
    $sql .=  strtolower($lettre) . '){1}"'; 
} 

$sql .= 'ORDER BY nom'; 

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 

//on récupère le résultat sous la forme d'un tableau en scanan tous les tuples 
while ($data = mysql_fetch_array($req)) 
{ 
    // on effectu l'affichage des résultat 
?> 
  <tr> 
    <td><?php echo($data['nom']); ?></td> 
    <td><?php echo($data['prénom']); ?></td> 
    <td><?php echo($data['addresse']); ?></td> 
    <td><?php echo($data['telephone']); ?></td> 
    <td><p><a href="supprimer.php?id=<?php echo($data['id']); ?>">supprimer</a></p></td> 
  </tr> 
<?php 
} 
?> 
</table> 
</center> 
<?php 
// on libère l'espace mémoire alloué pour cette intérrogation de base 
mysql_free_result ($req); 
mysql_close (); 
?> 
</body> 
</html> 

<?php

    $base = mysql_connect ('localhost', 'root', ''); 
    mysql_select_db ('repertoire_tel', $base);
    
// on prépare une requête SQL permettant de supprimer le message tout en vérifiant qu'il appartient bien au membre qui essaye de le 
    $sql = 'DELETE FROM liste_proprietaire';
    // on lance cette requête SQL
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

    mysql_close();

    header ('Location: index.php');
    exit();
?>

Eléphant du PHP | 71 Messages

11 janv. 2006, 19:09

Non c bon ca marche escuse
j'ai oublié le where id = $_GET['id']',

Merci

Mammouth du PHP | 19672 Messages

11 janv. 2006, 19:09

Ben évidemment : tu fais une requête DELETE sans clause WHERE, ça vide la table :
<?php
$id = isset($_GET['id']) ? $_GET['id'] : null;
if(isset($id))
{
    $base = mysql_connect ('localhost', 'root', '');
    mysql_select_db ('repertoire_tel', $base);
    
// on prépare une requête SQL permettant de supprimer le message tout en vérifiant qu'il appartient bien au membre qui essaye de le
    $sql = 'DELETE FROM liste_proprietaire WHERE id = '. $id .';';
    // on lance cette requête SQL
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

    mysql_close();

    header ('Location: index.php');
    exit();
}
else
{
?>
<p style="color: #f00; background-color: #ffc; font-weight: bold">! Erreur, aucun identifiant sélectionné !</p>
<?php
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

11 janv. 2006, 19:15

A juste une petite question encore tu as du remarqué que j'ai effectué un $_GET sur une varialbe marqué lettre avec une requête. Cela va me serviere a faire un affichge filtré c a d que si on clique sur la lettre A il affiche juste les nom dont sa commence par un A ainsi de suite. Mais le probleme c'est que le liens que je fais marche pas tu penses que c'est dans ma requête ou autre que ca merde.

Mammouth du PHP | 19672 Messages

11 janv. 2006, 19:21

Il en manque un petit bout dans ton code :
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';

$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
if($lettre)
{
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
    $sql .=  strtolower($lettre) . '){1}"';
}

$sql .= 'ORDER BY nom';
devrait être soit:
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';

$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
if($lettre != "")
{
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
    $sql .=  strtolower($lettre) . '){1}"';
}

$sql .= 'ORDER BY nom';
Soit
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : null;

$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
if(isset($lettre))
{
    $sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
    $sql .=  strtolower($lettre) . '){1}"';
}

$sql .= 'ORDER BY nom';
Et en fait on pourrait simplifier avec:
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : null;

$sql = "SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ";
if(isset($lettre))
{
    $sql .= "WHERE `nom` LIKE '". $lettre ."%';";
}
$sql .= "ORDER BY nom";
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: