IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème PHP / MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 26
    Points
    26
    Par défaut Problème PHP / MySQL
    Bonjour tout le monde,

    je rame je rame je rame !

    alors voici mon petit soucis,

    la page qui contient ce code php et requêtes SQL est une page qui sert de gestion des news, dans laquelle on peut les supprimer.

    donc a l'ouverture de la page, il y a une requête qui recherche toutes les news et qui les affiche dans un tableau (html) ( seulement celle qui sont publie = 1)

    lors de la création de ce tableau, il y a aussi une création dynamique d'un bouton, avec lequel on supprime la news qui se situe sur la même ligne.

    Mais j'ai un problème au niveau des recuperation des données de la ligne.

    par exemple, je n'arrive pas a mettre en relation la news 1 avec le bouton de cette ligne.

    $indexnews et un tableau à 2 dimensions
    clé [0] = valeure idnews
    clé [1] = valeure idnews
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $indexnews = array($i => $data['idnews']); // sauvegarde de idnews
    par contre j'arrive à supprimer les news, mais seulement dans un ordre précis.
    c'est-à-dire, en partant de la dernière news crée en allant une par une à la première.

    c'est compliqué à expliquer...

    si vous avez des questions, ou l'envie d'avoir directement la page complète faite moi signe.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
     
    // requête pour afficher les articles sur le panneau de suppression 
     
    $sql = "select idnews, titre, date from news where publie='1'";
    $req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());?>
     
     
     // création de la table de base-------------
    <form action="G_news.php" method="post">
      <table>
        <tr>
    	<td>ID</td><td>Titre</td><td>Date</td><td>Supprimer</td>
        </tr>
     
        <?php $i = 0;
           while ($data = mysql_fetch_assoc($req)){ ;  ?>
     
               <tr> 
                <td><?php echo $data['idnews']?></td>
                 <td><?php echo $data['titre']?></td>
    	     <td><?php echo $data['date'];?></td>
    	      <td><input type="submit" name="effacer" value="<?php echo $i ?>" /></td>
     
          <?php 
           $indexnews = array($i => $data['idnews']); // sauvegarde de idnews
    	?>
    	     </tr>
     
    <!-- requete pour les articles à supprimer---------------->
      <?php 
    	$i++; } //fin while
     
           if(isset($_POST['effacer'])){
           $sqlDEL = "DELETE FROM news WHERE idnews ='".$indexnews[$_POST['effacer']]."';";
           $req = mysql_query($sqlDEL);
    			                     } //fin isset
     
    mysql_close();
    		     ?>
    et voici la composition de la table news


  2. #2
    Membre habitué
    Inscrit en
    Décembre 2009
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 79
    Points : 152
    Points
    152
    Par défaut
    Pour reprendre ce que tu as fait, je changerais le code de la façon suivante.
    Evidemment je peux difficilement tester, j'espère que ça ira.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
     
    if(isset($_GET['effacer'])) {
           $sqlDEL = "DELETE FROM news WHERE idnews = '".$indexnews[$_GET['effacer']]."';";
           $req = mysql_query($sqlDEL);
    }
     
    // requête pour afficher les articles sur le panneau de suppression 
     
    $sql = "select idnews, titre, date from news where publie='1'";
    $req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());?>
     
     
     // création de la table de base-------------
    <form action="G_news.php" method="post">
      <table>
        <tr>
    	<td>ID</td><td>Titre</td><td>Date</td><td>Supprimer</td>
        </tr>
     
        <?php $i = 0;
           while ($data = mysql_fetch_assoc($req)){ ;  ?>
     
               <tr> 
                <td><?php echo $data['idnews']?></td>
                 <td><?php echo $data['titre']?></td>
    	     <td><?php echo $data['date'];?></td>
    	      <td><input type="submit" onclick="window.location='?effacer=<?php echo $i ?>';" /></td>
     
          <?php 
           $indexnews = array($i => $data['idnews']); // sauvegarde de idnews
    	?>
    	     </tr>
     
    <!-- requete pour les articles à supprimer---------------->
      <?php 
    	$i++; } //fin while
     
    mysql_close();
     
    ?>

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Merci OlgarK,

    mais dernière nouvelle que j'ai remarqué.

    la requête qui sert a effacer la news est erroné car elle prends uniquement la dernière valeur du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqlDEL = "DELETE FROM news WHERE idnews = '".$indexnews[$_POST['effacer']]."';";
    ce qu'il expliquerai : pour supprimer les news, il faut aller du dernier au premier.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut
    $i est inutile, c'est $data['idnews'] l'identifiant de l'enregistrement.
    J'ai pas testé mais quelque chose du genre devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
     
    if(isset($_GET['effacer'])) {
           $sqlDEL = "DELETE FROM news WHERE idnews = '".$_GET['effacer']."'";
           $req = mysql_query($sqlDEL);
    }
     
    // requête pour afficher les articles sur le panneau de suppression 
     
    $sql = "select idnews, titre, date from news where publie='1'";
    $req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
    ?>
     
     
     // création de la table de base-------------
    <form action="G_news.php" method="post">
      <table>
        <tr>
    	<td>ID</td><td>Titre</td><td>Date</td><td>Supprimer</td>
        </tr>
     
        <?php
           while ($data = mysql_fetch_assoc($req)){ ;  ?>
     
               <tr> 
                <td><?php echo $data['idnews']?></td>
                 <td><?php echo $data['titre']?></td>
    	     <td><?php echo $data['date'];?></td>
    	      <td><input type="submit" onclick="window.location='?effacer=<?php echo $data['idnews'] ?>';" /></td>
    	     </tr>
     
    <!-- requete pour les articles à supprimer---------------->
      <?php 
    	$i++; } //fin while
     
    mysql_close();
     
    ?>
    Par contre ce genre de code n'effectue aucune vérification d'accès et demande de confirmation, donc ce n'est pas à utiliser "tel quel".

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" onclick="window.location='?effacer=<?php echo $i ?>';" />
    A mon sens, ce n'est pas $i qu'il faudrait passer en paramètre, mais l'ID de la news : $data['idnews']

    Cependant, faudrait revoir la manière d'envoyer le paramètre 'effacer', et surtout le JS : window.location= ??? Il n'y a pas de nom de page. Il faut au moins un nom, non ?

    Et puis, à quoi il sert le formulaire dans ce cas là ?
    A mon sens, il serait mieux d'envoyer cette donnée de manière plus classique, sans renfort de JS.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Merci tout le monde !

    (moi qui croyait qu'à la fin de la journée j'allais me pendre ...)

    Alors, j'ai essayé avec la solution de Palca et en effet ça marche.

    donc oui le $i était inutile et ma tout fait brouillé.

    merci encore tout le monde pour vos réponse (très très rapide).

    a+

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    J'ai juste une petite derniere question,

    lors de vos modifications, vous avez changer de méthode d'envois.(de $_POST à $_GET)

    pourquoi ? ça change vraiment quelque chose ?

    merci a+

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    pourquoi ? ça change vraiment quelque chose ?
    Avec le principe que tu utilise, si un utilisateur lamdba saisie ceci dans la barre d'adresse de son navigateur :
    -http://www.domaine.com/G_news.php?effacer=20
    et bien si la news dont l'ID vaut 20 existe, elle sera supprimée
    Est ce que tu vois où est le blême ?

    Puis s'il est proposée 2 méthodes, c'est qu'il y a forcément des différences, et des avantages et des inconvénients aussi.
    Faire une recherche sur le Web (Google, Yahoo, etc ...) sera à mon sens très efficace pour avoir des réponses.
    Un topic sur le sujet il n'y a pas si longtemps : POST vs GET : lequel choisir ?

    Puis tu ne répond pas à la question :
    Et puis, à quoi il sert le formulaire dans ce cas là ?
    En tout cas, se que je veut dire par là, c'est que le principe adopté est quelque peu déroutant.
    Au départ il y un un formulaire, puis un bouton de type "submit" (qui sert à soumettre le formulaire).
    Mais ... on lui "coupe l'herbe sous l'pied" (si on peu dire) en rajoutant un évènement "onclick" avec un couche Javascript qui va au final rediriger l'utilisateur sur une page.

    Du coup, le formulaire ne sert plus à rien, le bouton "submit" aussi.
    Autant mettre un lien <a></a>, qui aurait eu le même effet, et ça, sans sur-couche de Javascript.

    En d'autre terme, pourquoi faire simple quand on peu faire compliqué

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Du coup, tu me propose de le faire en un simple lien avec les balises <a></a>,

    j'ai de la peine a voir ce que je dois mettre dans cette balise, afin de remplacer le JS du onclick du bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" onclick="window.location='?effacer=<?php echo $data['idnews'] ?>';" />
    serait-ce quelque chose du genre ? (voir ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="www.domaine.fr/G_news.php?effacer=<?php echo $data['idnews']?>">effacer</a>
    merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème PHP/Mysql script horaire d'un planning
    Par jessica76 dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2010, 19h30
  2. [MySQL] problème php mysql
    Par thiba dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/12/2009, 11h09
  3. [MySQL] problème php, mysql
    Par mémélia dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/06/2007, 15h53
  4. [MySQL] Problème PHP/Mysql mon php n'exécute pas la requête
    Par matew dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/04/2007, 13h01
  5. problème php mysql
    Par ph_anrys dans le forum Requêtes
    Réponses: 15
    Dernier message: 02/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo