konstruowana nazwa dla zmiennej miedzy ['']

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

konstruowana nazwa dla zmiennej miedzy ['']

Post 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)
Krzysztof Aszkiełowicz
Zaczyna działać
Zaczyna działać
Posty: 458
Rejestracja: pn maja 26, 2003 9:29 pm
Lokalizacja: Warszawa
Kontakt:

Re: konstruowana nazwa dla zmiennej miedzy ['']

Post 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.
Wojciech Kocjan
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: sob gru 14, 2002 10:51 am

Re: konstruowana nazwa dla zmiennej miedzy ['']

Post 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 ".
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

Re: konstruowana nazwa dla zmiennej miedzy ['']

Post 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
Michał Fikus
Przelotem
Przelotem
Posty: 242
Rejestracja: sob cze 08, 2002 6:39 pm
Lokalizacja: Wejherowo

Re: konstruowana nazwa dla zmiennej miedzy ['']

Post 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.
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

Re: konstruowana nazwa dla zmiennej miedzy ['']

Post 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
ODPOWIEDZ