Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka formularzy generowanych przez pętlę for..
Forum PHP.pl > Forum > PHP
edgar5
Mam nastepujacy problem.
Odczytuje danez tablicy wielowymiarowej i:

petla for $i=1 ; $i<=20(przykladowo 20); $i++ .. generuje mi kilka formularzy:

pisze pobieżnie omijajac partie kodu aby przedstawic zarys problemu:

Czesc 1.
for($i=1; $i<=ilosc elementow w tablicy; $i++){
<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
<input type=hidden name=zmienna value=$i> /ta zmienna przeslana mowi potem ktora tablice ma zmienic skrypt
<input type=text name=zmienna value=zmienna['towar'][$i]['cena']
......
<input type=submit name=zmien value=zmien dane>
<input type=submit name=reset value=usun dane>
</form>
};

zmienne sterujace $i , pozostale zmienne z tablic sa nastepnie przekazaywane do dwoch alternatywnych skryptow:

czesc 2.
skrypt modyfikujacy dane
if(isset($reset)){usuwanie danych z formularza}
if(isset($zmien)){modyfikacja danych wstawionych do powyzszuch pol - po zastapieniu wartosci value}

czesc 2 dziala, walidacja przebiega ok, problem polega w czesci pierwszej.
ciagle przekazywana jest zmiena $i=1....bez wzgledu na to w ktorym formularzu zmodyfikuje zmienne i submit(reset/zmien) ktorego formularza nacisne.
czemu?
czyzby zmienna zmien oraz reset ktora ma ta sama wartosc we wszystkich formularzach uruchmiala domyslnie tylko formularz 1 questionmark.gif

W czym rzecz?
Prym
tak wydaje mi się że o wiele prościej by było gdybyś wkleił kod taki jaki masz w skrypcie bo z tego co napisałeś ciężko wyczuć gdzie jest błąd - oprócz takich szczegółów jak braki cudzysłowów w atrybutach... zreszta jak wkleisz kod taki jaki masz (chodzi o całą pętlę) to bedzie znacznie prościej coś wywnioskować
edgar5
<?
//-------------------------------------------
session_name('_Handlowa');
session_start();
//koniec naglowka i sprawdzania
//------------------------------------------


