Avatar billede trineschunck Nybegynder
01. december 2005 - 18:11 Der er 47 kommentarer og
1 løsning

unik tæller

Jeg har lavet to php-filer.
I den første taster brugeren en del oplysninger ind i en form og når den sendes gås over til en anden php-side, hvor dankortnr mv. tastes ind (secure tunnel), inden videre betaling.
Jeg ønsker at definere en variabel $HTTP_SESSION_VARS["Orderid"], som er unik for hver ordre. Altså en slags tæller, evt. læst fra en database?(hvilket jeg endnu ikke har tjek på). Har nogen sådan en "tæller" liggende...I princippet skal der bare lægges 1 til hver gang (klassikkeren) men jeg ved ikke konkret hvordan...og om der skal tælles i fil 1 eller 2. (Jeg vil jo ikke have den til at tælle, førend, bruger trykker "send" og kommer videre til fil2. Kan nogle hjælpe? (Skal jeg evt. sende kildekoden?).
Avatar billede nielle Nybegynder
01. december 2005 - 18:18 #1
Før du går videre til betalingen, lægger du orderen i en passende tabel i databasen. Du har her et felt, hvor du angiver om orderen er gennemført eller om det kun er en midlertidig ordre. Til at starte med er dette felt lig "midlertidig". Først når at der kommer besked tilbage om at betalingen er godkendt opdatere du feltet fra "midlertidig" til "betalt".

Idet at du indsætter orderen, får du samtidigt et id, og det er så dette id som du bruger som det unikke id for din ordre.
Avatar billede trineschunck Nybegynder
01. december 2005 - 20:58 #2
Hej.
Tak for svar, men jeg er desværre stadig så grøn at jeg ikke ved hvordan man konkret gør det du nævner. Kan du nævne i kodeform hvad du mener? (hvis det er for besværligt er det selvfølgelig OK)
Avatar billede nielle Nybegynder
01. december 2005 - 21:13 #3
Lad os løse det sammen. :^)

Har du allerede nu en tabel hvor du gemmer dine ordre i? Hvis ja: Hvad hedder den og hvordan ser den ud?
Avatar billede trineschunck Nybegynder
01. december 2005 - 21:31 #4
Jeg har prøvet at oprette en tabel via PHPMyAdmin, som jeg har kaldt ordreid.

Feltnavn: ordreid
Datatype: INT
Længde/værdi: 1
Standardværdi:
Ekstra: auto_increment

Så langt så godt?
Avatar billede nielle Nybegynder
01. december 2005 - 21:46 #5
Tilføj et felt - betalt - som kan tage værdierne ja/nej.
Avatar billede trineschunck Nybegynder
01. december 2005 - 21:53 #6
det kan jeg indtil videre ikke finde ud af... skriver man bare ja/nej i værdi-feltet?
Avatar billede nielle Nybegynder
01. december 2005 - 21:55 #7
Når du skal oprette en ny ordre - og før at folk er blevet sendt forbi betalingssiden - indsætter du en rækkr for orderen i din tabel:

$sql = "INSERT INTO ordreTabel (betalt) VALUES ('nej')";
mysql_query($sql);

Derefter kan du bruge funktioen mysql_insert_id():

http://dk.php.net/manual/en/function.mysql-insert-id.php

til at få fat i det ordreid du netop har trukket:

$ordreid = mysql_insert_id();

Når du har konstateret at orderen er blevet betalt opdatere du tabellen:

$sql = "UPDATE ordreTabel SET betalt='ja' WHERE ordreid = " . $ordreid;
Avatar billede nielle Nybegynder
01. december 2005 - 21:56 #8
Du kan f.eks. lave dit betalt-felt som en varchar(3) eller du kan vælge at lave den som en tinyint og så bruge 0/1 til at betyde nej/ja.
Avatar billede trineschunck Nybegynder
01. december 2005 - 21:57 #9
Såan ser min tabel ud nu:
Feltnavn: betalt
datatype: text
længde/Værdi: ja/nej
Atributter:
Nulværdi: not null
Standardværdi:
Ekstra: auto_increment

Men det er vist ikke helt korrekt
Avatar billede nielle Nybegynder
01. december 2005 - 21:59 #10
Du skal have to felter i din tabel:

