Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienne sesji w funkcji for
Forum PHP.pl > Forum > PHP
Kasper5
Czesc
Jestem tutaj nowy wiec prosze o wyrozumiałość smile.gif Mam problem z koszykiem na zakupy. Szukałem w internecie i na forum ale nic nie znalazłem tylko same definicje. A prosiłbym o pomoc i wyjaśnienie. Mam tak zdefiniwane sesje:

  1.  
  2.  
  3. if (!isset($_SESSION['koszyk'])) {
  4. $_SESSION['koszyk'] = array();
  5. }
  6.  
  7. /* inicjuje zmienna */
  8. if(empty($_SESSION['powierzchnia'])){
  9. $_SESSION['powierzchnia'] = 0;
  10. }
  11. if(isset($_GET['zapiszPowierzchnie'])){
  12. /* przetwarza dane formularza powierzchni */
  13. $_SESSION['powierzchnia'] = floatVal($_POST['powierzchnia']);
  14. }


oraz tak wyświetla mi się koszyk:
  1. <?php
  2. $suma = 0;
  3. $powierzchnia = 1;
  4. if($_SESSION['powierzchnia']>0){
  5. $powierzchnia = $_SESSION['powierzchnia'];
  6. }
  7.  
  8.  
  9. for ($i=0;$i < count($_SESSION['koszyk']); $i++)
  10. {
  11. echo '<tr>';
  12. echo '<td>'.$towary[$_SESSION['koszyk'][$i]].'</td>';
  13. echo '<td align="right">';
  14. echo $powierzchnia.' m<sup>2</sup> x '.number_format ($ceny[$_SESSION['koszyk'][$i]],2);
  15. echo ' zlotych</td>';
  16.  
  17. ?>
  18. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?zapiszPowierzchnie=1">
  19. <td><input type="text" name="powierzchnia" id="powierzchnia" value="<?=htmlspecialchars($_SESSION['powierzchnia'][$i]); ?>"></td>
  20. <td><input type="submit" value="Zapisz"></td>
  21. </form>
  22.  
  23. <?php
  24.  
  25. $suma = $suma + ($ceny[$_SESSION['koszyk'][$i]]* $powierzchnia );
  26. }
  27. ?>


i powiem że to mi działa jak zmieniam ilość ale zmienia ilość dla wszystkich pól nie dla konkretnego rekordu i w tym mam problem. Jak zrobić by mi zmieniało tylko pole w którym zmieniłem wartość. Na zdjęciu pokazuje co mi wyświetla

http://zapodaj.net/2a9d03c72ce00.jpg.html
Pyton_000
Zmień
Kod
name="powierzchnia"

na
Kod
name="powierzchnia[<?= $i ?>]"

i zobacz wtedy jak wygląda Twoja tablica $_POST po zapisanu
Kasper5
Cytat(Pyton_000 @ 20.07.2015, 08:28:19 ) *
Zmień
Kod
name="powierzchnia"

na
Kod
name="powierzchnia[<?= $i ?>]"

i zobacz wtedy jak wygląda Twoja tablica $_POST po zapisanu

niestety nie działa w ten sposób, gdy wpiszę jakąś wartość to po kliknięciu zapisz nic się nie dzieje
Pyton_000
No oczywiście że po zmianie tylko tego nie będzie działać. Kazałem Ci wyświetlić $_POST po wysłaniu formularza żebyś zobaczył co się wysyła, i wtedy dostosował swój kod do tego co otrzymujesz.
Kasper5
Cytat(Pyton_000 @ 20.07.2015, 10:58:28 ) *
No oczywiście że po zmianie tylko tego nie będzie działać. Kazałem Ci wyświetlić $_POST po wysłaniu formularza żebyś zobaczył co się wysyła, i wtedy dostosował swój kod do tego co otrzymujesz.


wyświetliłem za pomocą

  1. <?php var_dump($_POST); ?>


i pokazuje mi coś takiego:

array(1) { ["powierzchnia_"]=> array(1) { [0]=> string(1) "2" } } gdy w pierwszej linii wpiszę w pole 2

array(1) { ["powierzchnia_"]=> array(1) { [0]=> string(1) "3" } } gdy w pierwszej linii wpiszę w pole 3


