Hogyan tudom megoldani azt, hogy ne csak az első tétel adatait vigye át a kosárba (részletek kód a leírásban)?
lista.php
<!DOCTYPE html>
<html>
<head>
<title>Rendelés</title>
</head>
<body>
<style>
.box {
display:block;
font-size: 16pt;
font-family:arial;
width:100%;
position:relative;
background-color:#eeefef;
text-align:center;
margin:3px 0;
/*padding:5px;*/
border: 1px solid #666;
}
.nr {
display:inline-block;
font-size: 10pt;
position:relative;
background-color:#01506a;
color:white;
font-weight:bold;
text-align:right;
width:18px;
height:18px;
margin:2px;
padding: 8px;
border: 1px solid #999;
border-radius: 38px;
}
.aru {
display:inline-block;
text-align:left;
position:relative;
width:70%;
/* height:50px; */
margin:2px;
/* border: 1px solid #999;*/
}
.gombbox {
display:inline-block;
position:relative;
width:auto;
/*height:50px;*/
margin:2px;
padding: 10px;
/*border: 1px solid #999;*/
}
.nevbox {
display:inline-block;
font-weight:bold;
position:relative;
padding: 10px;
/*border: 1px solid #999;*/
}
.leiras {
display:inline-block;
position:relative;
padding: 10px;
/*border: 1px solid #999;*/
}
.gomb
{
background: #01506a;
color: #fff;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
font-weigt: bold;
font-size: 18px;
border: 2px solid #bebebe;
width: 150px;
height: 50 px;
padding: 6px 10px;
}
.gomb:hover
{
border: 2px solid #45ff5b;
background: #0379a0;
}
ol
{ list-style-position:inside;}
#rejtett{display:none;}
</style>
<?php require_once 'catalog.php';
print '<hr><h2>Alkatrészek</h2><ol>
';
foreach($alkatresz as $alkatresz) {
echo ' <div class="box"> <div class="nr"><li></li></div> <div class="aru">
<div class="nevbox"><b>' . $alkatresz[0] . ',<br /></h2>';
echo '</b>
</div>
<div class="leiras">' . $alkatresz[2] . '</div>
</div>
<div class="gombbox">
<form name="frmProduct1" method="post" action="./cart.php" id="Form1" onsubmit="return ValidatefrmProduct1(this)">';
print '<div id="rejtett">';
for($i=1; $i<=count($alkatresz); $i++){
$c = ($i==1) ? "checked='checked'" : "";
print '<input style=" padding-left:50px; class="kat1" type="radio" name="rendel[alkatresz]" value="'.$i.'" '.$c.'>'.$alkatresz[$i][0].' '.$alkatresz[$i][1].' FT <br><br>';
}
print '</div><input type="submit" id="Button1" class="gomb" name="addtocart" value="'.$alkatresz[1].' ft"></input></div>';
print '</form></div>';
}
print '</ol><hr>';
?>
</body>
</html>
-----catalog.php
<?php
$alkatresz = Array (
1 => Array(" Váz " , 16500 , " Budapest B acél "),
2 => Array(" Kormány " , 12500 , " MTB acél emelt 600x70x1,4 mm "),
3 => Array(" Nyereg " , 9900 , " Selle Royal 8072DC rugós "),
4 => Array(" Kerék " , 4100 , " 26-28col duplafalú Beretta, alu "),
5 => Array(" Sárvédő " , 1200 , " Festett acél+flap +prizma "),
);
?>
------cart.php
<?php
session_start();
ini_set('display_errors', 1);
error_reporting(0);
require_once 'catalog.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['rendel']))
{
AddToCart();
}
else
{
$action = isset($_POST['action']) ? $_POST['action'] : '';
$value = strtoupper(substr($action, 0, 5));
switch ($value)
{
}
}
}
function AddToCart(){
global $alkatresz;
$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
$ic = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
$ar = 0;
$n="".$alkatresz[$_POST['rendel']['alkatresz']][0]."";
$ar+=$alkatresz[$_POST['rendel']['alkatresz']][1];
$cart['ar'][$ic] = $ar;
$cart['name'][$ic] = $n;
$ic++;
$_SESSION['cart'] = $cart;
$_SESSION['itemcount'] = $ic;
}
?>
<?php
$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
$itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
$strHTML = "";
if ($itemcount == 0){
$strHTML = "<h3>Még nem rendelt</h3>";
}else{
$strHTML = "<div style=\"overflow:auto; height=358px;\">"."\n";
$strHTML .= "<table border=\"1\" cellpadding=\"3\" cellspacing=\"2\" width=\"100%\">"."\n";
$strHTML .= "<tr>"."\n";
$strHTML .= "<td><b>Tetel</b></td>"."\n";
$strHTML .= "<td><b>Ar</b></td>"."\n";
$strHTML .= "<td><b>Reszosszeg</b></td></tr>"."\n";
$total = 0;
for ($i=0; $i<$itemcount; $i++)
{
$strHTML .= "<tr>"."\n";
$strHTML .= "<td><b>".$cart[name][$i]."</b><hr></td>"."\n";
$strHTML .= "<td>".$cart[ar][$i]." Ft </td>"."\n";
$total += $cart[ar][$i];
$strHTML .= "<td>".$total." Ft<hr></td>"."\n";
$strHTML .= "</tr>"."\n";
}
$strHTML .= "<tr>"."\n";
$strHTML .= "<td></td>"."\n";
$strHTML .= "<td style='color:orange;'>Total: </td>"."\n";
$strHTML .= "<td style='color:orange;'>"." ".$total." Ft</td>"."\n";
$strHTML .= "</tr>"."\n";
$strHTML .= "</table>"."\n";
$strHTML .= "</div>"."\n";
}
echo $strHTML;
?>
<hr>
<input type="button" id="rendel" onclick="window.location='./lista.php';return false;" name="meg" value="MEG RENDELEK" >
<br>
<input type="button" id="torol" onclick="window.location='./cancel.php';return false;" name="cancel" value="TORLES" >
<br>
<hr>
-----
ez egy tolálisan egyszerű webshop alap , de valami miatt csak az 1. tételét lehet a kosárba rakni bármelyik másik rendel gombjára klikkelek.
Mi a hiba?
A tömböt szépen beolvassa.
Valaki tud segíteni?
pastebin.comra másolva-
lista.php
Paste ID:uzv6hJXe
catalog.php
Paste ID: tV9L94P4
cart.php
Paste ID: KzN36U7Z
Egyelőre csak az elsőt néztem.
foreach($alkatresz as $alkatresz)
Ez biztosan hibás, nem használhatjuk ugyanazt a változót a tömb és az elem neveként.
Ha cserélem erre:
foreach($alkatresz as $alkatresz1)
akkor is ugyanazt az eredményt kapom. A "kosárba" bármelyik árra nyomva csak az 1. "Váz" kerül át, tehát a tömb első sora. Mintha csak azt érzékelné.
De utána több helyen is át kell írni a ciklusban... Jobb lenne eleve beszédesebb neveket használni. Egy tömb, amit több alkatrész adatainak a tárolására használsz, nem lehet $alkatresz, mert az egyes számban van, és csak arra jó, hogy összezavarja a gondolkodásodat, ahogy meg is tette, plusz hogy összezavarja mások gondolkodását is, akik a kódodat olvasni akarják.
A tömb helyes neve $alkatreszek.
A ciklus így alakul: foreach ($alkatreszek as $alkatresz)
Nézd át az egész kódot abból a szempontból, hol dolgozol egyetlen alkatrésszel, és hol az összes alkatrész tömbjével. Ez keveredett össze nagyon, és szerintem ha ezt a fejedben és a programodban is rendbe teszed, akkor jó eséllyel ki fog javulni a hiba. A ciklus attól ciklus, hogy a belsejében a ciklusváltozót használjuk fel, ami jelen esetben a foreach 2. paramétere.
Több helyen átírtam a ciklusban a változót, de úgy sem lett jobb. Gondolom valahogy arra kellene rájöjjek, hogyan kezeljen le a ciklus több elemet(alkatrészek), mert a jelenlegi formában csak 1-et tud. print $aklatresz[1][0] . " ," .$alkatresz[1][1] . "ft"; Arra már rájöttem, hogy igy iratom ki az 1. sor Nevét és árát, de hogy ezt ciklusban hogyan viszem át az rejtély... Kipróbáltam, de a kosárba sem a nevet sem az árat(helyette 0-át) nem vitte át. :(
A a változó név képzéssel nem akartam összezavarni senkit, és a jövőben odafigyelek a többesszámra is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!