Avatar billede janiz Nybegynder
12. februar 2004 - 02:47 Der er 19 kommentarer og
2 løsninger

Check i DB før POST!

Hej, jeg skal sende nogle data videre til en secure server via POST:

<form onSubmit="return validate(this)" action="https://blabla.dk/grap.cgi" method="POST" >

<input type="hidden" name="kunde_nr" value="213">
<input type="submit" value="Videre til secure site" name="next">
</form>

Jeg prøver på finde en måde hvor på jeg kan validere at kunde_nr=213 ikke findes i en mysql db på min server?

Serveren jeg Post'er til er ikke min, så dette check skal ske inden dataerne postes.

jeg kan ikke acceptere noget form for javascript for det skal ikke være muligt at se en liste over kundenumre som er optagede.

jeg laver lidt simpel Javascript validering af input feltet inden for at checke at det er udfyldt osv.
Håber det kan lade sig gøre? :)
Avatar billede strych9 Praktikant
12. februar 2004 - 03:58 #1
hmm egentlig tænkte jeg først "stored procedure", men dem kan man jo først finde i mysql 5.0 og opefter. Så jeg ved det ikke, men jeg lytter lige med. Er interesseret.
Avatar billede janiz Nybegynder
12. februar 2004 - 04:09 #2
Ok jeg sidder og venter med spænding ;-)
Avatar billede sukos Juniormester
12. februar 2004 - 04:25 #3
Hvordan får du de 213?
Avatar billede janiz Nybegynder
12. februar 2004 - 04:33 #4
"Hvordan får du de 213?" de bliver indtastet, sorry det var lidt misvisende med det 'hidden' felt.. jeg har både nogle hidden felter og nogle som bliver indtastet on the fly. og det er self. de sidste som skal checkes :)
Avatar billede muddi Praktikant
12. februar 2004 - 05:06 #5
Hvis jeg har forstået dit spørgsmål korrekt, så indtaster DU et kundenummer... Du vil så være sikker på at det kundenummer ikke findes i databasen i forvejen? Derfor vil du kontrollere dette inden du gemmer posten?

Gør følgende:

1) Send brugeren videre til den side der skal gemme input
2) Åben forbindelse til databasen
3) Søg efter det kundenummer der er indtastet
4) Lav et control statement, hvor du validerer dit database output
5) Hvis kundenummeret eksisterer sendes brugeren retur til forrige side, hvor der vises en fejlmeddelelse
6) Hvis kundenummeret ikke eksisterer gemmes oplysningerne i databasen
7) Databaseforbindelsen lukkes
8) Brugeren får besked om at alt forløb som det skulle

I min gennemgang antager jeg, at du selvfølgelig har mulighed for at læse fra databasen eftersom du har mulighed for at skrive til den. Hvis dette ikke er tilfældet, vil ovenstående selvfølgelig ikke virke! Til gengæld kan jeg så heller ikke komme på en anden løsning, hvis det skulle vise sig at være tilfældet.

Skriv endelig, hvis du også har brug for hjælp til koden, men jeg skriver ikke hele scriptet for dig :o)

/Morten
Avatar billede janiz Nybegynder
12. februar 2004 - 05:15 #6
Hej Muddi, tak for dit indlæg, problemet er at det ikke er min server som POST'en sendes til, ejg skal være sikker på at kundenummeret ikke er i MIN DB før jeg kan sende det videre, hvis POST'en bliver sendt til anden server og kunde nummeret allerede er i min db så giver det problemer, den server jeg poster til skal have en POST. og jeg kan ikke ændre noget i deres ende :(
Avatar billede muddi Praktikant
12. februar 2004 - 05:19 #7
Du siger altså at du ikke har mulighed for at læse fra databasen?!
Avatar billede janiz Nybegynder
12. februar 2004 - 05:29 #8
jeg har mulighed for at læse/skrive til min DB ja.
Avatar billede muddi Praktikant
12. februar 2004 - 05:36 #9
Jamen så kan du jo godt søge på det kundenummer du har indtastet. Hvorpå du kontrollerer om det eksisterede eller om det kan skrives ind :o)
Avatar billede janiz Nybegynder
12. februar 2004 - 05:43 #10
det er jo ikke så let, jeg kan jo ikke søge på navnet før det er indtastet og kunden klikker submit og POST'en bliver sent til server 2
Avatar billede muddi Praktikant
12. februar 2004 - 05:58 #11
Hvad er det for et navn?! Var det ikke kundenummeret vi skulle kontrollere?