array(1) { ["powierzchnia_"]=> array(1) { [1]=> string(1) "4" } } gdy w drugiej linii wpiszę w pole 4

array(1) { ["powierzchnia_"]=> array(1) { [1]=> string(1) "6" } } gdy w drugiej linii wpiszę w pole 6

jak to interpretować? jestem początkujcy i niestety nie rozumiem jeszcze wielu rzeczy

za pomocą
  1. print_r($_POST);

wyświetla takie coś?

array(0) { } zaraz po załadowaniu koszyka a w nim są 4 wartości



Array ( [powierzchnia] => 5 ) gdy w tym samym koszyku wpiszemy 5 w tej pierwotnej wersji z pierwszego postu


Array ( [powierzchnia] => Array ( [0] => 5 ) ) a te pozostałe linie wyświetla po zmianach zastosowanych przez Pyton_000

Array ( [powierzchnia] => Array ( [1] => 4 ) )

Array ( [powierzchnia] => Array ( [2] => 8 ) )

może ktoś podpowie jak to dalej ugryźć? będę wdzieczny, siedze i czytam jakies manuale ale jak na razie nic nie wymyśliłem
prz3kus
No to wystarczy odebrać dane:
  1. $powierzchnia = $_POST['powierzchnia'];
  2.  
  3. foreach ($powierzchnia as $value) {
  4. $suma = $suma + ($ceny[$_SESSION['koszyk'][$i]]*$value );
  5. }
  6.  
  7. //or
  8.  
  9. $count = count($powierzchnia);
  10. for($i=0;$<=$count;$i++){
  11. $suma = $suma + ($ceny[$_SESSION['koszyk'][$i]]*$powierzchnia[$i] );
  12. }


Dobra chyba nie do końca zajażyłem o co Cc biega, poprawie troszkę do rozjaśnienia biggrin.gif

  1. $powierzchnia = $_POST['powierzchnia'];
  2.  
  3. foreach ($powierzchnia as $value) {
  4. echo $value;
  5. }
  6.  
  7. //or
  8.  
  9. $count = count($powierzchnia);
  10. for($i=0;$<=$count;$i++){
  11. echo $powierzchnia[$i] ;
  12. }