ordreid - int, primary key, auto_increment
betalt - text
Avatar billede trineschunck Nybegynder
01. december 2005 - 22:15 #11
ordreid,int,nulværdi=nej,auto_increment,primary
betalt, tinyint, nulværdi=0, standardværdi=0
Avatar billede nielle Nybegynder
01. december 2005 - 22:22 #12
Ja. :^)

Og så sert den første SQL altså sådan her ud:

$sql = "INSERT INTO ordreTabel (betalt) VALUES (0)";
Avatar billede trineschunck Nybegynder
01. december 2005 - 22:29 #13
OK. Det har jeg skrevet ind i min første php-fil.(Har ikke testet det endnu)
Du kan se den på http://www.fitness-kirken.dk/1holdB.php
ID'et skal sættes til en værdi når der trykkes "videre" i min første php-fil. Er det det der sker nu?
Du kan jo ikke se min kode, men sig til hvis den er relevant.
Avatar billede nielle Nybegynder
01. december 2005 - 22:36 #14
Id'er bliver automatisk sat til en værdi når du laver den viste INSERT. Det er det auto_increment gør. Du trækker m.a.o. dit unikke id ved simpelthen at indsætte en række i tabellen.
Avatar billede trineschunck Nybegynder
01. december 2005 - 22:43 #15
Jeg går ud fra at jeg også skal skrive følgende først:
mysql_connect("localhost","xxx","xxx");
mysql_select_db("ordreid");
Avatar billede trineschunck Nybegynder
01. december 2005 - 22:46 #16
Nå, nej jeg mener mysql_select_db("databasenavn");
Avatar billede trineschunck Nybegynder
01. december 2005 - 22:51 #17
Jeg får fejlen "Duplicate entry '0' for key 2"...når jeg kører filen. Giver det umiddelbart mening for dig?
Avatar billede nielle Nybegynder
01. december 2005 - 23:01 #18
Du har vel ikke sat unique eller sådan noget på Betalt?
Avatar billede trineschunck Nybegynder
01. december 2005 - 23:06 #19
Jo mindsandten...du er skarp...nu har jeg sat den til index...ser ud til at virke...
Avatar billede trineschunck Nybegynder
01. december 2005 - 23:20 #20
Har prøvet med echo "$sql"; og echo "$ordreid"; på min side, men der skrives intet !(det var bare for at kunne se værdien)...

Kan jeg overføre min "tæller" til næste php-side? Som global variabel eller? Det er nemlig på denne side jeg mailer alle værdierne videre, og der vil jeg gerne have id'et med.
Avatar billede trineschunck Nybegynder
01. december 2005 - 23:59 #21
Godnat, og tak. Hvis du er pointsamler, så sig hvormange point du vil have.
Avatar billede nielle Nybegynder
02. december 2005 - 06:54 #22
Skal vi ikke lige vente med point til at du har fået løst opgaven felt?

1) Du skal ikke sætte feltet, Betalt, til index. Det får du intet ud af i denne sammenhæng og det går faktisk ud over din performance.

2) Når ud har indsat en række med:

$sql = "INSERT INTO ordreTabel (betalt) VALUES (0)";
mysql_query($sql) or die(mysql_error());

- så kan du efterfølgende få det tilsvarende ordreid via:

$ordreid = mysql_insert_id();
echo $ordreid;

3) Når du har trukket et unikt ordre-id, så gemmer du dette i en session.

4) Når det skal sendes med til betalingssystemet, så har dette system en mekanisme som gør det muligt. Det må stå beskrevet i deres dokumentation.
Avatar billede trineschunck Nybegynder
02. december 2005 - 21:10 #23
Hej.
Jeg kan vælge imellem index, unique og fulltext (den sidste giver en fejl) for index-type for "betalt".

Jeg kan ikke få min fil til at skrive værdien for $ordreid.

Her er min kode:

mysql_connect("localhost","xxx","xxx");
mysql_select_db("xxx");

$sql = "INSERT INTO ordreTabel (betalt) VALUES (0)";
mysql_query($sql) or die(mysql_error());

$ordreid = mysql_insert_id();
echo $ordreid;

$sql = "UPDATE ordreTabel SET betalt='ja' WHERE ordreid = " . $ordreid;
$HTTP_SESSION_VARS["ordreid"] = $ordreid;
Avatar billede nielle Nybegynder
02. december 2005 - 21:51 #24
Prøv at vælge noget andet end text som type - char eller varchar:

http://dev.mysql.com/doc/refman/5.1/en/char.html
Avatar billede nielle Nybegynder
02. december 2005 - 21:56 #25
Glem lige det igen!

