Avatar billede ahrensberg Nybegynder
26. marts 2003 - 23:40 Der er 17 kommentarer og
3 løsninger

Overførsel af strenge...

Jeg har lavet en side hvor man på første side indtaster forskellige oplysninger, som skal indføres i en database. På næste side skal man så vælge hvilke billeder der skal uploades, og på side tre skal alt indføres i databasen, men hvordan får man en streng igennem disse sider som indeholder flere linier? Altså en streng som $streng[]?

Jeg har hidtil i min form brugt <INPUT TYPE=hidden NAME...> osv. , men denne kan kun indeholde en af linierne...
Avatar billede schaefner Juniormester
26. marts 2003 - 23:51 #1
Du laver vel bare flere hidden-felter:
<input type="hidden" name="overskrift">
<input type="hidden" name="tekst"> etc.
Avatar billede schaefner Juniormester
26. marts 2003 - 23:56 #2
Virker det her ikke?

--- 1.php ---

<form method="post" action="2.php">
<input type="text" name="overskrift"><br>
<textarea name="tekst" rows="7" cols="15"></textarea><br>
<input type="submit" name="send" value="Videre">
</form>

--- 2.php ---

<form method="post" action="3.php"  enctype="multipart/form-data">
<input type="hidden" name="overskrift" value="<? echo $_POST['overskrift']; ?>">
<input type="hidden" name="tekst" value="<? echo $_POST['tekst']; ?>">
<input type="file" name="fil"><br>
<input type="submit" name="send" value="Videre">
</form>
Avatar billede ion Nybegynder
27. marts 2003 - 01:37 #3
Hvis du mener at strengen bogstaveligt talt skal kunne indeholde flere linjer, fx således:
"Der var
engang en
mand der
hed Åge.", ja så er det <textarea name="foo"></textarea> du skal bruge.

Hvis det derimod drejer sig om en streng der skal blive en del af arrayet string[] anvender du bare <input type="text" name="string[]" /> e.l.
Avatar billede ahrensberg Nybegynder
27. marts 2003 - 09:50 #4
Jeg bruger nøjagtig det samme som schaefner foreslår, men det der er problemet er at vidersende en <SELECT> som hvor jeg har valgt MULTIPLE...
Avatar billede tipsen Nybegynder
27. marts 2003 - 11:52 #5
Dvs. det er et array du skal videresende?
Avatar billede tipsen Nybegynder
27. marts 2003 - 11:54 #6
-hvis det er tilfældet, skal du bruge serialize() - se http://dk.php.net/manual/en/function.serialize.php
Avatar billede tipsen Nybegynder
27. marts 2003 - 11:54 #7
Så vidt jeg husker er arrays i formularer ikke standard-html og kan dermes ikke garanteres at virke i alle browsere/os'er
Avatar billede ahrensberg Nybegynder
27. marts 2003 - 13:28 #8
Tipsen:> Kun du ikke forklare, hvordan dette gøres?
Avatar billede ion Nybegynder
27. marts 2003 - 13:59 #9
ahrensberg: Så skal du bruge den metode jeg nævnte før:

<select name="minselect[]">
<option value="foo">foo</option>
<option value="bar">bar</option>
</select>

tipsen: Du har højst sandsynligt ret. Ved du også hvilke browsere på hvilke styresystemer det drejer sig om?
Desuden, ang. serialize(): Det er vel muligt at udnytte den, såfremt at side 2 genererer et array, der så skal føres videre til side 3. Hvis han ikke skal overføre et decideret array, men bare have smidt værdierne i et nyt array kan den vel ikke?
Avatar billede ahrensberg Nybegynder
27. marts 2003 - 19:31 #10
Det er netop den metode jeg har brugt:

<select name="minselect[]">
<option value="foo">foo</option>
<option value="bar">bar</option>
</select>

På næste side har jeg så en array der hedder minselect[], men hvordan får jeg den videre herfra? Altså til side tre?
Avatar billede tipsen Nybegynder
27. marts 2003 - 21:04 #11
"side to filen":


<form ...>
  <input type="hidden" name="serializedvar" value="<?php echo serialize($_POST['minselect']);?>">
  ...
</form>