Du kan jo godt søge på kundenummeret inden du gemmer:

<?php

// Åben forbindelsen og vælg databasen

$res = mysql_query("SELECT * FROM `tabel` WHERE `kundeid` = " . $_POST['kundeid']);

if($res === NULL)
{
    // Indsæt i databasen
    mysql_query("INSERT INTO `tabel`
                (`Kundenr`, `Navn`)
                  VALUES ( " . $_POST['kundeid'] . ", " . $_POST['kundenavn'] . ")");


} else
{
    // Kode der sender brugeren retur
    // ...
}

// Vis status besked
// Luk forbindelsen til databasen
?>


/Morten
Avatar billede sukos Juniormester
12. februar 2004 - 06:13 #12
Man kan jo ikke sende en post videre med header?
Men det var måske en ide, at først vise en ny side, spørge brugeren, "Er det korrekt?" og så kan brugeren klikke på submit til den anden server.
Avatar billede muddi Praktikant
12. februar 2004 - 06:23 #13
Jo, det er faktisk muligt at sende brugeren videre med en header. Det gøres f.eks. med output buffering.

<?php
// Vi gemmer alt i bufferen, også det der er udenfor php-tags
ob_start()

// Åben forbindelsen og vælg databasen

$res = mysql_query("SELECT * FROM `tabel` WHERE `kundeid` = " . $_POST['kundeid']);

if($res === NULL)
{
    // Indsæt i databasen
    mysql_query("INSERT INTO `tabel`
                (`Kundenr`, `Navn`)
                  VALUES ( " . $_POST['kundeid'] . ", " . $_POST['kundenavn'] . ")");


} else
{
    // Kode der sender brugeren retur
    // ...
}

// Vis status besked
// Luk forbindelsen til databasen

// Nu kan vi sende det hele til browseren
ob_end_flush();
?>
Avatar billede janiz Nybegynder
12. februar 2004 - 06:25 #14
muddi, jeg skal ikke gemme noget på min server på dette tidspunkt.. det sker først senere efter at andre ting er blevet valideret på den anden server. (kunden forlader min side og kommer tilbage senere.

sukos: jeg er klar over det ikke er let men der må være en løsning.. nogle har fåreslået noget med cUrl men det er ikke så optimalt, men måske den eneste måde :(
Avatar billede janiz Nybegynder
12. februar 2004 - 06:26 #15
det er sent så undskyld min tastatur smuttere!
Avatar billede muddi Praktikant
12. februar 2004 - 06:29 #16
Hvad mener du med at gemme på din server? Jeg har da ikke prøvet at gemme noget på din server...(?!)

Nu er jeg lidt i tvivl om jeg overhovedet har forstået dit spørgsmål. Vil du ikke prøve at forklare processen punkt for punkt?
Avatar billede janiz Nybegynder
12. februar 2004 - 06:38 #17
muddi, jeg skrev det i reference til:
"Du kan jo godt søge på kundenummeret inden du gemmer:"

troede du mente gemte i min lokale db.

her er processen.

en kunde kommer til min portal og vil købe et at mine produkter, jeg registrerer alle kundenavne på min server. De skal være unikke. Købsprocessen bliver ikke afsluttet på min side, de sendes til en secure server hos min salgsagent og jeg skal være sikker på at den nye kunde ikke har valgt et kundenavn som allerede er i brug i systemet. Dette er svært fordi stedet hvor de sendes hen kun acceptere en POST fra min side. og derfor kan jeg ikke lave et check, jeg ved godt jeg kan lave 2 sider og så tjekke kundenavnet på side 1 og først lave POST'en på side 2 men det er ikke det jeg vil.
Avatar billede muddi Praktikant
12. februar 2004 - 07:07 #18
Ok, det lyder besværligt :o)
Nu tror jeg at jeg har forstået det, og jeg har som tidligere nævnt ikke noget løsning, hvis tilfældet er som du beskriver. Sorry!

/Morten
Avatar billede janiz Nybegynder
12. februar 2004 - 07:08 #19
ok surt, men tak for at du prøvede :)
Avatar billede sukos Juniormester
12. februar 2004 - 18:10 #20
Nu ved jeg ikke hvordan du har bygget DB'en op, men når der kommer en ny, har du vel en autoincrement value?
Så må det jo blive noget med ved load af siden, at hente næste "ledige" plads, og derefter noget javascript til at tjekke om brugerens value er over værdien?
Avatar billede muddi Praktikant
01. april 2004 - 16:05 #21
janiz?
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