| ||||||||
Astucien | Bonjour,
J'ai une base mysql. J'ai commencé à faire un site pour gérer cette base (en local, uniquement, pour l'instant).
Ds un menu, je peux choisir de supprimer un élément de la base.
Je fais donc une rech de cet élément, qui est affiché, et ensuite je choisi en cliquanrdessus de le supprimer.
Mais à ce moment, j'ai ce msg :
You don't have permission to access /php/formulaire/DELETE * FROM hdd where nom like HUMBERTAND prenom like Thierry AND date_naissance like 27.12.1963>Suppression</a><td bgcolor= on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.[pleurer]
Je me connecte en tant que root sur ma base ....... donc avec ts les droits !!!!????
Qqun peut-il m'aider ????
[smile]
Merci
Modifié par t671 le 03/01/2005 13:23 | |||||||
Publicité | ||||||||
| ||||||||
Astucien | Salut,
Il n'y a aucun probleme de droits MySQL ici.
Ta requete MySQL ne doit pas se trouver dans un lien comme elle l'est dans ton bout de code !
Tu peux procéder de la sorte :
<a href="./action.php?mode=suppression">Suppression</a>
un lien vers le fichier qui sera chargé de supprimer les enregistrements.
et dans ce fichier [action.php dans mon lien du dessus] (je procede comme si tu utilise le PHP comme language)
<?php
mysql_connect('', '', ''); //connexion, à completer
mysql_select_db(''); //base de donnée, à completer
if($HTTP_GET_VARS['mode'] == 'suppression') //si le parametre entré est la suppression, alors ...
{
mysql_query('DELETE * FROM hdd where nom like HUMBERTAND prenom like Thierry AND date_naissance like 27.12.1963'); //ta requete de suppresion
}
mysql_close(); //fermeture de la connexion
?>
J'espere t'avoir éclairé ...
@++ Modifié par STAR*PC le 26/12/2004 22:52 | |||||||
Astucien | Merci beaucoup STAR*PC pour ton aide.
Je répond un peu en retard car très pris cesderniers temps .......!!!
J'ai fait ce que tu m'as dit, mais le résultat ne fonctionne pas.
Quand je sélectionne (clic) l'élément à supprimer, j'obtient une page blanche (ce qui peut-être normal), mais l'élément est tjrs présent ds ma base.
Voici ce que j'ai écrit :
1°) formulaire afficher suite à une recherche sur nom, prénom et datede naissance :
// Affichage des résultats dans un tableau.
if($total) {
// début du tableau
echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres Nom et Prénom dans 3 colonnes
echo '<tr>';
echo '<td bgcolor="#669999" width="156"><center><b><u>Nom</u></b></td>';
echo '<td bgcolor="#669999" width="200"><b><u>Prénom</u></b></td>';
echo '<td bgcolor="#669999" width="89"><b><u>Né le</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 3 colonne.
while($row = mysql_fetch_array($result)) {
echo '<td bgcolor="#CCCCCC" width="156"><a href="./suppression.php?mode=suppression">'.$row['nom'].'</a></td>';
echo '<td bgcolor="#CCCCCC" width="200">'.$row['prenom'].'</td>';
echo '<td bgcolor="#CCCCCC" width="89">'.$row['date_naissance'].'</td>';
echo '</tr>'."\n";
}
2°) Suppression de l'élément après sélection (clic)- suppression.php :
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'thhu';
$pass = '';
$db = 'base_gedcom';
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
// suppression
if($HTTP_GET_VARS['mode'] == 'suppression') //si le parametre entré est la suppression, alors ...
{
mysql_query('DELETE * FROM hdd where nom like .$row['nom'].');
}
mysql_close(); //fermeture de la connexion
?>
J'ai essayé plusieurs manière d'indiquer le $row ds le mysql_query(delete), sans succès. Et comme je t'ai dit, je n'ai pô de msg d'erreur .... !!!???
Tu en penses quoi ? | |||||||
Astucien | Salut,
Tout est bon, seulement la variable $row n'est pas définie dans le fichier suppression.php !
Donc il te faut trouver une alternative en passant des parametres en URL ou dans un formulaire.
Moi j'aurais crée une autre colonne dans ta table, afin de définir chaque enregistrement par un numéro. Il suffit ensuite de passer ce numéro dans l'URL, de le récuperer dans le fichier de suppression ...
Dans ton cas, tu peux faire avec le nom+prénom mais attention certains caractères peuvent etre problématiques.
Ca ferais donc :
1°) formulaire afficher suite à une recherche sur nom, prénom et datede naissance :
// Affichage des résultats dans un tableau.
if($total) {
// début du tableau
echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres Nom et Prénom dans 3 colonnes
echo '<tr>';
echo '<td bgcolor="#669999" width="156"><center><b><u>Nom</u></b></td>';
echo '<td bgcolor="#669999" width="200"><b><u>Prénom</u></b></td>';
echo '<td bgcolor="#669999" width="89"><b><u>Né le</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 3 colonne.
while($row = mysql_fetch_array($result)) {
echo '<td bgcolor="#CCCCCC" width="156"><a href="./suppression.php?nom='.$row['nom'].'&prenom='.$row['prenom'].'">'.$row['nom'].'</a></td>';
echo '<td bgcolor="#CCCCCC" width="200">'.$row['prenom'].'</td>';
echo '<td bgcolor="#CCCCCC" width="89">'.$row['date_naissance'].'</td>';
echo '</tr>'."\n";
}
2°) Suppression de l'élément après sélection (clic)- suppression.php :
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'thhu';
$pass = '';
$db = 'base_gedcom';
$nom = $HTTP_GET_VARS['nom'];
$prenom = $HTTP_GET_VARS['prenom'];
if(!$nom OR !$prenom) // on vérifie que l'on a bien le nom ET le prenom
{
echo '<b>Erreur:</b> un parametre est manquant, nom ou prenom.';
break;
}
// connection à la DB
mysql_connect ($host,$user,$pass);
mysql_select_db($db);
// suppression
$suppression = mysql_query('DELETE * FROM hdd WHERE nom='.$nom.' AND prenom='.$prenom);
if($suppression)
{
echo '<b>Suppression effectuée</b>';
}
else
{
echo '<b>Erreur:</b> '.mysql_error();
}
mysql_close(); //fermeture de la connexion
?>
Après tu peux améliorer en protegeant un peu tout ça (vérifications & demandes de confirmations de suppression) ...
@++ Modifié par STAR*PC le 30/12/2004 18:35 | |||||||
Astucien | Bonjour STAR*PC. Et tout d'abord, meilleurs voeux de bonheur à toi, ainsi qu'à toute l'équipe de PC Astuces et à ses adhérents ....!!!
Pour en revenir à ma programmation en php, j'ai finalement créer une colonne numéroté en "auto-incrémente" ds ma base mysql. Qui me permettra à repérer mes éléments plus facilement.
Et voici ce que j'ai écrit ds mon script :
1) Sélection de l'élément à supprimer :
....
<form method="post" action="suppression.php">
<center>
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'thhu';
$pass = '';
$db = 'base_gedcom';
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
// requête SQL qui compte le nombre total d'enregistrements ($total) dans la table et qui
//récupère tous les enregistrements + tri ascendant des noms ($select)
$select = "SELECT numero,nom,prenom,date_naissance FROM hdd where nom like '$nom' AND prenom like '$prenom%'";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
//affichage du nb d'enregistrements trouvés
echo '<b>';
echo "Il y a $total individus proposé à la suppression.<br>Faites votre choix\n";
echo '</b><p>';
// Affichage des résultats dans un tableau.
if($total) {
// début du tableau
echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres Nom et Prénom
echo '<tr>';
echo '<td bgcolor="#669999" width="89"><b><u>Numéro</u></b></td>';
echo '<td bgcolor="#669999" width="156"><center><b><u>Nom</u></b></td>';
echo '<td bgcolor="#669999" width="200"><b><u>Prénom</u></b></td>';
echo '<td bgcolor="#669999" width="89"><b><u>Né le</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats
while($row = mysql_fetch_array($result)) {
echo '<td bgcolor="#CCCCCC" width="200"><a href="./suppression.php?mode=suppression">'.$row['numero'].'</a></td>';
echo '<td bgcolor="#CCCCCC" width="156">'.$row['nom'].'</td>';
echo '<td bgcolor="#CCCCCC" width="200">'.$row['prenom'].'</td>';
echo '<td bgcolor="#CCCCCC" width="89">'.$row['date_naissance'].'</td>';
echo '</tr>'."\n";
}
}
mysql_free_result($result);
?>
.....
2) suppression de l'élément (suppression.php)
<?php
// information pour la connection à la DB
$host = 'localhost';
$user = 'thhu';
$pass = '';
$db = 'base_gedcom';
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
$numero = $_POST['numero'];
// suppression
if($HTTP_GET_VARS['mode'] == 'suppression') //si le parametre entré est la suppression, alors ...
mysql_query("DELETE * FROM hdd where numero='$numero'");
if($suppression)
{
echo '<b>Suppression effectuée</b>';
}
else
{
echo '<b>Erreur:</b> '.mysql_error();
}
mysql_close(); //fermeture de la connexion
?>
Et avec ceci, j'obient le msg d'erreur :
Erreur: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM hdd where numero=''' at line 1
En fait, ma variable $numero ne passe pas d'un programme à l'autre (je l'ai testé pour qu'elle s'affiche, mais rien ne s'affiche ....).
Comment pourrais-je faire pour la récupérer ???
Merci !!!! | |||||||
Astucien | Salut, tous mes meilleurs voeux également,
En effet la variable numéro ne passe pas, puisque tu ne l'a fait pas passer.
Tu as 2 solutions pour la faire passer d'une page à l'autre,
- par POST
- par URL
par post, ça consiste à créer un champ invisible contenant le numéro, ce champ est ensuite envoyer à l'autre page par un bouton POST
par URL, simplement passer le numéro dans un parametres dans l'URL.
Je pense que c'est ce second cas qui est préférable ici.
Donc, voici les modifs :
-------------------
echo '<td bgcolor="#CCCCCC" width="200"><a href="./suppression.php?mode=suppression">'.$row['numero'].'</a></td>';
remplacer par :
echo '<td bgcolor="#CCCCCC" width="200"><a href="./suppression.php?mode=suppression&numero='.$row['numero'].'">'.$row['numero'].'</a></td>';
-------------------
$numero = $_POST['numero'];
remplacer par :
$numero = $_GET['numero'];
OU
$numero = $HTTP_GET_VARS['numero'];
(c'est la même chose)
-------------------
mysql_query("DELETE * FROM hdd where numero='$numero'");
remplacer par :
$suppression = mysql_query("DELETE * FROM hdd where numero='$numero'");
(car après j'ai mis une vérification de la requete (if($suppression) ...)
-------------------
Voilà, j'ai pas tout (re)regarder, mais je pense que là ça sera bon ;)
@++
Edit: je vois un début de formulaire en haut, je ne vois pas son utilité ici ... Modifié par STAR*PC le 01/01/2005 15:59 | |||||||
Astucien | Merci STAR*PC ......... ça fonctionne !!!!!![happy]
J'ai justeenlevé l'* dans la requête après le DELETE, et c'est ok !!!!!
Merci bcp de m'avoir aidé !!!!!! [cool]
Quand tu me parles de formulaire, je suppose que tu fais référence à "<form method="post" action="suppression.php">" ???
Je pensais que cette cmde permettait de passer une donnée d'un prog à un autre ....... | |||||||
Astucien |
| |||||||
Astucien |
| |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | |||||||||||||||
|