Hvad er dine typer på felterne lige nu?

Den 2. SQL skal nok se sådan her ud:

$sql = "UPDATE ordreTabel SET betalt=1 WHERE ordreid = " . $ordreid;

- hvis den skal stemme med INSERT-sætningen.
Avatar billede trineschunck Nybegynder
02. december 2005 - 22:42 #26
feltnavn:ordreid, dataype:int(11), nøgle:primary, dataype:primary
feltnavn:betalt,datatype tinyint(4), nøgle:ordreid, datatype: index
Avatar billede nielle Nybegynder
02. december 2005 - 22:47 #27
Ser fint ud.

Men hvad laver den sidste halvdel:

feltnavn:betalt,datatype tinyint(4), ___ nøgle:ordreid, datatype: index ___

- på betalt-feltet? Det bør du fjerne. Den skal bare være en tinyint(4), og ikke mere.

Nå, men med dette så skal din 2. SQL som sagt se sådan her ud:

$sql = "UPDATE ordreTabel SET betalt=1 WHERE ordreid = " . $ordreid;
Avatar billede trineschunck Nybegynder
02. december 2005 - 22:49 #28
På siden hvor jeg definerer min tabel står der i et felt:
Kør SQL forspørgsel(er) på database fitness_kirken_ [Dokumentation]
SELECT * FROM `ordreTabel` WHERE 1
Avatar billede trineschunck Nybegynder
02. december 2005 - 22:55 #29
Nøgleindekser fjernet fra feltet betalt.
Der kommer ingen fejl, når jeg kører filen, men den skriver ingen værdi for $ordreid...
Avatar billede trineschunck Nybegynder
02. december 2005 - 23:19 #30
Jeg har defineret følgende variabel i min første fil:

$redirectpay1 = $HTTP_GET_VARS["redirectpay"];

if ( $redirectpay1 == 1 ) {
        header("location:https://pay.dandomain.dk/securetunnel.asp?merchantnumber=".$HTTP_SESSION_VARS['merchantnumber']."&SessionID=".urlencode(getenv("HTTP_COOKIE"))."&tunnelurl=".urlencode("http://www.fitness-kirken.dk/ex2php2.php"));}

Når jeg sætter alt det nye ind via sql. kommer jeg ikke videre til folen ex2php2.php.
Avatar billede nielle Nybegynder
02. december 2005 - 23:26 #31
Husk nu at feltet ordreid skal være auto_increment.
Avatar billede trineschunck Nybegynder
02. december 2005 - 23:31 #32
jep, det er det også.
Avatar billede nielle Nybegynder
03. december 2005 - 08:26 #33
Ok, det fremgik bare ikke af 02/12-2005 22:42:42 at den var auto_increment.

Er det korrekt fostået at denne kodeblok:

mysql_connect("localhost","xxx","xxx");
mysql_select_db("xxx");

$sql = "INSERT INTO ordreTabel (betalt) VALUES (0)";
mysql_query($sql) or die(mysql_error());

$ordreid = mysql_insert_id();
echo "Det trukne ordreid: " . $ordreid;

- ikke udskriver noget?

Hvad så hvis du kigger i databasen? Er der heller ikke indsat noget der?
Avatar billede trineschunck Nybegynder
03. december 2005 - 09:47 #34
Ja, ovenstående skriver intet ud.
Jo, autoindex i min tabel, stiger 1 hvergang jeg åbner filen.

Måske har det betydning HVOR i min fil jeg indsætter ovenstående?
Avatar billede trineschunck Nybegynder
03. december 2005 - 09:50 #35
Dette er alt min kode i php: (lidt lang måske...)

<?php

$redirectpay1 = $HTTP_GET_VARS["redirectpay"];

session_start();
   
mysql_connect("localhost","fitness_kirken_","ceqkQGwd");
mysql_select_db("fitness_kirken_");

$sql = "INSERT INTO ordreTabel (betalt) VALUES (0)";
mysql_query($sql) or die(mysql_error());

$ordreid = mysql_insert_id();
echo "Det trukne ordreid: " . $ordreid;

