Utiliser DELETE avec des inputs

Résolu
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 14 oct. 2011 à 12:17
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 16 oct. 2011 à 11:27
Bonjour, je débute en php, et je crée (j'essaye) un site pour gérer des demandes utilisateurs.

Je sais utiliser la ligne sql DELETE mais je n'arrive pas a l'utiliser avec des inputs en sortie de boucle.

Voici le code

<?php
session_start();
include('base.php');
include('head.php');
include('menu_Admin.php');
include('gauche.php');
include('gauche_connecter.php');

$y = 0;
$z = 2

if(isset($_GET['page']))
{
$y = $y + ($_GET['page']-1) * 2;

Base();
$sql = 'SELECT * FROM tickets ORDER BY dateTicket ASC LIMIT '.$y.','.$z.'';
$req = mysql_query($sql);
$req_nb = mysql_query('SELECT * FROM tickets');	
$nb = mysql_num_rows($req_nb);

echo'


Gestion
';

while($data = mysql_fetch_array($req))
{
echo
'Créé le : '.$data['dateTicket'].'

De : '.$data['idUser'].'

Pour Objet : '.$data['objTicket'].'

Avec Status : '.$data['prioTicket'].'

Description : '.$data['descTicket'].'


Résolu le : '.$data['date_SoluTicket'].'

Pour Solution : '.$data['soluTicket'].'


<form action="gestion.php" method="POST">


</form>

';
}

$page = ceil($nb / 2);
echo '<form action="gestion.php" method="GET"> Page ';

for($i = 1; $i <= $page; $i++)
{
echo '[gestion.php?page='.$i.' '.$i.']- '; 
}

echo'</form>

';	
}
else
{
Base();
$sql = 'SELECT * FROM tickets ORDER BY dateTicket ASC LIMIT '.$y.','.$z.'';
$req = mysql_query($sql);
$req_nb = mysql_query('SELECT * FROM tickets');	
$nb = mysql_num_rows($req_nb);

echo'


Gestion
';

while($data = mysql_fetch_array($req))
{
echo
'Créé le : '.$data['dateTicket'].'

De : '.$data['idUser'].'

Pour Objet : '.$data['objTicket'].'

Avec Status : '.$data['prioTicket'].'

Description : '.$data['descTicket'].'


Résolu le : '.$data['date_SoluTicket'].'

Pour Solution : '.$data['soluTicket'].'


<form action="gestion.php" method="POST">

</form>

';
}

$page = ceil($nb / 2);
echo '<form action="gestion.php" method="GET"> Page ';

for($i = 1; $i <= $page; $i++)
{
echo '[gestion.php?page='.$i.' '.$i.']- '; 
}

echo'</form>

';	
}

include('foot.php');

?>



Le but c'est qu'au clic de l'input "del" , ça supprime le message directement .
j'ai réussi a le faire avec un input texte ou on y entrait le ou les n°ID mais c'est pas très classe et très énervant a la longue.

je pensais a faire des itérations sur un session que j'aurais crée a la fin de la boucle mais ce n'a pas donné grand chose..

Si vous pouviez me donner une voie ça serait super !
Merci de votre indulgence pour ce code surement basic et pour cette question.

Vous remerciant d'avance.

Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.

5 réponses

cs_nemo_1 Messages postés 60 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 26 octobre 2011
14 oct. 2011 à 13:51
Chalute,

Bon ce que je vois, c'est que tu essaies de supprimer une entrée en cliquer sur un input.

Alors voilà comment j'aurai peut être fait :).

Déjà quelques question:

Pourquoi afficher tes demandes dans un formulaire?
un formulaire n'est pas fait pour cela.

Ce que je te conseille plutôt:

Tu met tes demandes dans un

.

A la fin tu met 2 liens du genre:

[archiver.php?demande= . " title="Archiver cette demande">Archiver]
[delete.php?demande= . " title="Archiver cette demande">Archiver]

Après tu crée 2 pages archiver et du deletes :)

un draft d'une page delete

//Tu inities ta connection
//Tu inserre ou importe tes functions
//Tu escape tous les entrées de sql dans ta BDD
if{intval($_GET['demande']) == 0)){
//Tu fait un redirect ici car tu ne recoit pas un id
}
$id = escape_function($_GET['demande']);
//Tu peux verifier si il y'a une entrée dans ta BDD de cette demande.
if($demande_exist){
$query = "DELETE FROM demandes WHERE id= . escape_function($id)";
$result = muysql_query($query);
if(mysql_affected_rows == 1){
//C'est ok tu fait un redirect ou tu veux
}else{
//Et bimmm tu fous quoi?:)
}
}


Voilà pour ton archivage tu peux faire pareil.

J'espère t'avoir aider.

Pi: un formulaire juste à un client de communiquer avec ta page 'en post ou en get'.

C'est n'est pas une balise d'affichage.

Bon courage :).

Chalute
3
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
14 oct. 2011 à 14:10
Salut nemo_1 !!

Ta bonne humeur fait plaisir a lire :).

