Avatar billede causasui Nybegynder
25. februar 2003 - 20:10 Der er 7 kommentarer og
2 løsninger

variabler i et array

Kan følgende lade sig gøre:
Jeg vil gerne "pakke" en masse modtagede variabler i et array, f.eks $var1,$var2,$var3, men navnet på og antallet af variabler er vilkårligt (sendes via post). Dette array indeholdende disse variabler vil jeg så sende videre til en ny side, og pille dem ud af array'et igen, så jeg igen har, f.eks $var1,$var2,$var3 ?
Håber det giver mening !
Avatar billede swaxi Nybegynder
25. februar 2003 - 20:27 #1
jeg er ikke helt sikker på om det er det du vil, men følgende script tager alle POST-variable, sender dem til scriptet 'http://www.etellerandet.dk/etellerandet.cgi' og viser resultatet til brugeren. (akkurat som hvis han selv havde gået ind på den side) :

<?php
function sendToHost($host,$method,$path,$data,$useragent=0)
{
    // Supply a default method of GET if the one passed was empty
    if (empty($method))
        $method = 'GET';
    $method = strtoupper($method);
    $fp = fsockopen($host,80);
    if ($method == 'GET')
        $path .= '?' . $data;
    fputs($fp, "$method $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Content-type: application/x-www-form-
urlencoded\r\n");
    fputs($fp, "Content-length: " . strlen($data) . "\r\n");
    if ($useragent)
        fputs($fp, "User-Agent: MSIE\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    if ($method == 'POST')
        fputs($fp, $data);

    while (!feof($fp))
        $buf .= fgets($fp,128);
    fclose($fp);
    return $buf;
}

function splitHttp($http)
{
    if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $http, $match)) {
        return array('header' => $match[1], 'body' => $match[2]);
    } else return array('header' => $http, 'body' => null);
}

$flag = true;    $data = '';
foreach ($HTTP_POST_VARS as $key => $value) {
    if ($flag) $flag = false;
    else $data .= '&'
    $data .= $key.'='.rawurlencode($value);
}

$http = sendToHost('www.etellerandet.dk','POST','http://www.etellerandet.dk/etellerandet.cgi',$data);
$match = splitHttp($http);
foreach ($match['header'] as $header)
    header($header);
if ($match['body'] != null)
    echo $match['body'];
exit;
?>
Avatar billede postndk Nybegynder
25. februar 2003 - 20:28 #2
kig lidt på serialize()
Avatar billede al1407 Nybegynder
25. februar 2003 - 20:46 #3
og unserialize() ;) ..
Avatar billede causasui Nybegynder
25. februar 2003 - 20:49 #4
->swaxi
Jeg har lidt svær ved at forstå ovenstående kode, er ikke så trænet endnu!
->postnuk
Jeg har kigget på serialize og det er helt klart den funktion jeg skal bruge!
Men hvordan jeg får lavet mit array kan jeg stadig ikke finde ud af, havde tænkt mig måske at bruge funktionen array_push, men jeg ved ikke præcist hvad variablerne hedder eller hvor mange der kommer, hvis i forstår !!
Avatar billede alrua Nybegynder
25. februar 2003 - 21:04 #5
du kan da bare kalde post-variablerne array-navne...

<input type="text" name="var[]">
<input type="text" name="var[]">
<input type="text" name="var[]">
<input type="text" name="var[]">

så får du dem som et array når de bliver sendt og så kan du bare løbe dem igennem med en foreach()-løkke :)
Avatar billede causasui Nybegynder
25. februar 2003 - 21:15 #6
->alrua
Det tror jeg sgu er en god ide, prøver det lige af ! Men når det måske ikke i aften !
-> All ya !
Vender tilbage så snart jeg har afprøvet det, nu er der ihvertfald nogle forslag til at komme videre med!
Avatar billede causasui Nybegynder
25. februar 2003 - 21:34 #7
Har lige fundet dette her:
function my_function($all_vars)
{
    extract($all_vars);
    //meat of function
}

$all_vars=get_defined_vars();
my_function($all_vars);

Måske dette kan bruges!
Avatar billede swaxi Nybegynder
25. februar 2003 - 22:50 #8
hmm ... utestet, men prøv det her
[script_a.php]
<?php
echo "<form method=\"post\" action=\"script_b.php\">";
echo "<input type=\"text\" name=\"test\"/>";
echo "<input type=\"submit\" />";
echo "</form>";
?>

[script_b.php]
<?php
$post_data = serialize($HTTP_POST_VARS);
echo "<form method=\"post\" action=\"script_c.php\">";
echo "<input name=\"post_data\" type=\"hidden\" value=\"".addslashes($post_data)."\" />";
echo "<input type=\"submit\" />";
echo "</form>";
?>

[script_c.php]
<?php
$post_data = unserialize(stripslashes($HTTP_POST_VARS['post_data']));
// post_data indeholder nu de variable, der blev POST'ed til script_b.php
foreach ($post_data as $key => $value)
    echo "postdata[".$key."]='".$value."'<br />";
?>
Avatar billede causasui Nybegynder
27. februar 2003 - 11:52 #9
->swaxi
Ja ovenstående burde virke, men jeg får:
Warning: Invalid argument supplied for foreach() in /hotel/modtag.php on line 31. array_expression må i dette tilfælde altså ikke være et array !!, har så forsøgt at modificere lidt:sendt to værdier afsted for at være sikker på det var et array(men det er det vel altid ?)
<input type=\"text[]\" name=\"test\"/>
<input type=\"text[]\" name=\"test\"/>
Men kan ikke få det til at virke, det er åbenbart ikke så nemt at sende et array afsted på denne måde.....(serialize og alt det shit)
Så jeg har gjort flg. som alrua så enkelt nævnte:
Sendt det afsted som array via post form, løbet det igennem som en løkke, i denne løkke indsat disse værdier i en post form igen, og så sende dem videre igen, for derefter igen at løbe dem igennem en løkke !!

Men den serialize funktion må lade vente på sig, har brugt rigelig tid på den !!
Tusind tak for hjælpen!
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