$sql = "UPDATE ordreTabel SET betalt=1 WHERE ordreid = " . $ordreid;

    $HTTP_SESSION_VARS['merchantnumber'] = "3741680"; //Forretningsnummer
    $HTTP_SESSION_VARS['Amountp'] = $HTTP_POST_VARS['Amountp'];
    $HTTP_SESSION_VARS['periode'] = $HTTP_POST_VARS['periode'];
    $HTTP_SESSION_VARS['holdnavn'] = $HTTP_POST_VARS['holdnavn'];
    $HTTP_SESSION_VARS['deltager'] = $HTTP_POST_VARS['deltager'];
    $HTTP_SESSION_VARS['alder'] = $HTTP_POST_VARS['alder'];
    $HTTP_SESSION_VARS['adresse'] = $HTTP_POST_VARS['adresse'];
    $HTTP_SESSION_VARS['postnr'] = $HTTP_POST_VARS['postnr'];
    $HTTP_SESSION_VARS['by'] = $HTTP_POST_VARS['by'];
    $HTTP_SESSION_VARS['telefon'] = $HTTP_POST_VARS['telefon'];
    $HTTP_SESSION_VARS['email'] = $HTTP_POST_VARS['email'];
    $HTTP_SESSION_VARS['bemarkning'] = $HTTP_POST_VARS['bemarkning'];
    $HTTP_SESSION_VARS['korttype'] = $HTTP_POST_VARS['korttype'];
   
   

$HTTP_SESSION_VARS["ordreid"] = $ordreid;
               
    if ( $redirectpay1 == 1 ) {
        // Ret URLsti
        header("location:https://pay.dandomain.dk/securetunnel.asp?merchantnumber=".$HTTP_SESSION_VARS['merchantnumber']."&SessionID=".urlencode(getenv("HTTP_COOKIE"))."&tunnelurl=".urlencode("http://www.fitness-kirken.dk/ex2php2.php"));
       
    }   
           
?>
Avatar billede nielle Nybegynder
04. december 2005 - 08:26 #36
Hmmm? Det burde bestemt virke. Det et nemlig lige præcis dette som er formålet med funktionen mysql_insert_id().

Skriver den heller ikke teksten "Det trukne ordreid" ud?
Avatar billede trineschunck Nybegynder
04. december 2005 - 13:52 #37
nix
Avatar billede trineschunck Nybegynder
04. december 2005 - 13:56 #38
Undskyld undskyld...jeg kunne heller ikke forstå det - lige indtil det gik op for mig at min baggrundsfarve er sort....og da jeg jo ikke har css på det nye, stod dette også med sort...HA HA...så det står ganske fint i toppen...
Avatar billede nielle Nybegynder
04. december 2005 - 20:40 #39
*G*

Ok, så du så får altså trukket nummer. Hvad mangler vi så stadigvæk?
Avatar billede trineschunck Nybegynder
04. december 2005 - 20:48 #40
Tja, det med unik tæller, er jo iorden nu. Og tak for det, det tog jo lidt tid.
Det har dog gjort at jeg får en fejl når jeg sender videre til betaling. Men det er jo ikke umiddelbart noget der har med dette forum at gøre. Jeg kan sende koden, men kun hvis du accepterer.
Avatar billede trineschunck Nybegynder
04. december 2005 - 23:11 #41
No need. Jeg har nørklet mig ud af det selv. Hurra...
Sig hvad du vil have af point...
Avatar billede nielle Nybegynder
05. december 2005 - 09:07 #42
De originale 60 point er helt fint. :^)

... og et svar :^)
Avatar billede nielle Nybegynder
05. december 2005 - 09:11 #43
Nu bruger du så din nyskabte tabel til at trække et ordrenummer med, og det er også helt fint. Men jeg ville da foreslå at du udvider tabellen til at være en decideret ordre-tabel hvor at du har alle data angående den pågældende ordre gemt. Det er vigtigt at gemme den slags data sådan at man altid senere har sin dokumentation i orden hvis der skulle opstå problemer.
Avatar billede nielle Nybegynder
11. december 2005 - 20:22 #44
Husk nu at acceptere svaret :^)
Avatar billede trineschunck Nybegynder
12. december 2005 - 10:08 #45
Hej. Jeg har trykket accepter 2 gange (for længe siden) og nu en gang igen...skal man gøre andet
Avatar billede nielle Nybegynder
12. december 2005 - 18:00 #46
Du skal markere navnet ude i venstre side for at kunne acceptere svare.
Avatar billede nielle Nybegynder
12. december 2005 - 18:30 #47
Takker for point :^)
Avatar billede trineschunck Nybegynder
13. december 2005 - 06:31 #48
Selv tak!
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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