ugrás a tartalomhoz

PHP session, felétel kérdés

LordEVon · 2010. Szep. 29. (Sze), 10.42
Heló!
Szeretnék segítséget kérni az alábbi problémámra. Van egy oldal, ahol lehet rendelni, s a kosar.php-ben írom ki az aktuális rendelés állását. Eddig úgy volt, hogy a "nev" feltétel szerint irta ki az újabb tételeket a listába, viszont meg kéne valahogy (nem tudom hogy) oldani, hogy a "nev" és a "nev_feltet" alapján írja ki.

Mutatom a kódot:
<?

// Új termék felvétele a kosárba
if (isset($_POST['kosarba']))
{ // Ha a kosár nem üres
if (!empty($_SESSION['kosar_tartalom']))
{ // Ha van már a kosárban ilyen termék, csak hozzáadjuk az új darabszámot
if (isset($_SESSION['kosar_tartalom'][$_POST['id']]))
{
$_SESSION['kosar_tartalom'][$_POST['nev']]['darab'] += $_POST['darab'];
}
// Ellenkező esetben felvisszük a kosárba
else
{
$_SESSION['kosar_tartalom'][$_POST['nev']] = array("id" => $_POST['id'],
"nev" => $_POST['nev'],
"nev_feltet" => $_POST['nev_feltet'],
"ar" => $_POST['ar'],

"far" => $_POST['far'],
"darab" => $_POST['darab']);
}



}
// Ha a kosár üres
else
{ // Kiválasztott termék felvitele
$_SESSION['kosar_tartalom'][$_POST['nev']] = array("id" => $_POST['id'],
"nev" => $_POST['nev'],
"nev_feltet" => $_POST['nev_feltet'],
"ar" => $_POST['ar'],

"far" => $_POST['far'],
"darab" => $_POST['darab']);
}
}

// Hány termék található a kosárban
echo @count($_SESSION['kosar_tartalom'])." Termék a kosárban";
if (@count($_SESSION['kosar_tartalom'])>0) {echo " - <a class='kosar' href=rendeles.php target='_parent'>Kosár</a><br />"; }

// Kosár tartalmának kiiratása
if (!empty($_SESSION['kosar_tartalom']))
{
foreach ($_SESSION['kosar_tartalom'] as &$aaa)
{
echo $aaa['nev'].": <br> ".$aaa['darab']." db | <a class='kosar' title='Eggyel többet a kosárba' href='kosar.php?act=plusz&id=".$aaa['nev']."'> + </a> :
<a class='kosar' title='Eggyel kevesebbet a kosárba' href='kosar.php?act=minusz&id=".$aaa['nev']."'> - </a><br/>".$aaa['nev_feltet']."<hr>
";
}
}
 
1

A forráskód részleteket légy

kuka · 2010. Szep. 29. (Sze), 11.37
A forráskód részleteket légy szíves írd [colorer=***] és [/colorer] BBCode formázók közé (ahol *** helyére a kód nyelvét írod).

Az ilyen típusú kérdésekre általában sokkal egyszerűbb válaszolni, ha adat példát is látunk. Jelen esetben a $_SESSION és az $aaa volna érdekes.
2

Kérdés

