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 auto-incrément


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut Problème auto-incrément
    Bonsoir, voilà mon problème, je bosse sur un jeu en PHP/MySQL.

    Mon problème se pose sur ma page duel qui est en cours de création

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    doquery("INSERT INTO {{table}} 
      SET id='', defiant='".$userrow["id"]."', mise='".$_POST['mise']."', 
      name='".$userrow["username"]."', receveur='".$_POST["enemy"]."', 
      fightlvl='$fightlvl'", "duel");
    L'id est en auto_increment, oui, mais voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doquery("DELETE FROM {{table}} WHERE id=
    Cette partie sert à supprimer le duel une fois qu'il a été accepté et terminé

    Je ne suis pas tres doué en sql et je ne vois pas comment faire car l'id=??

    En auto_increment je bloque :s si quelqu'un a une solution pour moi ^^

    merci et bonne soirée

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Juste après ton INSERT, tu récupères l'ID qui vient d'être créée avec :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = mysql_insert_id() ;

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id=LAST_INSERT_ID()

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    doquery("INSERT INTO {{table}} SET id='', defiant='".$userrow["id"]."', bet='".$_POST['bet']."', name='".$userrow["username"]."', receveur='".$_POST["enemy"]."', fightlvl='$fightlvl'", "duel");
    doquery("UPDATE {{table}} SET gold='$gold' WHERE id='".$userrow["id"]."' LIMIT 1", "users");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //on efface le duel dans les sql a la fin du combas
    doquery("DELETE FROM {{table}} WHERE id='$id'", "duel");
    }

    merci pour vos réponses mais toujours le même problème c'est vraiment pas mon truc je vous montre mon code d'origine

    merci a vous

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    Bonjour,

    merci a tous pour vos réponses, mon problème est plutôt simple en utilisant vos requêtes le duel est bien mi dans la base, il est bien envoyer au destinataire, mais une fois le combat fini il ne se supprime pas

    en passant il est vrais que mon code doit être améliorée mais c'est mon premier code donc dans le fond c'est un bon début ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mise='".$_POST['mise]."',  (et non pas bet désolé de l'erreur) qui sert a savoir quel est la mise en or
     
    SET defiant= ".$userrow["id"].",  qui lance le défis 
     
    receveur='".$_POST["enemy"]."', qui est défier ? sert a envoyer le défis a la bonne personne, ["enemy"] est récupère en début de script au moment du choix de qui je veux attaqué
     
    name='".$userrow["username"] j'avoue que la c'est une erreur de ma part cette fonction marche mais aucune utilité
    voila donc mon code marche même si il est pas au top, mon seul probleme reste au le moment ou le duel doit être supprimé de la base

    comme a dit "nsanabi" "je suppose que la suppression dont tu parle ici ne sera pas exécutée au même moment que l'insertion d'un nouveau duel"

    c'est exacte, une fois le duel dans la base il s'affiche sur la page "demande de duel" du défier

    donc le duel ne sera pas supprimé tout de suite vu que le duel est une demande et non pas une attaque instantané

    mais grâce a vous j'apprends plein de chose merci bien

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    au final, est ce que ton problème est résolu en utilisant des variables de session ou peut être des champ hidden???
    si non, explique nous en détails quelle page php fait appel à quelle page php en montrant les codes concernés dans chacune. cela accélérera la résolution de ton problème.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //enemy
    $query = doquery("SELECT * FROM {{table}} WHERE username='".$_POST['enemy']."' LIMIT 1", "users");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //on lance le duel 
    $query = doquery("SELECT * FROM {{table}} WHERE username='".$_POST['enemy']."' LIMIT 1", "users");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //insert duel dans la base
    $gold = $userrow["gold"] - $_POST['mise'];
    $fightlvl = $userrow["strength"] + $userrow["dexterity"]; 
    doquery("INSERT INTO {{table}} SET id='', defiant='".$userrow["id"]."', mise='".$_POST['mise']."', name='".$userrow["username"]."', receveur='".$_POST["enemy"]."', fightlvl='$fightlvl'", "duel");
    $_SESSION["idDuel"]= mysql_insert_id() ;
    doquery("UPDATE {{table}} SET gold='$gold' WHERE id='".$userrow["id"]."' LIMIT 1", "users");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //on accepte le duel
    function fight2() {
     
    global $userrow, $numqueries;
     
    $query = doquery("SELECT * FROM {{table}} WHERE receveur='".$userrow["charname"]."'", "duel");
    $rank = 1;
     
    if (mysql_num_rows($query) == 0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //on efface le duel dans la base
    if (isset($_SESSION["idDuel"]))
    doquery("DELETE FROM {{table}} WHERE id='".$_SESSION["idDuel"]."'", "duel");
    ma page duel fait 374 lignes en gros cette page fait tout, création suppression, intègre la page de création de duel + celle des demandes de duel
    toute la partie duel est sur la même et unique page
    c'est un vrais bordel ^^

    username : nom du jouer
    charname : non de la bête du jouer

    je comprend bien que vous pouvez pas vraiment savoir sans voir mon code en entier mais bon 300 lignes ici certains vont mal le vivre ^^

    "champ hidden" désolé pour l'instant je comprend pas très bien les fonctions sql

    Edit voici ma table duel a mon avis a amélioré ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE `game_duel` (
      `id` smallint(5) unsigned NOT NULL auto_increment,  
      `mise` mediumint(9) NOT NULL default '0',  
      `name` varchar(30) NOT NULL default '',
      `receveur` varchar(30) NOT NULL default '',
      `defiant` smallint(6) NOT NULL default '0',
      `fightlvl` varchar(25) NOT NULL default '',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ;

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    si j'ai bien compri, un utilisateur demande un autre en duel, quand le second accepte le duel, il y a une sorte de traitement ou calcul qui est fait, puis on met à jour les infos du joueur (normalement des deux non?), et là juste à la fin tu veux supprimer le duel.
    l'insertion du duel dans la table se fait avant son acceptation par le second joueur (si j'ai rien raté)
    de toute façon tu ne poura retrouvé une variable de session d'un utilisateur A dans la session de l'utilisateur B
    donc la solution des sessions est à oublié.

    j'avoue que c'est un peu ... je vais expliquer ce j'ai compris (si j'ai réussi à comprendre quelque chose):
    - un joueur A lance un défi à un joueur B et là le duel est inseré direct sur ta table
    - le duel apparait chez le joueur B qui peut l'accepter ou non : là tu doit avoir un moyen pour récupérer le duel non? si oui tu PEUX récupérer son id aussi, il te reste à le mettre en paramètre devant le lien "accepter le duel" ou un truc du genre (un champ hidden si formulaire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="tapageduel.php?idduel=<?php echo $recuperationDuelDepuisTable['id'];?>">accepter le duel</a>
    - quand le joueur B clique pour confirmer le duel il donne à ton script l'id du duel, que tu utilisera pour la suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (isset($_GET["idduel"]))
    doquery("DELETE FROM {{table}} WHERE id='".$_GET["idduel"]."'", "duel");

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    bonsoir, oui c'est exacte ^^

    voila comment j'affiche le duel si on est vraiment le défier :

    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
    42
    43
    44
    //on accepte le duel
    function fight2() {
     
    global $userrow, $numqueries;
     
    $query = doquery("SELECT * FROM {{table}} WHERE receveur='".$userrow["charname"]."'", "duel");
    $rank = 1;
     
    if (mysql_num_rows($query) == 0)
    {
    $page .= '<table align="center" width="309" height="19">';
    $page .= '<tr>';
    $page .= '<td align="center" class="textePetit" width="309" height="19" background="images/duel/defier_rival_desc.gif">Vous n\'avez pas de defie.</td>';
    $page .= '</tr>';
    $page .= '</table>';
    }
    else
    {
    $page .= '<table width="452">';
    $page .= '<tr>';
    $page .= '<td class="textePetit" width="446">Defi(s)</td>';
    $page .= '</tr>';
    $page .= '</table>';
     
    $page .= '<table width="451" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">';
    $page .= '<tr>';
    $page .= '<td class="textePetit" width="26" height="19" align="center" background="images/duel/classe_nb.gif"><strong>ID</strong></td>';
    $page .= '<td class="textePetit" width="91" height="19" align="center" background="images/duel/classe_name.gif"><strong>Défier</strong></td>';
    $page .= '<td class="textePetit" width="75" height="19" align="center" background="images/duel/defier_mise.gif"><strong>Mise</strong></td>';
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_accepte.gif"><strong>Clic</strong></td>';
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_refuser.gif"><strong>Clic</strong></td>';
    $page .= '</tr>';
     
    while ($row = mysql_fetch_array($query))
    {
    $page .= '<tr>';
    $page .= '<td class="textePetit" width="26" height="19" align="center" background="images/duel/classe_nb.gif"><b>'.$rank.'</b></td>';
    $page .= '<td class="textePetit" width="91" height="19" align="center" background="images/duel/classe_name.gif">'.$row['name'].'</td>';
    $page .= '<td class="textePetit" width="75" height="19" align="center" background="images/duel/defier_mise.gif">'.$row['mise'].'</td>';
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_accepte.gif"><a href="index.php?page=fight3:'.$row["id"].'">[Accepter]</a></td>';
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_refuser.gif"><a href="index.php?page=fight4:'.$row["id"].'">[Refuser]</a></td>';
    $page .= '</tr>';
    $rank++;
    }
    ensuite oui il a des mises a jours de la table users, a savoir gold si on gagne +mise si on perd -mise, ensuite mise a jours de l'expérience+1 ect... :s

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    eh ben voilà!
    puisque tu récupère tout les defis avec le fameux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $query = doquery("SELECT * FROM {{table}} WHERE receveur='".$userrow["charname"]."'", "duel");
    ....
     
    while($row = mysql_fetch_array($query))
    tu a aussi l'id de ceux là : $row['id']
    donc tu peut l'envoyer an paramètre de ton lien accepter
    ET c'est ce qui est fait sur ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_accepte.gif"><a href="index.php?page=fight3:'.$row["id"].'">[Accepter]</a></td>';
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    while ($row = mysql_fetch_array($query))
    {
    $page .= '<tr>';
    $page .= '<td class="textePetit" width="26" height="19" align="center" background="images/duel/classe_nb.gif"><b>'.$rank.'</b></td>';
    $page .= '<td class="textePetit" width="91" height="19" align="center" background="images/duel/classe_name.gif">'.$row['name'].'</td>';
    $page .= '<td class="textePetit" width="75" height="19" align="center" background="images/duel/defier_mise.gif">'.$row['mise'].'</td>';
    //iciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_accepte.gif"><a href="index.php?page=fight3:'.$row["id"].'">[Accepter]</a></td>';
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_refuser.gif"><a href="index.php?page=fight4:'.$row["id"].'">[Refuser]</a></td>';
    $page .= '</tr>';
    $rank++;
    }
    comme pour la fonction doquery, c'est un code zarbi, sur quels outils plateforme framework cms ou kit de développement tu travail????

    l'essentiel est que tu peut récupérer $_GET['page'] qui contient l'id du duel
    faire ceci pour la suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (isset($_GET["page"])){
    //$_GET["page"] contient fight3:12 où 12 est l'id par exemple
    list ($fight, $idDuel)=split(':', $_GET["page"]); //je prend l'id
    doquery("DELETE FROM {{table}} WHERE id='".$idDuel."'", "duel");
    }
    je note que le duel sera supprimé dans le cas ou il est refusé aussi, si tu ne veux pas cela, ajoute une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset($_GET["page"])){
    //$_GET["page"] contient fight3:12 où 12 est l'id par exemple
    list ($fight, $idDuel)=split(':', $_GET["page"]); //je prend l'id
    if($fight=="fight3")
    doquery("DELETE FROM {{table}} WHERE id='".$idDuel."'", "duel");
    }
    j'espère que cette foi sera la bonne

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    Citation Envoyé par nsanabi Voir le message
    eh ben voilà!
    puisque tu récupère tout les defis avec le fameux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $query = doquery("SELECT * FROM {{table}} WHERE receveur='".$userrow["charname"]."'", "duel");
    ....
     
    while($row = mysql_fetch_array($query))
    tu a aussi l'id de ceux là : $row['id']
    donc tu peut l'envoyer an paramètre de ton lien accepter
    ET c'est ce qui est fait sur ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_accepte.gif"><a href="index.php?page=fight3:'.$row["id"].'">[Accepter]</a></td>';
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    while ($row = mysql_fetch_array($query))
    {
    $page .= '<tr>';
    $page .= '<td class="textePetit" width="26" height="19" align="center" background="images/duel/classe_nb.gif"><b>'.$rank.'</b></td>';
    $page .= '<td class="textePetit" width="91" height="19" align="center" background="images/duel/classe_name.gif">'.$row['name'].'</td>';
    $page .= '<td class="textePetit" width="75" height="19" align="center" background="images/duel/defier_mise.gif">'.$row['mise'].'</td>';
    //iciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_accepte.gif"><a href="index.php?page=fight3:'.$row["id"].'">[Accepter]</a></td>';
    $page .= '<td class="textePetit" width="132" height="19" align="center" background="images/duel/defier_refuser.gif"><a href="index.php?page=fight4:'.$row["id"].'">[Refuser]</a></td>';
    $page .= '</tr>';
    $rank++;
    }
    comme pour la fonction doquery, c'est un code zarbi, sur quels outils plateforme framework cms ou kit de développement tu travail????

    l'essentiel est que tu peut récupérer $_GET['page'] qui contient l'id du duel
    faire ceci pour la suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (isset($_GET["page"])){
    //$_GET["page"] contient fight3:12 où 12 est l'id par exemple
    list ($fight, $idDuel)=split(':', $_GET["page"]); //je prend l'id
    doquery("DELETE FROM {{table}} WHERE id='".$idDuel."'", "duel");
    }
    je note que le duel sera supprimé dans le cas ou il est refusé aussi, si tu ne veux pas cela, ajoute une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset($_GET["page"])){
    //$_GET["page"] contient fight3:12 où 12 est l'id par exemple
    list ($fight, $idDuel)=split(':', $_GET["page"]); //je prend l'id
    if($fight=="fight3")
    doquery("DELETE FROM {{table}} WHERE id='".$idDuel."'", "duel");
    }
    j'espère que cette foi sera la bonne

    re, quand j'utilise ton code delete : Parse error: syntax error, unexpected $end

Discussions similaires

  1. problème d'auto incrémentation
    Par senv33 dans le forum Débuter
    Réponses: 8
    Dernier message: 24/02/2010, 13h43
  2. Problème auto-incrément SQLServer
    Par yannick34 dans le forum Développement
    Réponses: 8
    Dernier message: 19/10/2009, 13h42
  3. Clé primaire auto incrémentée, problème insertion
    Par barnoufal dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 12/02/2008, 17h17
  4. Problème d'auto-incrément
    Par rageice dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/12/2007, 23h33
  5. Problème de mise à jour des champs Auto incrémentés avec VB6.
    Par NHenry dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/05/2007, 16h06

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