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 :

Requête SQL update inopérante [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut Requête SQL update inopérante
    Bonjour à tous,

    Voilà deux après-midi que je me casse la tête sur un script pourtant trivial. Je ne comprends pas où est mon erreur. Vous êtes mon derniers recours

    J'écris un petit script PHP pour poster des news. Ces dernières sont enregistrées dans une table 'news'. Un des champs de la table s'appelle 'statut' (tinyint(1)) qui peut prendre la valeur 0 ou 1, pour respectivement non publié et publié, soit un boléen.

    J'ai écrit un script tout simple qui met à jour cette valeur. Le voici :

    Script de mise à jour de la valeur du statut :
    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
     
    //Instanciation de l'objet
    		$news = new news;
     
    //Méthode news_content : récupère les données d'une ligne de la table pour un id de news donné.
    		$tableauNews = $news -> news_content($newsId);
     
    //Mise à jour de la table suivant la valeur du statut.
    		if ($tableauNews['statut']) { 
     
    			$requete = "UPDATE news
    				        SET statut = 0
    			    	    WHERE id = '$newsId'";
     
    	    	        mysql_query($requete);
     
    		}else{
     
    			$requete = "UPDATE news
    				        SET statut = 1
    			    	    WHERE id = '$newsId'";
     
    	    	        mysql_query($requete);
     
    		}
    La méthode news_content de la classe news :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function news_content($idNews) {
     
    		global $tableMySQL;
     
    		$requete = "SELECT redacteur, titre, article, timestamp, statut 
    					FROM " . $tableMySQL . "news
    					WHERE id = '$idNews' ";
     
    		$ressource = mysql_query($requete);
    		return mysql_fetch_array($ressource);
     
    	}
    Et cela ne fonctionne pas. A vrai dire, si je fais une requête SELECT juste après le script de mise à jour, la valeur apparaît bien à jour. Sauf que, dans phpmyadmin ou même dans mon listage de news, rien n'a changé. Je ne comprends vraiment pas. Si quelqu'un aurait une piste ou aurait déjà rencontré un problème similaire, je suis prenant.

    Je tourne en rond. Quelque fois cela a un comportement assez bizarre. Par exemple si j'enlève le "else", le script fonctionne. Les données sont bien mises à jour. J'ai essayé de réécrire le script sans utiliser les classes (initialement, la mise à jour de la table se fait aussi par une méthode de classe), cela ne change rien.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut que tu debug : Controle la valeur de ton tableau $tableauNews et affiche tes requetes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Déjà fait.

    Par exemple, voici le résultat d'un debug pour le script ci-dessus :

    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
     
     
    //Valeur $tableauNews
    array(10) { [0]=> string(1) "1" ["redacteur"]=> string(1) "1" [1]=> string(6) "News 3" ["titre"]=> string(6) "News 3" [2]=> string(6) "News 3" ["article"]=> string(6) "News 3" [3]=> string(19) "2008-10-04 16:32:58" ["timestamp"]=> string(19) "2008-10-04 16:32:58" [4]=> string(1) "1" ["statut"]=> string(1) "1" } 
     
     
    //Valeur $tableauNews['statut'] avant la requête update (newsId = 3, statut = 1)
    Valeur du statut pour la news 3 : 1
     
    //Requête
    string(65) "UPDATE news SET statut = 0 WHERE id = '3'" 
     
    //Valeur $tableauNews['statut'] après la requête update (newsId = 3, statut = 0)
    Valeur du statut pour la news 3 : 0
     
    //Requête SELECT sur la table (id de la news - statut).
    1 - 1
    2 - 0
    3 - 0 //La ligne qui vient d'être modifiée.
     
    //Message de confirmation
    La news a été mise hors ligne.
    Bref, tout semble fonctionner, sauf que...

    Le plus bizarre est que le script me renvoie la valeur mise à jour, mais que rien ne change dans phpmyadmin ou pour le quidam du monde réel. Existe-t-il un moyen de voir les "logs" du serveur MySQL ou de les faire apparaître via PHP ?

    La requête fonctionne en la copiant dans phpmyadmin.

    Autre chose étrange. Si je ne teste qu'une des conditions dans le script, cela fonctionne. La valeur est mise à jour. Dès lors que je mets les deux conditions pour les deux cas, cela ne fonctionne plus.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu es sur de travailler sur la bonne base / bon serveur ?

    Dès lors que je mets les deux conditions pour les deux cas, cela ne fonctionne plus.
    Et que donne ton debug dans ce cas la ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Le débug ci-dessus correspond à cette situation. Si je schématise mon code :


    idNews = 20 //au hasard
    statut = tableau['statut'] = 0 //La news n'est actuellement pas publié.

    Si le statut correspond à 0
    => Mettre à jour le statut dans la table news à 1 pour l'id 20.
    => La news a été publié.
    Sinon
    => Mettre à jour le statut dans la table news à 0 pour l'id 20.
    => La news a été mise hors-ligne.

    Requête SELECT
    => Le statut de la news 20 correspond à 1.
    Cela correspond au Code de mon premier post. Lors de mon debug, je fais une requête SELECT sur la table que le script vient de modifier et il me retourne la valeur effectivement modifiée.

    Sauf que ce code ne fonctionne pas. Si je vais vérifier la table dans phpmyadmin, la valeur n'a pas été modifiée. (Littéralement, j'ai une fenêtre sur mon script, l'autre sur phpmyadmin. J'exécute mon code, le debug me répond que tout est bon, mais la valeur reste inchangée dans phpmyadmin.). Le débug me dit oui alors que phpmyadmin me dit non.

    Même problème si la valeur du statut correspond à 1.


    Par contre il me suffit de modifier le code de cette manière :


    idNews = 20 //au hasard
    statut = tableau['statut'] = 0 //La news n'est actuellement pas publié.

    Si le statut correspond à 0
    => Mettre à jour le statut dans la table news à 1 pour l'id 20.
    => La news a été publié.

    //Suppression de la deuxième condition.

    Requête SELECT
    => Le statut de la news 20 correspond à 1.
    J'enlève la deuxième condition, le débug me répond de la même manière qu'avant. Sauf que la modification s'est effectivement faite. Elle est visible dans phpmyadmin. Pour modifier ma valeur de 1 à 0, il me suffit de modifier la condition. Mais dès que je mets les deux conditions dans le même script en même temps, cela ne fonctionne pas. Que ça soit par deux if, un if/else ou même un switch.

    C'est comme si les opérations suivantes étaient impossibles :


    SELECT statut depuis news
    => statut == 0 ou 1

    si statut == 0
    => UPDATE sur news, statut à 1
    sinon
    => UPDATE sur news, statut à 0

    SELECT statut depuis news
    => statut == 0 ou 1

    si statut == 0
    => UPDATE sur news, statut à 1
    si statut == 1
    => UPDATE sur news, statut à 0

    SELECT statut depuis news
    => statut == 0 ou 1

    switch statut
    case 0 => UPDATE sur news, statut à 1
    case 1=> UPDATE sur news, statut à 0
    Alors que les codes suivants fonctionnent :


    SELECT statut depuis news
    => statut == 0 ou 1

    si statut == 0
    => UPDATE sur news, statut à 1

    SELECT statut depuis news
    => statut == 0 ou 1

    si statut == 1
    => UPDATE sur news, statut à 0

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    J'ai repris ton code et il fonctionne comme attendu chez moi.

    Est-ce que tu pourrais nous mettre un dump de ta base et la partie minimal de ton code ?

    Tu ne m'as pas repondu sur l'eventualité du fait que ton phpmyadmin et le code sur lequel tu travailles ne se connectent pas a la meme base.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Requête SQL UPDATE dans VBA
    Par Pingouin22 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/09/2022, 10h37
  2. Requête SQL 'UPDATE' en Java
    Par Grulf dans le forum JDBC
    Réponses: 5
    Dernier message: 11/06/2008, 09h32
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04
  5. Access - Requête SQL - UPDATE
    Par tchoo83 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/12/2005, 15h48

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