Poetro · 2010. Szep. 29. (Sze), 11.43
Itt van az eredeti kód olvasható formában
  1. <?php  
  2. // Új termék felvétele a kosárba  
  3.   
  4. if (isset($_POST['kosarba'])) { // Ha a kosár nem üres  
  5.     
  6.   if (!emptyempty($_SESSION['kosar_tartalom'])) {  
  7.   
  8.     // Ha van már a kosárban ilyen termék, csak hozzáadjuk az új darabszámot     
  9.     if (isset($_SESSION['kosar_tartalom'][$_POST['id']])) {  
  10.       $_SESSION['kosar_tartalom'][$_POST['nev']]['darab'] += $_POST['darab'];  
  11.     }  
  12.     // Ellenkező esetben felvisszük a kosárba  
  13.     else {  
  14.       $_SESSION['kosar_tartalom'][$_POST['nev']] = array(  
  15.         "id" => $_POST['id'],  
  16.         "nev" => $_POST['nev'],  
  17.         "nev_feltet" => $_POST['nev_feltet'],  
  18.         "ar" => $_POST['ar'],  
  19.         "far" => $_POST['far'],  
  20.         "darab" => $_POST['darab']  
  21.       );  
  22.     }  
  23.   }  
  24.   // Ha a kosár üres  
  25.   else { // Kiválasztott termék felvitele  
  26.     $_SESSION['kosar_tartalom'][$_POST['nev']] = array(  
  27.       "id" => $_POST['id'],  
  28.       "nev" => $_POST['nev'],  
  29.       "nev_feltet" => $_POST['nev_feltet'],  
  30.       "ar" => $_POST['ar'],  
  31.       "far" => $_POST['far'],  
  32.       "darab" => $_POST['darab']  
  33.     );  
  34.   }  
  35. }  
  36. // Hány termék található a kosárban  
  37. echo @count($_SESSION['kosar_tartalom']) . " Termék a kosárban";  
  38.   
  39. if (@count($_SESSION['kosar_tartalom']) > 0) {  
  40.   echo " - <a class='kosar' href=rendeles.php target='_parent'>Kosár</a><br />";  
  41. }  
  42.   
  43. // Kosár tartalmának kiiratása  
  44. if (!emptyempty($_SESSION['kosar_tartalom'])) {  
  45.   foreach ($_SESSION['kosar_tartalom'as & $aaa) {  
  46.     echo $aaa['nev'] . ": <br> " . $aaa['darab'] . " db | <a class='kosar' title='Eggyel többet a kosárba' href='kosar.php?act=plusz&id=" . $aaa['nev'] . "'> + </a> :  
  47. <a class='kosar' title='Eggyel kevesebbet a kosárba' href='kosar.php?act=minusz&id=" . $aaa['nev'] . "'> - </a><br/>" . $aaa['nev_feltet'] . "<hr>  
  48. ";  
  49.   }  
  50. }  
  51. ?>  
viszont meg kéne valahogy (nem tudom hogy) oldani, hogy a "nev" és a "nev_feltet" alapján írja ki.

Ezt definiálnád, hogy mit jelent? És hogy egyáltalán miért nincsen semmi ellenőrzés arra vonatkozóan, hogy mi lett beküldve? Mert teszem azt, én módosítom a változókat a weboldalon, hogy mondjuk az ár legyen 1 Ft, a darab mondjuk 1000 és rendeltem 1000 darab netbookot összesen 1000 Forintért.
Legyen minden elemhez csak az azonosító és a darabszám tárolva, és a többi adatot pedig vedd adatbázisból, gondolom úgy is ott tárolod őket.
3

Bocsi, nem tudtam, hogyan

LordEVon · 2010. Szep. 29. (Sze), 16.04
Bocsi, nem tudtam, hogyan kell a kódot beilleszteni rendesen.
Most már látom is, hogyan kell...
Szóval az adatbázisból jön le kb minden, kivéve az nev_feltet és a hozzá tartozó ár, mert azokat nem tudtam úgy megoldani.
nekem most nem is az a lényeg.
nos akkor megmutatom, hogyan is van ez:
ez itt a pl. index.php szükséges fájlja
  1. <script>  
  2. ar=new Array(0,80,80,80,80,80,80,80,100,100,100,100,100,100,100,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180);  
  3.   
  4. function kivesz(mit, hova)  
  5. {  
  6. document.getElementById('far'+hova).innerHTML= ar[mit.selectedIndex]+"&nbsp;Ft"  
  7. document.getElementById('far_'+hova).value= ar[mit.selectedIndex]  
  8. document.getElementById('far45'+hova).innerHTML= ar[mit.selectedIndex]+"&nbsp;Ft"  
  9. document.getElementById('far45_'+hova).value= ar[mit.selectedIndex]  
  10. }  
  11. </script>   
  12.   
  13. ez ugyebár adatbázisból jön le:  
  14. $kiiras .="<tr><td>".$sor['id'].", "."<b>".$sor['nev']."</b>".$sor['akcio']."<br>".$sor['keszult']."</td>  
  15.     <form method='POST' action='kosar.php' name='TermForm' target='kosar_frame' onSubmit='return CheckRequiredFields()' ><input type='hidden' name='id' value='".$sor['id']."'><input type='hidden' name='nev' value='".$sor['nev']." - 30 cm'>  
  16.     "."<td style='text-align:center;'>"."<input type='hidden' name='ar' value='".$sor['ar30']."'>".$sor['ar30']."<br>db:   
  17.     ".$sor['db30'].$sor['id'].$sor['db30uto']."</td>"."<td style='text-align:center;'><select name='nev_feltet' style='width: 20px' onchange='kivesz(this,".$sor['id'].")'>  
  18.     <option value=''>Semmi</option>                                                                                                    
  19.     <option value='Zöldborsó - 80 Ft'>Zöldborsó - 80 Ft</option>  
  20.     <option value='Hagyma - 80 Ft'>Hagyma - 80 Ft</option>  
  21.     <option value='Fokhagyma - 80 Ft'>Fokhagyma - 80 Ft</option>  
  22.     <option value='Erős pista - 80 Ft'>Erős pista - 80 Ft</option>  
  23.    
  24.   
  25. stb még pár cucc...  
  26.   
  27.     </select><div style='display:none' id='far".$sor['id']."'> 0&nbsp;Ft</div></td>  
  28.     <input type='hidden' name='far' id='far_".$sor['id']."' value='0'>  
  29.     <td style='text-align:center;'>".$sor['kosar30'].$sor['id'].$sor['kosar30uto']."</td></form>"."  
Ehhez jön hozzá még pár kiegészítés, ami a kosar.phphez nem kell, így azokat nem írom be. A kosar.php tartalma amit megadtam először.
Szóval ha így beütöm, hogy mit is akarok rendelni, akkor csak úgy csinál új bejegyzést a kosar.php-ba, ha a név változik, tehát ha rendelek x ételt kukorica feltéttel, az jó. De ha e mellé x pizzát akarok rendelni feltétel nélkül, akkor az előzőt felülirja, s nem új sorba. Ez az amit meg kéne oldani....
remélem érthető a problémám
4

Problémák

Poetro · 2010. Szep. 29. (Sze), 16.57
A probléma továbbra is fent áll a árral kapcsolatban, mi van, ha én, mint felhasználó átírom a formban a termék árát 1 Ft-ra.
  1. <?php  
  2. // Új termék felvétele a kosárba    
  3. if (!emptyempty($_SESSION['kosar_tartalom'])) {  
  4.   $_SESSION['kosar_tartalom'] = array();  
  5. }  
  6.     
  7. if (!emptyempty($_POST['kosarba'])) { // Ha a kosár nem üres    
  8.   $id = intval($_POST['id']);  
  9.   $feltet = in_array($_POST['nev_feltet'], array(  
  10.     'Zöldborsó - 80 Ft',  
  11.     'Hagyma - 80 Ft',  
  12.     'Fokhagyma - 80 Ft',  
  13.     'Erős pista - 80 Ft',  
  14.   )) ? $_POST['nev_feltet'] : '';  
  15.   $darab = intval($_POST['darab']);  
  16.     
  17.   if ($id && $darab) {  
  18.     // Ha van már a kosárban ilyen termék, csak hozzáadjuk az új darabszámot       
  19.     if (isset($_SESSION['kosar_tartalom'][$id][$feltet])) {    
  20.       $_SESSION['kosar_tartalom'][$id][$feltet]['darab'] += $darab;    
  21.     }    
  22.     // Ellenkező esetben felvisszük a kosárba    
  23.     else {  
  24.       $result = db_query("SELECT *, %d AS darab, '%s' AS nev_feltet FROM table WHERE id = %d"$darab$feltet$id);  
  25.       if ($elem = db_fetch_array($result)) {  
  26.         $_SESSION['kosar_tartalom'][$id][$feltet] = $elem;  
  27.       }  
  28.     }    
  29.   }    
  30. }  
  31.   
  32. $elemek = 0;  
  33. $output = '';  
  34. // Hány termék található a kosárban  
  35. foreach ($_SESSION['kosar_tartalom'as $id => $val) {  
  36.   foreach ($val as $feltet => $elem) {  
  37.     $elemek++;  
  38.   
  39.     $output .= $elem['nev'] . ": <br> " . $elem['darab'] . " db | <a class='kosar' title='Eggyel többet a kosárba' href='kosar.php?act=plusz&id=" . $elem['nev'] . "'> + </a> :    
  40.     <a class='kosar' title='Eggyel kevesebbet a kosárba' href='kosar.php?act=minusz&id=" . $elem['id'] . '?feltet=' . urlencode($elem['nev_feltet']) . "'> - </a><br/>" . $elem['nev_feltet'] . "<hr>";  
  41.   }  
  42. }  
  43. echo $elemek . " Termék a kosárban";    
  44.     
  45. if ($elemek > 0) {    
  46.   echo " - <a class='kosar' href=rendeles.php target='_parent'>Kosár</a><br />";    
  47. }    
  48.   
  49. echo $output;  
  50. ?>  
Megjegyzés: A kódszínező az empty-t hajlamos kétszer kiírni.
5

Bízom benne, hogy nem teszed.

LordEVon · 2010. Szep. 29. (Sze), 18.44
Bízom benne, hogy nem teszed. :) Egyébként nem hinném, hogy a felhasználók nagy része ezt megtenné. De akkor hogyan gondolod, mit csináljak? db-ből hivassam le?
Na meg, a nevében benne van az ára a feltétnek, a pizzának meg az ára db-ből jön le...
látom írtál egy szép kódsort. ki fogom próbálni, köszi
6

...

gphilip · 2010. Szep. 29. (Sze), 18.56
"Egyébként nem hinném, hogy a felhasználók nagy része ezt megtenné."

Ha kész a webshop megmondod a címet? :)



Egyébként elég a termék ID-jté és darabszámát a session-ben eltárolnod, a többi jön az adatbázisból és nincs gond, persze az előbbeieket sem árt ellenőrizni.
7

Már vásároltam

Poetro · 2010. Szep. 29. (Sze), 19.45
Elhiszed, hogy már vásároltam 1 Ft-ért Netbook-ot? Persze ki már nem szállították, de ez már más kérdés. Elég ha a felhasználók kis része húz le pár millióval. Szerintem.
8

Hmm... Erre megtaníthatnál

LordEVon · 2010. Szep. 30. (Cs), 08.25
Hmm...
Erre megtaníthatnál hogyan kell, érdekelne:)
Elvégre ha valamit tud az ember, könnyebb ellene védekezni is.