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 :

[SQL] Problème de requête


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut [SQL] Problème de requête
    Bonjour,

    J'ai un petit souci avec un update sur une table. Le prob est que cette table n'a pas de champs id auto incrémenté. Donc foireux, je n'est pas réalisé cette base de donnée et elle est déjà en service avec blindé de donnée donc pas facile de faire un id de dedans.

    Donc il faut que je trouve une idée pour mettre à jour cette table.

    Voici le code et je vous explique ma démarche après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while(isset($_POST['newgrp'.$id]))
    		{
    		$idmon=$_POST['mon'.$id];
    		$idgrp=$_POST['grp'.$id];
    		$newgrp=$_POST['newgrp'.$id];
    		$sqllnk="UPDATE into lnk_users_grp SET grp_id='.$newgrp.' WHERE users_id='.$idmon.' AND grp_id='.$idgrp.'";
    		mysql_query ($sqllnk) or die (mysql_error());	
    		$id++;
    		}
    Donc pour faciliter le codage de la requête sql j'affecte mes post à des variables. Pas génial je sais mais je trouve cela plus facile,
    Le but est de modifier le champ grp_id avec une nouvelle valeur si les deux conditions suivante sont remplies. Donc si users_id=idmon et grp_id=idgrp.

    Sur le fond je pense que cela doit fonctionner mais en réaliter peut-être pas.
    Est-il possible de modifier un champs avec un ancienne valeur, et puis de le modifier en suite sur la même requête ?

    A l'aide je galère grave.

    Merci d'avance,

    Stu76

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Je sais qu'il est impossible de faire une sous-requête sur la table en cours de changement. En revanche, je pense que ta requête devrait fonctionner...
    mysql_error ne te renvoie pas d'erreur ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Bonjour Célira,

    Non rien, pourtant j'ai fait des tests mais rien ne ressort, pq ?

    je cherche toujours, pas encore trouvé la solution, sinon tu connais pas un autre moyen de réaliser l'update vu que je n'ai pas de champ id auto incrémenté.

    Merci,

    Stu76

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    as tu testé ta requête directement en sql ..

    affiche ta requête avant de l'envoyer aussi

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Si ça nre renvoit pas d'erreur, c'est qu'il n'y a pas d'erreur au sens syntaxique du terme. Ce qui ne veut pas dire que ça fonctionne, malheureusement

    On peut faire deux choses pour essayer de voir ce qui cloche : faire un select aux même conditions avant l'update, pour voir si il trouve un enregistrement à modifier, et afficher la requête d'update pour voir si il n'y a pas un truc qui cloche dedans...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sqlverif="SELECT grp_id, users_id FROM lnk_users_grp WHERE users_id='.$idmon.' AND grp_id='.$idgrp.'";
    $verifres = mysql_query ($sqlverif) or die (mysql_error());	
    echo "enregistrement trouvé : ".mysql_num_rows($verifres);
    $sqllnk="UPDATE into lnk_users_grp SET grp_id='.$newgrp.' WHERE users_id='.$idmon.' AND grp_id='.$idgrp.'";
    echo "requete update : ".$sqllnk;
    mysql_query ($sqllnk) or die (mysql_error());
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Merci de vous penchez sur mon prob, je vais tester vos propositions et je vous dit quoi.

    Stu76

  7. #7
    Membre confirmé
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut
    tu peux enlever le "into" apres le "update" et virer les '..' dans la requête qui ne servent à rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sqlverif="SELECT grp_id, users_id FROM lnk_users_grp WHERE users_id= $idmon AND grp_id= $idgrp";
    $verifres = mysql_query ($sqlverif) or die (mysql_error());	
     
    $sqllnk="UPDATE lnk_users_grp SET grp_id= '$newgrp' WHERE users_id= '$idmon' AND grp_id= '$idgrp' ";
     
    mysql_query ($sqllnk) or die (mysql_error());

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Re,

    Quand j'exécute ma requête sql dans phpmyadmin effectivement il me retourne une erreur sql la #1064

    Voici exactement le contenu :

    #1064 - You have an error in your SQL syntax; check the manuel that corresponds to your MySQL server version for the right syntax to use near

    Le prob est que je regarde dans tout mes manuels SQL et la requête en principe est bonne mais bon, apparement mon serveur ne veut pas de elle.

    je vais encore creuser l'histoire. Je vais un peu voir avec ce que tu proposes Celira.

    Si vous voyez plus clair, vous pouvez me donner des pistes.

    Stu76

  9. #9
    Membre confirmé
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut
    si tu as des manuels avec une syntaxe "update into" tu peux les jeter !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Salut,

    Je viens de tester vos propositions et ma requête SELECT me retourne les enregistrements, mais maglré tout je n'arrive pas à faire mon update Zarbie comme truc.

    Si vous avez une idée pour contourner ce prob franchement elle est la bien venue. Car je n'y comprend plus rien, mais bon il y a bien une solution à ce prob.

    Stu76

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Effectivement il y a eu une confusion entre la syntaxe d'insert et celle d'update
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT [INTO] nom_de_la_table_cible [(liste_des_colonnes_visées)] 
    {VALUES (liste_des_valeurs) | requête_select | DEFAULT VALUES }
     
    UPDATE nom_table_cible
    SET colonne = valeur [, colonne2 = valeur2 ...]
    [WHERE condition]

    On peut avoir la dernière version de tes requêtes ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Merci Celira, mais tu peux être plus clair car je ne vois pas ce que tu veux dire.
    Désolé,

    Merci pour ton analyse du prob.

    les dernières requêtes sont celle proposé par ema*h, dont je vais suivre les conseilles pour les manuels, lol.
    La machine sur laquelle je développe n'est pas raccordé sur le net. Sinon je ferais un copier/coller.



    Je viens de suivre encore les conseils de ema*h, j'ai vérifier mes requêtes dans un livre sql tout en poche et effectivement le into est pour les insert et non pour les updates. Bien vu ema*h, je vais viré ce vieux cours, je pense que c'est une petite erreur d'écriture du prof.
    Enfin sinon, le livre ne me dit pas plus le problème est que je ne trouve pas d'exemple avec un AND, donc galère. Mais bon je creuse encore le sujet.



    Je viens d'essayer de remplacer mon AND par une virgule et rien ne change, la requête ne fonctionne pas.
    Je pensais modifier la table, ne pourrait on pas créer un champ id que l'on va remplir avec une requête. En suite je me serre de ce champ comme d'un champ id pour mes modifications. Bien sur cela demande une petite adaptation d'autre code.
    Mais la solution n'est pas impossible ? Quand pensez-vous ?

  13. #13
    Membre confirmé
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut
    La bonne syntaxe serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sqllnk="UPDATE lnk_users_grp SET grp_id= '$newgrp' WHERE (users_id= '$idmon' AND grp_id= '$idgrp') ";
    Je pense..

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Salut ema*h,

    Je viens de tester ta proposition et rien même résultat que avant.

    Merci pour cette proposition. Que pense tu de créer un champ id ?

  15. #15
    Membre confirmé
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut
    Quelle est l'erreur renvoyée pour ta requête qui ne marche pas?

    Sinon je pense que c jouable sans modifier tes tables

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Re ema*h,

    Je reviens sur ce que j'ai dit je n'ai plus d'erreur SQL, il y avait une petit erreur de syntaxe. Et quand j'exécute ma requête dans phpmyadmin sa fonctionne.
    Mais pas avec le code je sais par pq ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while(isset($_POST['newgrp'.$id]))
    		{
    		$idmon=$_POST['mon'.$id];
    		$idgrp=$_POST['grp'.$id];
    		$newgrp=$_POST['newgrp'.$id];
    		$sqllnk="UPDATE lnk_users_grp SET grp_id='$newgrp' WHERE (users_id='$idmon' AND grp_id='$idgrp')";
    		mysql_query ($sqllnk) or die (mysql_error());	
    		$id++;
    		}
    Donc la requête est bonne mais rien ne s'enregistre dans ma base de donnée. Je pense que cela est dû à mon input type=text qui s'affiche X fois; le prob est que je ne change pas tout les groups. Donc j'ai des $_POST['newgrp'] qui sont vident. Je devrais faire un test pour voir si il est vide alors sinon, un peu comme dans delphi un if then else, mais en php on fait comment pour inclure le tout dans une boucle while en plus.

    En tout cas un tout grand merci pour votre aide j'apprend bcp.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Bonsoir,

    Un tout grand merci à Celira et ema*h pour leurs aides, j'ai enfin trouvé la solution. Mais je vous avoue que sans vous deux j'aurais encore galéré longtemps. Merci pour votre aide et a bientôt.

    Stu76

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

Discussions similaires

  1. [SQL] Problème de requête et <tr>+<td>
    Par ruty dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/08/2006, 09h10
  2. [SQL] Problème bizarre requête date
    Par masseur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 13h12
  3. [Oracle] [SQL] problème de requête
    Par joselito dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 25/01/2006, 12h55
  4. [SQL]problème de requête.
    Par shnouf dans le forum Oracle
    Réponses: 21
    Dernier message: 24/01/2006, 11h12
  5. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07

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