Kasper5
prz3kus chyba jeszcze nie o to mi chodzi. Głównie chodzi mi o możliwość zmieniania ilości w koszyku w danym wierszu osobno. Czyli: mam w koszyku 3 artykuły i obok pierwszego jest okienko formularza i jak wpisze w nie ilość i zapisz to zmieni się ilość tylko w tym pierwszym wierszu. Doprowadziłem kod do takiej postaci ale niestety tylko zmienia mi wartość we wszystkich polach na raz nie pojedynczo tak jak chce.

  1. <?php
  2.  
  3. /* inicjuje zmienna */
  4. if(empty($_SESSION['powierzchnia'])){
  5. $_SESSION['powierzchnia'] = 0;
  6. }
  7. if(isset($_GET['zapiszPowierzchnie'])){
  8. /* przetwarza dane formularza powierzchni */
  9. $_SESSION['powierzchnia'] = floatVal($_POST['powierzchnia']);
  10. }
  11.  
  12.  
  13. if (!isset($_SESSION['koszyk'])) {
  14. $_SESSION['koszyk'] = array();
  15. }
  16.  
  17. if (isset($_GET['reset'])) //chcemy wyczyścić koszyk
  18. {
  19. unset($_SESSION['koszyk']);
  20. header('location: '. $_SERVER['PHP_SELF']. '?'. SID);
  21. exit();
  22. }
  23. ?>
  24.  
  25. <!DOCTYPE html>
  26. <html>
  27. <head>
  28. <meta charset="UTF-8">
  29. <title>Firma budowlana </title>
  30. </head>
  31. <body>
  32. <h1>Twoj koszyk z zakupami</h1>
  33.  
  34.  
  35.  
  36. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?zapiszPowierzchnie=1">
  37. <input type="text" name="powierzchnia" id="powierzchnia" value="<?=htmlspecialchars($_SESSION['powierzchnia']); ?>">
  38. <input type="submit" value="Zapisz">
  39. </form>
  40.  
  41. <?php
  42.  
  43. // definicja tablic z towarami oraz cenami
  44.  
  45.  
  46. $i= isset($_GET['i']) ? (int)$_GET['i'] : 0;
  47.  
  48.  
  49. $q = mysql_connect('localhost','root','haslo') or
  50. die('Padl serwer');
  51. $q = mysql_select_db('stronaphp') or die('Padla baza');
  52.  
  53.  
  54. $wynik = mysql_query("SELECT ID, Nazwa_uslugi, Cena_za_metr FROM cennik_uslug")
  55. or die('Błąd zapytania');
  56.  
  57.  
  58.  
  59. $towary = array();
  60. $ceny = array();
  61. while ($row = mysql_fetch_array($wynik))
  62. {
  63. $towary[$row['ID']]=$row['Nazwa_uslugi'];
  64. $ceny[$row['ID']]=$row['Cena_za_metr'];
  65. }
  66. ?>
  67.  
  68. <table border="1">
  69. </thead>
  70. <tr>
  71.  
  72. <th>Nazwa usługi</th>
  73. <th>Cena za metr</th>
  74. </tr>
  75. </thead>
  76. <tbody>
  77.  
  78.  
  79.  
  80. <?php
  81. $suma = 0;
  82. $powierzchnia = 1;
  83. if($_SESSION['powierzchnia']>0){
  84. $powierzchnia = $_SESSION['powierzchnia'];
  85. }
  86. for ($i=0;$i < count($_SESSION['koszyk']); $i++)
  87. {
  88. echo '<tr>';
  89. echo '<td>'.$towary[$_SESSION['koszyk'][$i]].'</td>';
  90. echo '<td align="right">';
  91. echo $powierzchnia.' m<sup>2</sup> x '.number_format ($ceny[$_SESSION['koszyk'][$i]],2);
  92. echo ' zlotych</td></tr>';
  93. $suma = $suma + ($ceny[$_SESSION['koszyk'][$i]] * $powierzchnia);
  94. }
  95. ?>
  96.  
  97.  
  98. </tbody>
  99. <tfoot>
  100. <tr>
  101. <th align="right">Naleznosc: </th><br>
  102. <th align="right"><?php echo number_format($suma,2); ?> zlotych.</th>
  103. </tr>
  104. </tfoot>
  105. </table>
  106.  
  107. <p><a href="towary.php">Kupuj dalej</a> lub też: <a href="<?php echo $_SERVER['PHP_SELF']; ?>?reset=1">Wyczysc swoj koszyk</a></p>
  108. </body>
  109. </html>


na prawdę nikt nie potrafi mi pomóc? męczę manuale ale nic mi nie wychodzi
Pyton_000
Przecież wcześniej miałeś dobrze. Teraz masz 1 formularz do zapisu.
Przywróć wcześniejszą wersją (formularz przy każdej pozycji).
W formularzu przekazuj w polu hidden ID, Klucz czy cokolwiek co indentyfikuje pozycję którą zmieniasz, i przy zapisie aktualizuj odpowiedni element w sesii
Kasper5
Pokazuje mi taki błąd:
Warning: Cannot use a scalar value as an array in C:\xampp\htdocs\koszyczek\koszyk.php on line 15

  1. <?php
  2.  
  3.  
  4. if (!isset($_SESSION['koszyk'])) {
  5. $_SESSION['koszyk'] = array();
  6. }
  7.  
  8. /* inicjuje zmienna */
  9. if(empty($_SESSION['powierzchnia'])){
  10. $_SESSION['powierzchnia'] = 0;
  11. }
  12. if(isset($_GET['zapiszPowierzchnie'])){
  13. /* przetwarza dane formularza powierzchni */
  14. $_SESSION['powierzchnia'][$_POST['kup']] = floatVal($_POST['powierzchnia']);
  15.  
  16.  
  17. }


Tak może być czy powinienem obsłużyć całość w jednej sesji powierzchnia?