så vil indholdet af $_POST['minselect'] blive "serialized" - dvs. konverteret til en streng, som kan transporteres videre til side tre, hvor array'et kan rekonstrueres:

"side tre fil":

<?php
$arrayvar = unserialize($_POST['serializedvar']);
print_r($arrayvar);
?>
Avatar billede tipsen Nybegynder
27. marts 2003 - 21:05 #12
ion: Nej - jeg ved ikke hvor og hvornår det gælder, men jeg vil ikke selv turde bruge det til noget seriøst.
Avatar billede ahrensberg Nybegynder
27. marts 2003 - 22:56 #13
Når jeg skriver:

<?php
$arrayvar = unserialize($_POST['serializedvar']);
print_r($arrayvar);
?>

...kommer intet frem!
Avatar billede tipsen Nybegynder
28. marts 2003 - 00:07 #14
Der er mange muligheder for fejl her - så prøv at vise de tre scripts du har!
Avatar billede ahrensberg Nybegynder
28. marts 2003 - 09:38 #15
tipsen:>  Jeg ved ikke hvad du vil have, men mine sider er som på nednenstående eksempel:

Side 1:
-------------------------------------
<FORM METHOD=post ACTION=side2.php>

    <SELECT NAME=test SIZE=3 MULTIPLE>
        <OPTION>test1
        <OPTION>test2
        <OPTION>test3
        <OPTION>test4
        <OPTION>test5
        <OPTION>test6
    </SELECT>

    <INPUT TYPE=submit>

</FORM>
-------------------------------------
Side 2:
-------------------------------------

<FORM METHOD=post ACTION=side2.php>

    <INPUT TYPE=hidden NAME=mærker VALUE="<? echo "$test" ?>">

    <INPUT TYPE=submit>

</FORM>
-------------------------------------
Side 3:
-------------------------------------

for ($i = 0; $i <= sizeof($test); $i++) {
    echo $test[$i];
}

-------------------------------------

Er det nogenlunde til at forstå? Der mangler selvfølgelig nogen <INPUT> på side 2, men det er vel lige meget(?), grunden til at jeg har lavet en side 2, er at på side 1 skriver man hvor mange billeder man vil uploade, og så laver den det antal <INPUT> på side 2...
Avatar billede tipsen Nybegynder
28. marts 2003 - 09:47 #16
Jeg kan ikke helt se, hvor du har forsøgt at bruge serialize(), men nok om det! Her er nogle rettelser:

-------------------------------------
Side 2:
-------------------------------------
<?php
echo 'Side 2 test: ' . unserialize($_POST['test']) . '<br>';
?>
<FORM METHOD="post" ACTION="side2.php">
    <INPUT TYPE="hidden" NAME="maerker" VALUE="<? echo serialize($_POST['test'];?>">
    <INPUT TYPE="submit">
</FORM>
-------------------------------------
Side 3:
-------------------------------------
<?php
echo 'Side 3 test: ' . unserialize($_POST['maerker']) . '<br>';
$arrayvar = unserialize($_POST['maerker']);
foreach($arrayvar as $elem) {
  echo $elem . '<br>';
}
-------------------------------------

-hvad er resultatet af dette?
Avatar billede ahrensberg Nybegynder
28. marts 2003 - 09:59 #17
Jeg har åbentbart ikke været så smart til at forklare mig, for jeg stillede spørgsmålet her: http://www.eksperten.dk/spm/334362 men på en lidt mere forståelse måde, så jeg har valgt at hæve pointene til det dobbelte og så dele dem ud på jer... Er det ikke ok?
Avatar billede tipsen Nybegynder
28. marts 2003 - 10:09 #18
Fungerede det?
Avatar billede ahrensberg Nybegynder
28. marts 2003 - 11:12 #19
Ja, denne løsning fungerede:

->
  Brug implode så det bliver til en streng:
  http://www.php.net/manual/en/function.implode.php
 
  og explode bagefter hvis det skal blive til et array igen:
  http://www.php.net/manual/en/function.explode.php
<-
Avatar billede tipsen Nybegynder
28. marts 2003 - 14:53 #20
Hvis du i stedet benytter serialize() og unserialize() vil du få en løsning som fungerer i flere tilfælde - den er bedre egnet til formålet! Men du gør bare helt som du har lyst til.
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