Przekazywanie danych w sesji

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
Piotrek50501
Posty: 11
Rejestracja: 26 mar 2015, 18:20:28
Płeć: Niewybrana
User Agent: Chrome Windows

Przekazywanie danych w sesji

Post autor: Piotrek50501 »

Witam
Mam zrobiony taki kod koszyka z zakupami:
Kod:

Kod: Zaznacz cały

<?php
session_start();
 
 
if (!isset($_SESSION['koszyk'])) {
  $_SESSION['koszyk'] = array();
}
 
/* inicjuje zmienna */
if(empty($_SESSION['powierzchnia'])){
  $_SESSION['powierzchnia'] = 0;
}
if(isset($_GET['zapiszPowierzchnie'])){
  /* przetwarza dane formularza powierzchni */
  $_SESSION['powierzchnia'] = floatVal($_POST['powierzchnia']);
}


if (isset($_GET['reset']))  //chcemy wyczy¶cić koszyk
{
      unset($_SESSION['koszyk']);
			header('location: '. $_SERVER['PHP_SELF']. '?'. SID);
			exit();
}
?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Firma budowlana </title>
  </head>
  <body>
<h1>Twoj koszyk z zakupami</h1>



<?php

   // definicja tablic z towarami oraz cenami


$i= isset($_GET['i']) ? (int)$_GET['i'] : 0;


$q = mysql_connect('localhost','root','555') or
die('Padl serwer');
$q = mysql_select_db('stronaphp') or die('Padla baza');


$wynik = mysql_query("SELECT ID, Nazwa_uslugi, Cena_za_metr FROM cennik_uslug") 
or die('Błąd zapytania'); 



$towary = array();
$ceny = array();
while ($row = mysql_fetch_array($wynik))
{
    $towary[$row['ID']]=$row['Nazwa_uslugi'];
    $ceny[$row['ID']]=$row['Cena_za_metr'];
}
?>

<table border="1">
  </thead>     
			 <tr>
				   
				   <th>Nazwa usługi</th>
					 <th>Cena za metr</th>
				</tr>
		</thead>
	<tbody>



<?php
$suma = 0;
$powierzchnia = 1;
if($_SESSION['powierzchnia']>0){
  $powierzchnia = $_SESSION['powierzchnia'];
}
 
 
for ($i=0;$i < count($_SESSION['koszyk']); $i++)
{

		echo '<tr>';
		echo '<td>'.$towary[$_SESSION['koszyk'][$i]].'</td>';
		echo '<td align="right">';
		echo $powierzchnia.' m<sup>2</sup> x '.number_format ($ceny[$_SESSION['koszyk'][$i]],2);
		echo ' zlotych</td>';
 
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?zapiszPowierzchnie=1">
<td><input type="text" name="powierzchnia[<?= $i ?>]" id="powierzchnia" value="<?=htmlspecialchars($_SESSION['powierzchnia'][$i]); ?>"></td>
<td><input type="submit" value="Zapisz"></td>
</form>
 
<?php
 
		$suma = $suma + ($ceny[$_SESSION['koszyk'][$i]]* $powierzchnia );
		 
}
print_r($_POST);
?>


</tbody>
 <tfoot>
  <tr>
	  <th align="right">Naleznosc: </th><br>
		<th align="right"><?php echo number_format($suma,2); ?> zlotych.</th>
	</tr>
 </tfoot>
</table>

<p><a href="towary.php">Kupuj dalej</a> lub też: <a href="<?php echo $_SERVER['PHP_SELF']; ?>?reset=1">Wyczysc swoj koszyk</a></p>
</body>
</html>
</code>

A mój problem polega na tym, że nie działa mi zapisywanie ilości produktów. Mam taki koszyk: http://zapodaj.net/2a9d03c72ce00.jpg.html i gdy wpisuje jakieś wartości to w tabeli nic się nie dzieje tylko pojawia mi się tablica $_POST. Po wpisaniu i zapisaniu w zależności które to pole pojawia się: 

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

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

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

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

Jedynie gdy usunę z linii:
Kod: <code><td><input type="text" name="powierzchnia[<?= $i ?>]" id="powierzchnia" value="<?=htmlspecialchars($_SESSION['powierzchnia'][$i]); ?>"></td></code>

tą część kodu: Kod:<code>[<?= $i ?>]</code>

to działa ale niestety tylko w ten sposób że obojetnie gdzie wpisze liczbę to zapisuje mi dla wszystkich wierszy tą samą wartość (ilość artykułów). w tym przypadku $_POST pokazuje: Array ( [powierzchnia] => 3 )  

Mógłby mi ktoś coś podpowiedzieć? Jestem dopiero początkujący ;)
ozana44
Posty: 3
Rejestracja: 08 lip 2015, 00:22:29
Strona na CBA.pl: cba
Płeć: Niewybrana
User Agent: Firefox Windows 1280x1024

Re: Przekazywanie danych w sesji

Post autor: ozana44 »

No a w dobry sposób zaimplementowałeś tą całą swoją tablicę ? Bo tutaj na pewno jest mały problem i właśnie tutaj coś na pewno krzaczy. Tak na pierwszy rzut oka to ten kod się wydaję taki niespójny..Możesz dać ten zapis już po wyniku jakim dokładnie błędem Ci rzuca po tych operacjach.
Piotrek50501
Posty: 11
Rejestracja: 26 mar 2015, 18:20:28
Płeć: Niewybrana
User Agent: Chrome Windows

Re: Przekazywanie danych w sesji

Post autor: Piotrek50501 »

tzn nie wyświetla mi żadnego błędu ani nie wyświetla mi żadnych wartości po wpisaniu w formularz. Może trzeba to jakoś przerobić z foreach czy coś tylko pytanie jak?
Siny79
Posty: 4
Rejestracja: 09 lip 2015, 15:21:56
Płeć: Niewybrana
User Agent: Firefox Windows 1280x1024

Re: Przekazywanie danych w sesji

Post autor: Siny79 »

Ta..Widać ewidentnie, że tam nie bagla i nie zaskakuję ten foreach..Nie wiem co tam zmienić musisz ale już dobitniej powiedz co chcesz osiągnąć tym, że tam sobie zmienisz ? Co to tak właściwie ma robić. Będzie prościej na pewno innym to określać użytkownikom.
ODPOWIEDZ