A druga sprawa:
  1. for ($i=0;$i < count($_SESSION['koszyk']); $i++)
  2. {
  3. echo '<tr>';
  4. echo '<td>'.$towary[$_SESSION['koszyk'][$i]].'</td>';
  5. echo '<td align="right">';
  6. echo $powierzchnia.' m<sup>2</sup> x '.number_format ($ceny[$_SESSION['koszyk'][$i]],2);
  7. echo ' zlotych</td>';
  8.  
  9. ?>
  10. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?zapiszPowierzchnie=1">
  11.  
  12. <input type="hidden" name="kup" value="$i">
  13.  
  14. <td><input type="text" name="powierzchnia[<?= $i ?>]" id="powierzchnia" value="<?=htmlspecialchars($_SESSION['powierzchnia'][$i]); ?>"></td>
  15. <td><input type="submit" value="Zapisz"></td>
  16. </form>


teraz jest dobrze?
Dalej nie chce mi zapisywać, dodałem pole hidden. Chyba cos mam pokrecone z sesjami tylko co bo nie wiem gdzie szukac, wgle jak do tego podejsc

może to coś pomoże:
Array ( [kup] => $i [powierzchnia] => Array ( [1] => 7 ) ) pojawia się po kliknieciu zapisz wyswietlone za pomocą print_r($_POST);
Pyton_000
Kod
name="powierzchnia"

i
Kod
<input type="hidden" name="kup" value="<?= $i ?>">


Kasper5
Cytat(Pyton_000 @ 23.07.2015, 07:52:48 ) *
Kod
name="powierzchnia"

i
Kod
<input type="hidden" name="kup" value="<?= $i ?>">


Nie wiem dlaczego ale to nie pomaga, dalej błąd pojawia się w tej linii:

  1. $_SESSION['powierzchnia'][$_POST['kup']] = floatVal($_POST['powierzchnia']);

i brzmi:
Warning: Cannot use a scalar value as an array in C:\xampp\htdocs\koszyczek\koszyk.php

a jeśli to pomoże, cala moja sesja od formularza powierzchni wyglada tak:
  1. if(empty($_SESSION['powierzchnia'])){
  2. $_SESSION['powierzchnia'] = 0;
  3. }
  4. if(isset($_GET['zapiszPowierzchnie'])){
  5. /* przetwarza dane formularza powierzchni */
  6. $_SESSION['powierzchnia'][$_POST['kup']] = floatVal($_POST['powierzchnia']);
  7. }


Pyton_000
śmiem twierdzić że dokonałeś zmian jakie napisałem. Pokaż kod.
herbhouse666
Poradziłeś już sobie czy dalej potrzebujesz pomocy?
Kasper5
Cytat(herbhouse666 @ 23.07.2015, 19:31:09 ) *
Poradziłeś już sobie czy dalej potrzebujesz pomocy?


właśnie nie.
Pojawia się błąd w 15 linii:
Warning: Cannot use a scalar value as an array in C:\xampp\htdocs\koszyczek\koszyk.php

a oto ta linia:
Kod:
  1. $_SESSION['powierzchnia'][$_POST['kup']] = floatVal($_POST['powierzchnia']);


w poście nr #13 wpisałem kod jak mam na chwile obecną.

a gdy np. w drugim wierszu wpiszę w formularz wartość 7 i klikne zapisz to linia kodu:
  1. print_r($_POST);

zwraca mi:
Array ( [kup] => 1 [powierzchnia] => 7 )
a w formualrzu nic się nie pokazuje. Może źle odbieram dane?
także nie wiem jak z tym dalej walczyć, czy źle mam oznaczoną sesję czy może coś nie tak z formularzem
herbhouse666
Daj mi cały kod na e-mail to postaram się to naprawić. Mój e-mail
ctom
@Kasper5 zobacz co robisz w linii 11 a potem co robisz z tą zmienna w linii 15
Kasper5
Cytat(herbhouse666 @ 23.07.2015, 20:25:23 ) *
Daj mi cały kod na e-mail to postaram się to naprawić. Mój e-mail


dotarła wiadomość? w razie coś to kod jest także w poście nr #13

Cytat(ctom @ 23.07.2015, 20:29:39 ) *
@Kasper5 zobacz co robisz w linii 11 a potem co robisz z tą zmienna w linii 15

właśnie nie wiem co, dopiero uczę się php wink.gif
herbhouse666
Nie dotarła. Spróbuj jeszcze raz. themoscow666@gmail.com

ctom chodzi o to że do sessji przypisujesz 0
11:
Kod
$_SESSION['powierzchnia'] = 0;

a następnie przypisujesz wartość do klucza w tablicy która nie istnieje.
15:
Kod
$_SESSION['powierzchnia'][$_POST['kup']] = floatVal($_POST['powierzchnia']);
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.