Avatar billede orkide Nybegynder
22. oktober 2002 - 14:55 Der er 22 kommentarer og
1 løsning

fra FORM til ARRAY

Det her er lige til "hvem vil være millionær"

Jeg har lavet en form der henvender sig til et script på egen side.
<?php echo $PHP_SELF; ?>

lad os sige at formen er opbygget efter:
Bruger:
Kodeord:
Email:

nu vil jeg gerne, efter man trykker på submit, hive dataerne, som brugeren har indtastet, ud!
og ind i en array, så jeg derefter kan gennemgå en validering af dataerne før de sættes ind i en MySQL database!

MEN, hvordan hiver jeg disse oplysninger ud af formen og ind i en Array??
Avatar billede barlach Nybegynder
22. oktober 2002 - 14:58 #1
hvis formens method er post ligger de i $_POST og hvis get i $_GET
Avatar billede barlach Nybegynder
22. oktober 2002 - 14:59 #2
prøv at indsæt (hvis det er post):
var_dump($_POST);

i toppen af dit script...så kan du se hvad der kommer med
Avatar billede orkide Nybegynder
22. oktober 2002 - 15:08 #3
jeg har bygget formen op i POST

hvordan skal den array så sættes op? i dette tilfæde er der tale om 3 informationer, brugernavn, password, email!

hvis jeg nu skal hive hver enkelt del ud af denne array!
er der ikke noget med, at man opbygge en array via en variable (er en smule forvirret nu)

