Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kilka formularzy generowanych przez pętlę for..
edgar5
post 12.10.2007, 19:02:58
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.10.2007

Ostrzeżenie: (0%)
-----


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?

Ten post edytował edgar5 12.10.2007, 19:05:50
Go to the top of the page
+Quote Post
Prym
post 12.10.2007, 19:29:18
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 11
Dołączył: 20.05.2007
Skąd: z fotela :)

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
edgar5
post 12.10.2007, 20:27:32
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.10.2007

Ostrzeżenie: (0%)
-----


<?
//-------------------------------------------
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



?>

Ten post edytował edgar5 12.10.2007, 21:08:28
Go to the top of the page
+Quote Post
Prym
post 12.10.2007, 21:10:57
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 11
Dołączył: 20.05.2007
Skąd: z fotela :)

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
edgar5
post 12.10.2007, 22:13:16
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 12.10.2007

Ostrzeżenie: (0%)
-----


Dzieki stary miałeś racje, zwracam honor, is_numeric chrzanilo sprawe, wytlumacz mi tylko dlaczego??

Ten post edytował edgar5 12.10.2007, 22:13:51
Go to the top of the page
+Quote Post
Prym
post 12.10.2007, 22:17:37
Post #6





Grupa: Zarejestrowani
Postów: 100
Pomógł: 11
Dołączył: 20.05.2007
Skąd: z fotela :)

Ostrzeżenie: (0%)
-----


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

Ten post edytował Prym 12.10.2007, 22:32:59
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 10:00