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:)
Annonceindlæg fra Barco
du laver bare to query\'s efter hinanden!!
<? mysql_query(\"insert into TABEL (*) values (\'$*)\"); ?> <? $result = mysql_query(\"select * from TABEL where * = \'*\'\"); $row = mysql_fetch_array($result); print \"$row
\"; ?>
Nej man gør ikke. Man bruger mysql_insert_id mysql_query(\"INSERT ...\"); $id = mysql_insert_id();
erikjacobsen>> det andet virker da også!!!!
Joh, jk, hvis du har tonsvis af overskudstid på dine servere.
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:)
stik mig noget kode...så sætter vi det ind
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:)
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:)
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...
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!
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 :)
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...
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:)
30. juli 2001 - 10:25
#17
Er spil_id defineret som et auto_increment felt i tabellen spil ?
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());
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\')\");
30. juli 2001 - 10:32
#20
hvis spil_id er auto_increment skal den udelades fra querien...
30. juli 2001 - 10:34
#21
Nej, der må gerne stå der som tom streng, som anført.
30. juli 2001 - 10:36
#22
spil_id er sat til auto_increment
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?
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.
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\')\");
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...
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 :)
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.
30. juli 2001 - 11:11
#29
Det er altså udtrækket af spil_id\'et der indsættes, der kikser.
30. juli 2001 - 11:24
#30
Så skal vi se din definition af tabellen
30. juli 2001 - 11:31
#31
eh...?
30. juli 2001 - 11:38
#32
Den der CREATE TABLE ....
30. juli 2001 - 11:40
#33
Skal jeg tage et dump order? Jeg har CREATED min TABLE celle for celle. ab:)
30. juli 2001 - 11:43
#34
Nej da, du behøver ikke tage et dump - det er kun hvis vi skal hjælpe dig :)
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
30. juli 2001 - 11:44
#36
Jeg er ikke sikker på, om det er disse du mener?
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) );
30. juli 2001 - 11:50
#38
Aha. 2 sekunder...
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) );
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 ?
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..
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 ??
30. juli 2001 - 12:16
#43
Det er gået fint hidtil. Senere updater jeg tabellen og det går også fint.
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 ??
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 :-)
30. juli 2001 - 12:22
#46
Jamen, så må vi se definitionen igen - tak :)
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)
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\");
30. juli 2001 - 12:45
#49
Og den skriver hvad? Og hvordan ser din CREATE TABLE ud ?
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) );
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\");
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?
30. juli 2001 - 13:24
#53
Ingen tal. Der står 3.23.38-nt (Server Info) og 3.23.36 (Client Info)
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?
30. juli 2001 - 13:57
#55
close to a billion
30. juli 2001 - 13:58
#56
Bliver det for meget at sende dig skidtet?
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...
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:)
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.
Computerworld tilbyder specialiserede kurser i database-management