fx.
$formdata = (var_dump($_POST).... men skal man ikke skrive noget andet også???

Seb
Avatar billede barlach Nybegynder
22. oktober 2002 - 15:12 #4
var_dump() var bare for at du kunne se meningen med $_POST

du kan istedet sige
$bruger=$_POST['bruger'];

hvis du har en field i din form der hedder bruger

osv.

hvis det stadig ikke virker så post dit script...det gør det hele lidt nemmere
Avatar billede tipsen Nybegynder
22. oktober 2002 - 15:47 #5
Sådan kan du loope over elementerne i $_POST:

foreach($_POST as $inputname => $inputvalue) {
  echo "name: ". $inputname ." - value: ". $inputvalue . "<br>";
}

i stedet for at udskrive dem, kan du jo så validere dem!
Avatar billede orkide Nybegynder
22. oktober 2002 - 15:59 #6
ok!
jeg vil prøve at loope over elementerne!
men forresten, skal der ikke være anført ALLE elementerne i dette med et komma?

foreach ($_POST as $brugernavn => $bruger, $email => $mail osv. osv.

Seb
Avatar billede rasmus.g Nybegynder
22. oktober 2002 - 16:14 #7
Du kan også bruge følgende :

<?php

$data_fra_formular = $_REQUEST;

// Du kan nu tilgå data'erne som et hast-array på følgende måde.

$sql_array = array (
                    $data_fra_formular['bruger' ],
                    $data_fra_formular['kodeord'],
                    $data_fra_formular['Email'  ]
                    );
?>

Håber det hjælper. Man kan selvfølgelig også bruge $_REQUEST direkte i koden, men det er ikke altid en god ide. Husk altid at validere de data du modtager fra klienter.
Avatar billede rasmus.g Nybegynder
22. oktober 2002 - 16:15 #8
Ups...det hedder et 'hash-array' :o)
Avatar billede tipsen Nybegynder
22. oktober 2002 - 18:06 #9
orkide: Prøv at køre den kode jeg skrev - så forstår du nok hvad den laver!
Avatar billede orkide Nybegynder
23. oktober 2002 - 09:26 #10
OKay det jeg har gjort nu er (lidt ekstra arbejde men det funker)
jeg har hevet hver eneste form ud til en variable fx
$form['brugernavn'] = $HTTP_POST_VARS['brugernavn'];

derefter har jeg sat den ind i en array
$form_data = array('brugernavn' => $form['brugernavn']);

og det fungere ganske fint!
så Rasmus jeg vil acceptere dit svar og du scorer 60 point
Avatar billede orkide Nybegynder
23. oktober 2002 - 09:29 #11
Rasmus.q svar lige så du kan få dine point
Avatar billede tipsen Nybegynder
23. oktober 2002 - 10:51 #12
Det var da fuldstændigt overflødigt arbejde at kopiere hele arrayet på den måde - det får du jo absolut intet ud af - udover at du nu har to udgaver af præcis det samme!?

Var ideen ikke, at du skulle kunne tilgå de variable der var blevet postet med formen?
Avatar billede tipsen Nybegynder
23. oktober 2002 - 10:56 #13
Det var forøvrigt løgn...

Du har $form som er en kopi af $_POST og derudover har du $form_data som er en kopi af $form.... :-/ - hvad er det lige formålet med det hele var?
Avatar billede tipsen Nybegynder
23. oktober 2002 - 10:57 #14
Prøv følgende liniers kode efter det du har lavet:

print_r($_POST);
print_r($form);
print_r($form_data);

-bare for at se forskellen på dem...
Avatar billede orkide Nybegynder
23. oktober 2002 - 18:28 #15
ohøj Tipsen...
jeg kan godt se hvad du mener...
men jeg er ikke helt inde i hvad du mener mht. Foreach statementet!
jeg kan godt se at den hiver alle informationerne ud af $_POST
men hvordan deler du så array'et op i flere dele!
hvis du kan hjælpe mig med dette så scorer du point...
især eftersom Rasmus.q ikke svarer mere...
p.s. jeg skylder dig nogle point fra isset spørgsmålet!
dit svar var KANON!!

hygge
Seb
Avatar billede tipsen Nybegynder
23. oktober 2002 - 18:55 #16
Mit forslag er at du bare arbejder direkte på $_POST arrayet i stedet for at kopiere informationerne fra dette og videre til et andet array som du hellere vil arbejde med - men hvilke operationer er det du vil udføre på form-elementerne?
Avatar billede orkide Nybegynder
23. oktober 2002 - 18:57 #17
uha!
jeg vil for det første se om passwordet er for kort og om det passer med det ekstra password man skal taste ind for at se om de matcher!
så skal emailen valideres og til sidst skal brugernavnet undersøges om den i forvejen findes i SQL databasen!!
derfor er det vigtigt at jeg kan hive hver enkelt element ud af array'et


Seb
Avatar billede tipsen Nybegynder
23. oktober 2002 - 19:08 #18
Hvis du har funktioner til ovennævnte er det jo bare at skrive:

if(!PasswordValid($_POST['password'])) {
  echo "Password ugyldigt";
}
if(!EmailValid($_POST['email'])) {
  echo "Email ugyldigt";
}

osv...
Avatar billede orkide Nybegynder
23. oktober 2002 - 19:08 #19
sidder lige og leger med dit forslag
<?php
$error = "";
foreach ($_POST as $key => $value)
    {
    $error = "$key = $value<br>";
    }
?>

og variablen $error indsættes et vilkårligt sted indenfor <body>
men det eneste jeg får ud af det er navnet på submit knappen????
WHY??? hvor bliver alle de andre informationer af som man har indtastet i formen!!
Avatar billede orkide Nybegynder
23. oktober 2002 - 19:13 #20
ok!
hvordan laver jeg så en funktion der overall sender brugeren videre til næste side, hvis alle elementerne er udfyldt korrekt!??

du scorer maaange point nu..
p.s. hvormange kunne du tænke dig ...120 oder hvas!
Avatar billede tipsen Nybegynder
23. oktober 2002 - 20:26 #21
struktur:

function ValidEmail($email) {
  hvis email gyldig returner true;
  ellers returner false;
}

function ValidUserPass($user, $pass) {
  hvis user og pass mathcer en bruger i databasen returneres true;
  ellers returner false;
}

$error = "";
if(!ValidEmail($_POST['email'])) {
  $error .= "Ugyldig emailadresse<br>";
}
elseif(!ValidUserPass($_POST['username'], $_POST['password']) {
  $error .= "Username eller password forkert!<br>";
}
if(!empty($error)) {
  echo $error;
}
else {
  header("Location: adressepåside.php");
}

Så kan du se et forslag til en overordnet struktur - så må selv bikse med valideringsfunktionerne!
Avatar billede orkide Nybegynder
24. oktober 2002 - 20:24 #22
super cool
det arbejder jeg videre udfra!!
hvis du vil have pointene... så må du lige svarer!

Seb
Avatar billede tipsen Nybegynder
24. oktober 2002 - 20:52 #23
ok - god arbejdslyst :-)
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