Alors pourquoi j'utilise des formulaire, ben euhhhh ben je connais que ça (pour l'instant)

En faite je ne fais pas de demande, juste j'affiche le contenu de la bdd. Si faut le mettre sur une page en dehors des post et get ça doit être faisable.
Ensuite donc je remplace les input par des liens avec du GET et je m'en sert pour récupérer l'id a supprimer . Ca c'est compris je pense, par contre je comprend pas le escape_function . Je vais commencer par essayer avec les liens et le get.


Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
14 oct. 2011 à 14:58
Alors un truc..

Ton système avec les GET et des liens a la place des inputs........

Ça marche NIQUEL !! Bon j'ai toujours pas compris certain des tes points que j'essaye d’étudier mais déjà ça marche et ca c'est cool .
Merci encore Nemo et si tu as le temps a l’occasion pour m'expliquer les derniers points que tu me conseil de changer.


Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
cs_nemo_1 Messages postés 60 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 26 octobre 2011
14 oct. 2011 à 15:51
Chalute,

Désolé, je devais faire quelques courses :)

Bon alors ca avance on dirait.

je te met un code complet car je suis sur mon ordi la:

alors la fontion que j'utilise pour une insertion simple dans la base de donnée:

function mysql_prep( $value ) {
   $magic_quotes_active = get_magic_quotes_gpc();
   $new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0 ,this func oli exist 4 PHP above v4.3.0
   if( $new_enough_php ) { // PHP v4.3.0 or higher
      // undo any magic quote effects so mysql_real_escape_string can do the work
      if( $magic_quotes_active ) { $value = stripslashes( $value ); }
      $value = mysql_real_escape_string( $value );
   } else { // before PHP v4.3.0
      // if magic quotes aren't already on then add slashes manually
      if( !$magic_quotes_active ) { $value = addslashes( $value ); }
      // if magic quotes are active, then the slashes already exist
   }
   return $value;
}

C'est une fonction très portable mais peu te sembler un peu compliquer.

Voilà en gros ce qu'il fait.

Il verifie la version de ton php pour voir s'il y'a mysql_escape_string() qui est valide pour toi ou pas.

Après il check si ton magic_quotes_gpc est actif et au cas contraire addslashes() qui permet d'entrer des données on va dire safe dans le tableau.

Tu peux trouver d'autres functions plus simple n'hesite pas à prendre quelque chose que tu comprend.

alors voilà un exmple plus complet d'une page delete par exple:

<?php require_once("connection.php"); ?>
<?php require_once("functions.php"); ?>
<?php
   //Demande correspond au get passer dans l'url donc fait gaffe
   if(intval($_GET['demande']) == 0){
      redirect_to("outuveux.php");
   }
   $id = mysql_prep($_GET["demande"]);
   if($demande = fonctionderechechedelademande($id)){
      $query "DELETE FROM demandes WHERE id {$id}";
      $result = mysql_query($query);
      if(mysql_affected_rows() == 1){
 //Success
 redirect_to("outuveux.php");
      }else{
 //failure
         //Mouais....
      }
   }
?>
<?php mysql_close($connection); ?>


Pour la fonction qui verifie ta demande si elle existe dans ta base de donnée, voilà ce que je peux te donner:

function get_subject_by_id($demande_id){
   if(!empty($demande_id)){
      $query = "SELECT * FROM demande ";
      $query ." WHERE id ". $demande_id . " ";
      $query .= " LIMIT 1";
      $result_set = mysql_query($query) or die("Mysql query
    failed");
      //REMEMBER
      //If result_set is empty, the fetch will return false.
      //To avoid that, do an if statement
      if($demande = mysql_fetch_assoc($result_set)){
 return $demande; 
      }else{

      }
   }


Bon j'ecris en anglais car je préfere cela :)
en gros tu te connectes a ta BDD et tu vois si ta demande existe dans ta BDD.
Si ton return t'envoie bien une demande c'est que ta demande est dans ta base de donnée donc tu peux la supprimer.

Sinon c'est pas bon.

Ce n'est pas primordial de faire ce check mais plus de sécurité est toujours bien.

cela permet de ne pas avoir un gugus qui va mettre dans ton lien:

www.demandes.php?demand=2736455463474834 alors que cet id n'existe pas.

Donc tu le redirige automatiquement vers le listing des demandes si tu veux en lui disant que cette demande n'existe pas.
Par contre a ce niveau si tu fait un redirect, tu dois mettre ton message dans un cookie et lafficher après mais bon fait simple d'abord.

Pour rediriger voici une fonction simple.
function redirect_to($location){
   if(!empty($location)){
      header("Location:{$location}");
      exit;
   }
}
//Et après tu peux faire redirect_to("monindex.php")


Au plaisir et a bientôt :)

Bon courage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
16 oct. 2011 à 11:27
Super !!! Je m'entraine a essayer tes fonctions, mais en tous cas j'ai enfin reussi a faire ce que je voulais. J'utilisais jamais les get, mais en faite c'est super utile ! Donc encore un grand merci a toi !


Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
0
Rejoignez-nous