Avatar billede allandk Nybegynder
30. juli 2001 - 08:55 Der er 57 kommentarer og
2 løsninger

Gemme i db, og hente ID på samme tid?

Jeg har lavet et spil, hvor man indtaster nogle kampkombinationer som derefter smides i en db. Næste skridt er så, at hente det autoincrementede ID så jeg kan generere en mail, hvor netop dette ID indgår.

Er der nogen der har en idé til, hvordan det skal gøres?

ab:)
Avatar billede jkmedia Nybegynder
30. juli 2001 - 08:56 #1
du laver bare to query\'s efter hinanden!!
Avatar billede jkmedia Nybegynder
30. juli 2001 - 08:57 #2
<?
mysql_query(\"insert into TABEL (*) values (\'$*)\");
?>
<?
$result = mysql_query(\"select * from TABEL where * = \'*\'\");
$row = mysql_fetch_array($result);
print \"$row
  • \";
  • ?>
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 09:03 #3
    Nej man gør ikke. Man bruger mysql_insert_id

    mysql_query(\"INSERT ...\");
    $id = mysql_insert_id();
    Avatar billede jkmedia Nybegynder
    30. juli 2001 - 09:05 #4
    erikjacobsen>> det andet virker da også!!!!
    Avatar billede allandk Nybegynder
    30. juli 2001 - 09:08 #5
    Jeg tester lige...
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 09:11 #6
    Joh, jk, hvis du har tonsvis af overskudstid på dine servere.
    Avatar billede jkmedia Nybegynder
    30. juli 2001 - 09:12 #7
    ja oki....
    Avatar billede allandk Nybegynder
    30. juli 2001 - 09:16 #8
    erikjacobsen>> Har du mod på at fuldende eksemplet ovenfor? Jeg kan ikke selv sætte det ind i en kontekst.

    På forhånd tak.

    ab:)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 09:21 #9
    stik mig noget kode...så sætter vi det ind
    Avatar billede allandk Nybegynder
    30. juli 2001 - 09:25 #10
    Første side = send_slag.php
    ...
        $afsender = $alias;

        include(\"db_ind.inc\");
        $gem_slag = mysql_query(\"INSERT INTO spil (spil_id, afsender_id, slag1, slag2, slag3, slagord,
        modtager_id)\" . \"VALUES (\'\', \'$afsender\', \'$slag1\', \'$slag2\', \'$slag3\', \'$slagord\', \'$modtager\')\");

    //    $row = mysql_result($gem_slag);
        header (\"Location: html.php?side=sendt\");
    ...


    ab:)
    Avatar billede allandk Nybegynder
    30. juli 2001 - 09:29 #11
    2.ende side = sendt.php
    ...
        mail(
            \"$modtager_id\",
            \"Hej\",
            \"link skal være = det id der netop er blevet oprettet\",
            \"From: $email\\nReply-To: $email\");

    ...


    ab:)
    Avatar billede htx98i17 Professor
    30. juli 2001 - 09:59 #12
    første side tilføjer du:

    $id = mysql_insert_id();
    header (\"Location: html.php?side=sendt&id=$id\");

    anden side tilføjer du:

    mail(
            \"$modtager_id\",
            \"Hej\",
            \"link skal være = $id\",
            \"From: $email\\nReply-To: $email\");



    ej, correct me if i\'m wrong, jeg har aldrig brugt mysql_insert_id før...
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 10:06 #13
    Det er alstå meget flot klaret, htx. Ja, man skal overføre den som ?-parameter,
    da man ikke kan finde den id på den næste side ellers. Hør htx, så må du da også
    være berettiget til lidt point!
    Avatar billede htx98i17 Professor
    30. juli 2001 - 10:12 #14
    haha, tak for ros\'en, om det så var ironisk ment eller ej, hehe

    Jeg vil ikke nuppe pointene for næsen af dig EJ, hehe, det var jo trods alt dig der kom med ideen :)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 10:17 #15
    Men der er nu noget galt. Hvis man på første side skriver

      header (\"Location: html.php?side=sendt\");

    så kan den næste side da ikke hedde sendt.php, som spørgeren anfører.
    Men lad os nu høre hvad han siger...
    Avatar billede allandk Nybegynder
    30. juli 2001 - 10:23 #16
    Hmmm...

    Nu har tilføjet så det samlet der således ud:

        include(\"db_ind.inc\");
        $gem_slag = mysql_query(\"INSERT INTO spil (spil_id, afsender_id, slag1, slag2, slag3, slagord,
        modtager_id)\" . \"VALUES (\'\', \'$afsender\', \'$slag1\', \'$slag2\', \'$slag3\', \'$slagord\', \'$modtager\')\");

        $spil_id = mysql_insert_id();
        header (\"Location: html.php?side=slag_sendt&id=$spil_id\");

    Men returnerer strengen med id=0, fx: html.php?side=slag_sendt&id=0

    ab:)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 10:25 #17
    Er spil_id defineret som et auto_increment felt i tabellen spil ?
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 10:26 #18
    ...og tag lige også at checke at den gik godt, den INSERT:

      $gem_slag = mysql_query(\"INSERT ...\") or die(mysql_error());
    Avatar billede defrost Nybegynder
    30. juli 2001 - 10:31 #19
    Hvis spil_id er defineret som auto_increment skal den vel udelades i insert-querien eller i det mindste sættes til NULL??

    $gem_slag = mysql_query(\"INSERT INTO spil (afsender_id, slag1, slag2, slag3, slagord, modtager_id)\" . \"VALUES (\'$afsender\', \'$slag1\', \'$slag2\', \'$slag3\', \'$slagord\', \'$modtager\')\");
    Avatar billede htx98i17 Professor
    30. juli 2001 - 10:32 #20
    hvis spil_id er auto_increment skal den udelades fra querien...
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 10:34 #21
    Nej, der må gerne stå der som tom streng, som anført.
    Avatar billede allandk Nybegynder
    30. juli 2001 - 10:36 #22
    spil_id er sat til auto_increment
    Avatar billede defrost Nybegynder
    30. juli 2001 - 10:44 #23
    Well... Hvis det er et auto_increment felt er det defineret som en int-type af en slags. Derfor er det vel hverken særligt pænt eller særligt korrekt at benytte en tom streng.

    Manualen siger: \"When you insert a value of NULL (recommended) or 0 into an AUTO_INCREMENT column, the column is set to value+1, where value is the largest value for the column currently in the table.\"

    Som datalog, Erik, må du da også være enig i, at det ikke er særligt pænt eller korrekt at benytte en streng hvor et tal er forventet. At MySQL finder sig i det (er endda et konfigurationsspørgsmål) er noget helt andet.

    Eller er jeg helt på vildspor?
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 10:51 #24
    Jeg har ikke sagt ét ord om det er pænt eller ej. Jeg sagde at man
    gerne må, og at det ikke er derfor det ikke virker. Men ja, det er
    overflødigt.
    Avatar billede htx98i17 Professor
    30. juli 2001 - 10:53 #25
    skal queryen være defineret som variabel?
    burde den ikke stå alene:

    mysql_query(\"INSERT INTO spil (afsender_id, slag1, slag2, slag3, slagord, modtager_id)\" . \"VALUES (\'$afsender\', \'$slag1\', \'$slag2\', \'$slag3\', \'$slagord\', \'$modtager\')\");

    Avatar billede defrost Nybegynder
    30. juli 2001 - 10:53 #26
    Godt ord igen. :-)

    Det var skam ikke min mening at lyde harsk... Du plejer bare at svare meget udførligt og derfor undrede jeg mig over, at du ikke kommenterede det som andet end lovligt...
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 11:05 #27
    Det er også ligegyldigt om man tager resultatet over i en
    variabel, htx.

    Allandk: kommer der noget i databasen ved indsættelse
    og/eller giver den en fejl med mysql_error(), som jeg
    foreslog - du bliver nødt til at sige noget, ellers kommer
    vi ikke videre :)
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:09 #28
    Beklager tavsheden - jeg er ved at blive godt gammeldags sort indeni hovedet.

    Der kommer data i tabellen, og mailen ryger afsted, men id fungerer ikke.

    For at vise nogle oplysninger fra db har jeg testet med
        $spil_id = \"3\";
    som virker fint.
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:11 #29
    Det er altså udtrækket af spil_id\'et der indsættes, der kikser.
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 11:24 #30
    Så skal vi se din definition af tabellen
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:31 #31
    eh...?
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 11:38 #32
    Den der CREATE TABLE ....
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:40 #33
    Skal jeg tage et dump order?

    Jeg har CREATED min TABLE celle for celle.

    ab:)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 11:43 #34
    Nej da, du behøver ikke tage et dump - det er kun hvis vi skal hjælpe dig :)
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:43 #35
    Her er overskrifterne:

    spil_id
    udfordrer_id
    udfordrer_email
    udfordrer_slag1
    udfordrer_slag2
    udfordrer_slag3
    udfordrer_slagord
    modtager_id
    modtager_slag1
    modtager_slag2
    modtager_slag3
    modtager_slagord
    spil_status
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:44 #36
    Jeg er ikke sikker på, om det er disse du mener?
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 11:50 #37
    Jeg mener noget der ser ca. sådan ud
    CREATE TABLE dat (
      d char(20),
      id int(11) NOT NULL auto_increment,
      id3 int(11),
      PRIMARY KEY (id)
    );
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:50 #38
    Aha. 2 sekunder...
    Avatar billede allandk Nybegynder
    30. juli 2001 - 11:51 #39
    CREATE TABLE spil (
      spil_id int(11) NOT NULL auto_increment,
      udfordrer_id varchar(100) DEFAULT \'0\' NOT NULL,
      udfordrer_email varchar(100) NOT NULL,
      udfordrer_slag1 varchar(5) NOT NULL,
      udfordrer_slag2 varchar(5) NOT NULL,
      udfordrer_slag3 varchar(5) NOT NULL,
      udfordrer_slagord varchar(100) NOT NULL,
      modtager_id varchar(100) DEFAULT \'0\' NOT NULL,
      modtager_slag1 varchar(5) NOT NULL,
      modtager_slag2 varchar(5) NOT NULL,
      modtager_slag3 varchar(5) NOT NULL,
      modtager_slagord varchar(100) NOT NULL,
      spil_status tinyint(1) DEFAULT \'0\' NOT NULL,
      PRIMARY KEY (spil_id),
      UNIQUE id (spil_id),
      KEY id_2 (spil_id)
    );

    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 12:08 #40
    Jeg opretter den samme tabel, putter data ind med dette, og får fint id-et tilbage

      mysql_query(\"insert into spil values (\'\',\'x\',\'x\',\'x\',\'x\',\'x\',\'x\',\'0\',\'x\',\'x\',\'x\',\'x\',\'0\')\") or die(mysql_error());
      print mysql_insert_id();

    Fortæl mig lige igen: Har du sat en
      or die(mysql_error())
    på din mysql_query, eller har du ikke ?
    Avatar billede allandk Nybegynder
    30. juli 2001 - 12:10 #41
    Der er en die på, og den kommer ikke frem.

    nu prøver jeg lige at paste din linje ind..
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 12:15 #42
    jamen, alle dine felter er jo defineret til NOT NULL, og så undlader du at putte
    værdier i nogle af dem - det går da ikke godt ??
    Avatar billede allandk Nybegynder
    30. juli 2001 - 12:16 #43
    Det er gået fint hidtil. Senere updater jeg tabellen og det går også fint.
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 12:16 #44
    Og det kan heller ikke være den rigtige definition. I SQL-sætningen bruger
    du feltnavne som slag1, slag2, slag3 der slet ikke findes i tabellen ??
    Avatar billede allandk Nybegynder
    30. juli 2001 - 12:22 #45
    Min fejl. Jeg har lige rettet dem for at gøre felterne 100% unikke, resten ef koden af tilpasset, så det er stadigvæk kun det nygenererede id jeg ikke kan hente frem.

    Beklager forvirringen :-)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 12:22 #46
    Jamen, så må vi se definitionen igen - tak :)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 12:27 #47
    ok, man skal eksplicit skrive null, for at få en fejl på en NOT NULL:

    insert into spil (udfordrer_id,udfordrer_email) values (\'x\',null)
    Avatar billede allandk Nybegynder
    30. juli 2001 - 12:32 #48
        $udfordrer_id = $alias;
        $udfordrer_email = $email;
       
        include(\"db_ind.inc\");
        $gem_slag = mysql_query(\"INSERT INTO spil (udfordrer_id, udfordrer_email, udfordrer_slag1, udfordrer_slag2, udfordrer_slag3, udfordrer_slagord, modtager_id)\" . \"VALUES (\'$udfordrer_id\', \'$udfordrer_email\', \'$udfordrer_slag1\', \'$udfordrer_slag2\', \'$udfordrer_slag3\', \'$udfordrer_slagord\', \'$modtager_id\')\") or die(mysql_error());

      print mysql_insert_id();
        header (\"Location: html.php?side=slag_sendt\");
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 12:45 #49
    Og den skriver hvad? Og hvordan ser din CREATE TABLE ud ?
    Avatar billede allandk Nybegynder
    30. juli 2001 - 13:04 #50
    CREATE TABLE spil (
      spil_id int(11) NOT NULL auto_increment,
      udfordrer_id varchar(100) DEFAULT \'0\' NOT NULL,
      udfordrer_email varchar(100) NOT NULL,
      udfordrer_slag1 varchar(5) NOT NULL,
      udfordrer_slag2 varchar(5) NOT NULL,
      udfordrer_slag3 varchar(5) NOT NULL,
      udfordrer_slagord varchar(100) NOT NULL,
      modtager_id varchar(100) DEFAULT \'0\' NOT NULL,
      modtager_slag1 varchar(5) NOT NULL,
      modtager_slag2 varchar(5) NOT NULL,
      modtager_slag3 varchar(5) NOT NULL,
      modtager_slagord varchar(100) NOT NULL,
      spil_status tinyint(1) DEFAULT \'0\' NOT NULL,
      PRIMARY KEY (spil_id),
      UNIQUE id (spil_id),
      KEY id_2 (spil_id)
    );

    Avatar billede allandk Nybegynder
    30. juli 2001 - 13:05 #51
        $udfordrer_id = $alias;
        $udfordrer_email = $email;
       
        include(\"db_ind.inc\");
        $gem_slag = mysql_query(\"INSERT INTO spil (udfordrer_id, udfordrer_email, udfordrer_slag1, udfordrer_slag2, udfordrer_slag3, udfordrer_slagord, modtager_id)\" . \"VALUES (\'$udfordrer_id\', \'$udfordrer_email\', \'$udfordrer_slag1\', \'$udfordrer_slag2\', \'$udfordrer_slag3\', \'$udfordrer_slagord\', \'$modtager_id\')\") or die(mysql_error());

        print mysql_insert_id();
        header (\"Location: html.php?side=slag_sendt\");
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 13:17 #52
    Og den skriver stadig ikke et tal ud? Har du mulighed for at se hvilken
    MySql-version du kører med?
    Avatar billede allandk Nybegynder
    30. juli 2001 - 13:24 #53
    Ingen tal. Der står 3.23.38-nt (Server Info) og 3.23.36 (Client Info)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 13:51 #54
    Samme her: 3.23.38-nt - mystisk. Er du 107½ % sikker på at tabellen
    er oprettet med den CREATE du har vist mig her?
    Avatar billede allandk Nybegynder
    30. juli 2001 - 13:57 #55
    close to a billion
    Avatar billede allandk Nybegynder
    30. juli 2001 - 13:58 #56
    Bliver det for meget at sende dig skidtet?
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 14:02 #57
    Det må du gerne - men problemet er vel at det virker hos mig :) Men pak
    det sammen og send det - så må vi se...
    Avatar billede allandk Nybegynder
    30. juli 2001 - 15:27 #58
    Så siger jeg mange tak for hjælpen og den hurtige responstid fra alle parter.

    Fortsat god dag...

    ab:)
    Avatar billede erikjacobsen Ekspert
    30. juli 2001 - 15:28 #59
    ...og vi fik ovenstående kode til at virke som den står her i spørgsmålet,
    men undrer os stadig lidt over at det ikke virkede før. Sådan er der så meget.
    Avatar billede Ny bruger Nybegynder

    Din løsning...

    Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

    Loading billede Opret Preview
    Kategori
    Computerworld tilbyder specialiserede kurser i database-management

    Log ind eller opret profil

    Hov!

    For at kunne deltage på Computerworld Eksperten skal du være logget ind.

    Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

    Du kan også logge ind via nedenstående tjenester