Strona 1 z 1

konstruowana nazwa dla zmiennej miedzy ['']

: pt sty 30, 2004 9:03 pm
autor: Dreen
no wiec mam takie zagadnienie...
z formularza wysylam pewna liczbe zmiennych... chodziaz dla tego przykladu zalozmy ze sa one przekazywane przez GET zamiast przez POST. Liczba zmiennych jest zmienna (glupio to brzmi - chodz o to ze liczba zmiennych zwieksza sie ale w czasie dzialania skryptu nie zmienia sie) i kazda z tych zmiennych razem z jej wartoscia ma sie stac para indeks-wartosc w tablicy. Problem polega na zdefiniwaniu nazwy w tym kwadratowym nawiasie prz GET. Dla rozjasnienia podam przyklad:
pasek adresu pisze:plik.php?var1=war1&var2=war2&var3=war3&var4=war4
^- przykladowe wysylanie danych.

o oto sama petla \/
[php]<?php
$count = count($contimg); // contimg to pierwotna tablica
for ($i=1; $i <= $count; $i++)
{
$entry = "var".$i."";
$contimg[$i]= $_GET['$entry']; // teraz wszystkie wartosci zostana zastapione przez nowe, nadeslane z GET-a
}
?>[/php]

mam szczerze mowiac jeden pomysl na rozwiazanie tego zagadnienia, a mianowicie: zmienne dynamiczne ($$zmienna) ale nie umiem tego zastosowac do tego przykladu (jesli to wlasnie one moga tu pomoc)

Re: konstruowana nazwa dla zmiennej miedzy ['']

: sob sty 31, 2004 12:31 am
autor: Krzysztof Aszkiełowicz
A tak nie zadziała :|

Kod: Zaznacz cały

plik.php?var[0]=ok&var[1]=false
później countem sprawdzasz wielkosc tablicy i odczytujesz.

Pisałem z głowy i wiem, że w POST coś takiego działa.

Re: konstruowana nazwa dla zmiennej miedzy ['']

: sob sty 31, 2004 1:46 pm
autor: Wojciech Kocjan
Nie jestem pewien czy pomoze, ale sprobuj zamiast:

[php]<?php
$contimg[$i]= $_GET['$entry']; // teraz wszystkie wartosci zostana zastapione
?>[/php]

dac:

[php]<?php
$contimg[$i]= $_GET["$entry"]; // teraz wszystkie wartosci zostana zastapione
?>[/php]

Chodzi o zmiane nawiasow w $_GET z ' na ".

Re: konstruowana nazwa dla zmiennej miedzy ['']

: sob sty 31, 2004 1:47 pm
autor: Dreen
hmmm moze to i jest jakies wyjscie ale nie rozwiazuje to glownego problemu. sprobowalem tak jak mowiles, pokaze to dokladnie:
formularz:[php]<form action="tsh.php" method=post>
<?php
for ($i=1; $i<=4; $i++)
{
echo ("<input type=text name=\"var[".$i."]\" value=\"".$i."\"><br>");
}
?>
<input type=submit></form>[/php]
skrypt:
[php]<?php
$contnimg = array(1=>"jeden", "dwa", "trzy", "cztery");
$count = count($contimg);
for ($i=1; $i<=$count; $i++)
{
$contimg[$i] = $_POST['var[$i]'];
}
echo ("przegląd dla \$contimg:<br><br>");
for ($a=1; $a<=$count; $a++)
{
echo ("".$a." - ".$contimg[$a]."<br>");
}
echo ("koniec");
?>[/php]
szczegolnie zwracam uwage na $_POST['var[$i]']; - moze wlasnie to jest zle albo ja czegos nie rozumiem

Re: konstruowana nazwa dla zmiennej miedzy ['']

: sob sty 31, 2004 3:26 pm
autor: Michał Fikus
szczegolnie zwracam uwage na $_POST['var[$i]']; - moze wlasnie to jest zle albo ja czegos nie rozumiem
Tak to rzeczywiście jest źle - tablice wielowymiarowe zapisujemy w sposób następujący:

$_POST['var'][$i] - każdy wymiar ma osbne nawiasy kwadratowe.

Odnośnie tematu, pętle zacznij od $i=0 - PHP liczy od zera.
W tym przypadku mógłbyś zastosować pętle foreach() - byłaby zdecydowanie czytelniejsza i chyba szybsza.

No to skoro już czytam ten kod, to radzę poczytać trochę o funkcji echo() - wykorzystujesz ją mało oszczęnie, np.

Kod: Zaznacz cały

echo ("przegląd dla \$contimg:<br><br>"); 
jest zdecydowanie wolniejsze od

Kod: Zaznacz cały

echo ('przegląd dla $contimg:<br><br>'); 
a efekt jest ten sam.

Re: konstruowana nazwa dla zmiennej miedzy ['']

: sob sty 31, 2004 7:45 pm
autor: Dreen
Michał Fikus pisze: $_POST['var'][$i] - każdy wymiar ma osbne nawiasy kwadratowe.
wielkie dzieki
Michał Fikus pisze: No to skoro już czytam ten kod, to radzę poczytać trochę o funkcji echo() - wykorzystujesz ją mało oszczęnie, np.

Kod: Zaznacz cały

echo ("przegląd dla \$contimg:<br><br>"); 
jest zdecydowanie wolniejsze od

Kod: Zaznacz cały

echo ('przegląd dla $contimg:<br><br>'); 
a efekt jest ten sam.
masz racje aczkolwiek dla tego przykladu ma to zerowe znaczenie - petla pzegladania byla mi potrzebna tylko w tescie zeby zobaczyc czy tablica zmienia sie tak jak chce.

jeszcze raz wielkie dzieki

dopisek - nie chcialo jeszcze dzialac ale zauwazylem blad w nazwie ablicy i juz jest wszystko ok. jeszcze raz dziekuje