//modyfikowanie danych
//poczatek validacji
if(isset($modyf)){
echo $zmienna;
if(strlen($zmienna)>0){$zmienna=stripslashes($zmienna) && is_numeric($zmienna);}else{$zmienna=FALSE; $message1 .="<font color=red>Blad

wewnetrzny!</font><br>";};
if(strlen($rozmiar)>0){$rozmiar=stripslashes($rozmiar);}else{$rozmiar=FALSE; $message1 .="<font color=red>Nie podano rozmiaru!</font><br>";};
if(strlen($kolor)>0 && !is_numeric($kolor)){$kolor=stripslashes($kolor);}else{$kolor=FALSE; $message1 .="<font color=red>Nie podano koloru!</font><br>";};
if(strlen($ilosc)>0 && is_numeric($ilosc) && $ilosc>0){$ilosc=stripslashes($ilosc); $ilosc=floor($ilosc);}else{$ilosc=FALSE; $message1 .="<font color=red>Nie

podano ile sztuk!</font><br>";};

//koniec walidacji

if($zmienna && $rozmiar && $kolor && $ilosc){


$_SESSION['towar'][$zmienna]['rozmiar']=$rozmiar;
$_SESSION['towar'][$zmienna]['kolor']=$kolor;
$_SESSION['towar'][$zmienna]['ilosc']=$ilosc;
$cena_total=$ilosc*$_SESSION['towar'][$zmienna]['cena'];
$_SESSION['towar'][$zmienna]['cena_total']=$cena_total;
}



};
//koniec modyfikacji



//usowanie danych
//walidacja formularza
if(isset($usun)){
echo $zmienna;

if(strlen($zmienna)>0){$zmienna=stripslashes($zmienna) && is_numeric($zmienna);}else{$zmienna=FALSE; $message1 .="<font color=red>Blad wewnetrzny

usuwania!</font><br>";};
//koniec walidacji

if($zmienna){
$_SESSION['towar'][$zmienna]['link']=0;
$_SESSION['towar'][$zmienna]['pid']=0;
$_SESSION['towar'][$zmienna]['nazwa']=0;
$_SESSION['towar'][$zmienna]['rozmiar']=0;
$_SESSION['towar'][$zmienna]['kolor']=0;
$_SESSION['towar'][$zmienna]['ilosc']=0;
$_SESSION['towar'][$zmienna]['cena']=0;
$_SESSION['towar'][$zmienna]['cena_total']=0;
}

echo $message1;

};









//FORMULARZ
//poczatek tabeli
echo "<table border=\"1\"><tr><td>Lp</td><td></td><td>Nazwa towaru</td><td>Rozmiar</td><td>Kolor</td><td>Ile sztuk</td><td>Cena za sztuke</td><td>Sumaryczna

cena</td><td>Zmien</td><td>Usun</td></tr>";

$k1=$_SESSION['ile'];



//petla
for($i=1 ; $i<=$k1 ; $i++){

//czy wogole zmienna jest pelna, jak nie to jej nie wyswietla, wywalilem narazie

//formularz poczatek
echo "<tr><form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">";

//wysylanie zmiennej identyfikacyjenej $i

echo "<input type=\"hidden\" name=\"zmienna\" value=\"".$i."\" />";

//wyswietlanie wierszy po kolei
echo "<tr><td>".$i."</td><td><a href=\"galeria_handlowa.php?p=".$_SESSION['towar'][$i]['pid']."\"><img

src=\"galeria/albums/userpics/10001/thumb_".$_SESSION['towar'][$i]['link']."\"></a></td><td>".$_SESSION['towar'][$i]['nazwa']."</td><td><select

name=\"rozmiar\">";
echo "<option value=\"".$_SESSION['towar'][$i]['rozmiar']."\">rozmiar ".$_SESSION['towar'][$i]['rozmiar']."</option>";
echo "<option value=\"S\">rozmiar S</option>";
echo "<option value=\"M\">rozmiar M</option>";
echo "<option value=\"L\">rozmiar L</option>";
echo "<option value=\"XL\">rozmiar XL</option></select>";



echo "</td><td><input type=\"text\" name=\"kolor\" value=\"".$_SESSION['towar'][$i]['kolor']."\"/></td><td><input type=\"text\" name=\"ilosc\"

value=\"".$_SESSION['towar'][$i]['ilosc']."\"/></td><td>".$_SESSION['towar'][$i]['cena']." PLN</td><td>".$_SESSION['towar'][$i]['cena_total']."

PLN</td><td><input type=\"submit\" name=\"modyf\" value=\"zmien\" /></td><td><input type=\"submit\" name=\"usun\" value=\"usun\" /></td></form></tr>";
};
//koniec petli
//koniec formularza
echo "</table>";
//koniec tabeli



?>
Prym
smile.gif wiec mnie osobiscie brak cudzyslowów przyprawia o bół głowy i powoduje nieczytelnosc kodu
natomiast co do kodu to zmienna jest dobrze przekazywana do tego momentu:

  1. <?php
  2. if(isset($modyf)) {
  3. if(strlen($zmienna)>0) {
  4. $zmienna=stripslashes($zmienna) && is_numeric($zmienna); 
  5. }
  6. ....
  7. ?>


wywal is numeric - bo akurat zamienia ci id na 1 i kod ci pójdzie poprawnie - osobiście - jeśli oczywiscie moge cos zaproponoac to żebyś zastosował wyrażenie regularne zamiast tego numerica czyli

  1. <?php
  2. $zmienna=preg_replace("/[^0-9]/",'',$zmienna);
  3. ?>


i daj znac czy wywalenie numerica pomoglo smile.gif - ale powinno

u mnie zdaje egzamin i nie przepuszcza niczego oprocz cyfr
edgar5
Dzieki stary miałeś racje, zwracam honor, is_numeric chrzanilo sprawe, wytlumacz mi tylko dlaczego??
Prym
dlaczego? winksmiley.jpg jeśli mam zgadywać to dlatego że zmienna nie jest przekazana jako liczba tylko jako string - jak to obejsc pojecia niemam winksmiley.jpg nigdy sie tym na dobra sprawe nie przejmowałem bo zawsze robilem prega zamiast wbudowanych funkcji sprawdzania czy zmienna to numerek czy nie smile.gif

oczywiście jest to wbrew sztuce i tak dalej ale jesli działa i działa poprawnie (a juz kilka moich tworow funkcjonuje w sieci) to znaczy ze jeszcze nie musze sie tym przejmować - oczywiście jesli ktoś wie jak to sprawdzać/deklarować przy przekazywaniu zmiennych również z checią poczytam smile.gif


o ja niekumaty smile.gif kłania sie manual PHP:is_numeric funkcja ta zwraca albo true albo false czyli 1 jesli jest cyfra winksmiley.jpg i masz cala tajemnice - niezle - innymi slowy takie cos wykorzystujemy w ifie jako warunek - to taki dopisek swierzo po lekturze manualka
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.