[PHP]artikelen toevoegen aan webshop

Pagina: 1
Acties:
  • 181 views sinds 30-01-2008

  • KoBolD54
  • Registratie: Maart 2002
  • Laatst online: 22-05 15:42
Ik ben bezig met het bouwen van een webshop.

Nu heb ik echter de volgende problemen:
als ik iets toevoeg krijg ik de volgende foutmeldingen:

Notice: Undefined index: mandje in E:\Internet\wwwroot\dullers\new4\webshop.php on line 49

Warning: Invalid argument supplied for foreach() in E:\Internet\wwwroot\dullers\new4\webshop.php on line 61

mijn code is:
index.php
---------------------------------------------------
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php 
// Sessie starten 
session_start(); 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Index</title> 
</head> 

<body> 
<form name="form1" method="post" action="webshop.php"> 
<table width="950"  border="0" cellspacing="0" cellpadding="0"> 
  <tr> 
    <td width="100">Merk</td> 
    <td width="100">Product</td> 
    <td width="100">Prijs</td> 
    <td width="100">Inhoud</td> 
    <td width="230">Omschrijving</td> 
    <td width="100">Foto</td> 
    <td width="200">&nbsp;</td> 
  </tr> 
</table> 
<?php 

$host = "localhost";        // Host 
$user = "root";                // MySQL gebruiker 
$pass = "";                    // MySQL wachtwoord 
$db = "dullers";            // MySQL database 

// Verbinding tot stand brengen 
mysql_connect($host,$user,$pass) or die("Verbinding met database mislukt"); 
mysql_select_db($db) or die("Kan de database niet vinden"); 

$artikelen_sql = "SELECT * FROM artikelen"; 
$artikelen_result = mysql_query($artikelen_sql); 
    while ($artikelen = mysql_fetch_array($artikelen_result)) { 
?> 
<table width="950"  border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"> 
  <tr valign="top"> 
    <td width="100"><?php echo $artikelen['Merk'] ?></td> 
    <td width="100"><?php echo $artikelen['Product'] ?></td> 
    <td width="100"><?php echo $artikelen['Prijs'] ?></td> 
    <td width="100"><?php echo $artikelen['Inhoud'] ?></td> 
    <td width="230"><?php echo nl2br($artikelen['Omschrijving']) ?></td> 
    <td width="100">[img]"images/<?php[/img]"></td> 
    <td width="200">Aantal 
      <input name="aantal" type="text" size="2"> 
      <input name="product" type="hidden" value="<?php echo ($artikelen['Merk'] . " " . $artikelen['Product']);?>"> 
      <input name="actie" type="hidden" value="toevoegen"> 
      <input name="prijs" type="hidden" value="<?php echo $artikelen['Prijs'];?>"> 
      <input type="submit" name="Submit" value="Toevoegen"> 
      </td> 
  </tr> 
</table><br> 
<?php 
} 
mysql_close(); 
?> 
</form> 
</body> 
</html>

---------------------------------------------------


webshop.php
---------------------------------------------------
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php 
// Sessie starten 
session_start(); 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Webshop</title> 
</head> 

<body> 
<table width="950" border="0" cellspacing="0" cellpadding="0"> 
  <tr> 
    <td width="75"><div align="center">Aantal</div></td> 
    <td>Product</td> 
    <td width="100"><div align="center">Prijs</div></td> 
    <td width="100"><div align="center"></div></td> 
  </tr> 
</table> 
<? 
// Kijken of de verbinding met de database er nog is 
if (!@mysql_select_db("dullers", @mysql_connect("localhost", "root", ""))) 
    { 
        echo "er kon geen database connectie gemaakt worden."; 
        exit(); } 

# De functies 

// Product toevoegen 
function addProduct ($piProductId,$piAantal) { 
  if ($piAantal != 0) { 
    if (!isset($_SESSION['mandje'][$piProductId])) { 
      $_SESSION['mandje'][$piProductId] = 0; 
    } 
    $_SESSION['mandje'][$piProductId] += $piAantal; 
  } 
}      

// Product verwijderen 
function deleteProduct ($piProductId) { 
  if (isset($_SESSION['mandje'][$piProductId])){ 
    $_SESSION['mandje'][$piProductId] += $piAantal; 
        unset($_SESSION['mandje'][$piProductId]); 
} 
}           

// Producten uitlezen 
function getProducts () { 
  if (count($_SESSION['mandje']) > 0) 
    RETURN $_SESSION['mandje']; 

} 

// Product toevoegen 
if(isset($_POST["actie"]) AND $_POST["actie"] == "toevoegen") { 
$aantal = $_POST['aantal']; 
$product = $_POST['product']; 
$prijs = $_POST['prijs']; 
addProduct($product,$aantal); 
$aProducts = getProducts(); 
foreach ($aProducts as $iProductId => $iAantal) { 
?>     
<table width="950" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000"> 
  <tr> 
    <td width="75"><div align="center"><?php echo $iAantal ?></div></td> 
    <td><?php echo $iProductId ?></td> 
    <td width="100"><div align="center"><?php $prijstotaalproduct = $iAantal * $prijs; echo $prijstotaalproduct; ?></div></td> 
    <td width="100"><div align="center">verwijderen</div></td> 
  </tr> 
</table> 
<?php 
} 
} 
?> 
</body> 
</html> 

---------------------------------------------------

Wat doe ik fout?
Zelf ben ik niet zo heel goed in PHP dus kan best zijn dat het een klein iets is.

  • phYzar
  • Registratie: November 2001
  • Laatst online: 19:24
Notice: Undefined index: mandje in E:\Internet\wwwroot\dullers\new4\webshop.php on line 49

Warning: Invalid argument supplied for foreach() in E:\Internet\wwwroot\dullers\new4\webshop.php on line 61

mandje staat niet in de array, de functie getProducts geeft dus geen array terug, dus de foreach werkt niet omdat aProducts geen array is.

Verwijderd

Er zijn een paar dingen die me niet lekker zitten.

Onder andere wordt $_SESSION["mandje"] volgens mij nergens (fatsoenlijk) geïnitialiseerd... en wat doe je in getProduct() als dat een lege array blijkt te zijn? Niks.

Dat is een beetje vervelend als de aanroepende code verwacht dat het altijd een array zal zijn...

Misschien dat daar de fout ligt. Ik denk dat het ervan af hangt wat je invult, want ik vermoed dat de code wel kan werken als je "verwachte" waardes invult...

  • KoBolD54
  • Registratie: Maart 2002
  • Laatst online: 22-05 15:42
het vreemde is dat de volgende code wel werkt en volgens mij heb ik alleen de variablen namen aangepast.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php session_start(); ?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body><font size="2" face="Courier New, Courier, mono">
<strong><font size="2" face="Courier New, Courier, mono"> </font></strong> 
<table width="100%" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#000000">
  <tr> 
    <td width="100"><div align="center"><strong><font size="2" face="Courier New, Courier, mono">Merk</font></strong></div></td>
    <td width="150"><div align="center"><strong><font size="2" face="Courier New, Courier, mono">Product</font></strong></div></td>
    <td width="50"><div align="center"><strong><font size="2" face="Courier New, Courier, mono">Prijs</font></strong></div></td>
    <td width="50"><div align="center"><strong><font size="2" face="Courier New, Courier, mono">Inhoud</font></strong></div></td>
    <td width="350"><div align="center"><strong><font size="2" face="Courier New, Courier, mono">Omschrijving</font></strong></div></td>
    <td><div align="center"><strong><font size="2" face="Courier New, Courier, mono">Foto 
        </font></strong></div></td>
  </tr>
</table>
<strong><font size="2" face="Courier New, Courier, mono">
<?php 
// opmaken van de sessie

echo session_id();
  /* connect to database and select database */ 
  $db_connect = mysql_connect ('localhost', 'root') or die("Verbinding met database mislukt"); 
  mysql_select_db("dullers", $db_connect); 
  $artikelen_sql = "SELECT * FROM artikelen"; 
  $artikelen_result = mysql_query($artikelen_sql); 
  while ($artikelen = mysql_fetch_array($artikelen_result)) { 
?>
</font></strong>
<table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<form action="webshop.php" method="post"> 

<tr> 
    <td width="97"><div align="left"><font size="2" face="Courier New, Courier, mono"><?php echo $artikelen['Merk'] ?></font></div></td>
    <td width="146"><div align="left"><font size="2" face="Courier New, Courier, mono"><?php echo $artikelen['Product'] ?></font></div></td>
    <td width="49"><div align="left"><font size="2" face="Courier New, Courier, mono">&euro;<?php echo $artikelen['Prijs'] ?></font></div></td>
    <td width="49"><div align="left"><font size="2" face="Courier New, Courier, mono"><?php echo $artikelen['Inhoud'] ?></font></div></td>
    <td width="229"><div align="left"><font size="2" face="Courier New, Courier, mono"><?php echo nl2br($artikelen['Omschrijving']) ?></font></div></td>
    <td width="56"><font size="2" face="Courier New, Courier, mono">[img]"images/<?php[/img]"></font></td>
    <td width="95">
      Aantal 
      <input name="aant" type="text" size="5">
<input name="pro" type="hidden" value="<?php echo ($artikelen['Merk'] . " " . $artikelen['Product']);?>"><input name="actie" type="hidden" value="toev"> 
<input name="pri" type="hidden" value="<?php echo $artikelen['Prijs'];?>">
<input type="submit" name="Submit" value="Toevoegen">    
</form> </td>
    <td width="42"><div align="left">[img]"/images/winkelwagen.gif"[/img]</div></td>
  </tr>
</table>
<font size="2" face="Courier New, Courier, mono">
<?php
}
mysql_close();
?>
</font>
</body> 
</html>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="9%">Aantal</td>
    <td width="80%">Product</td>
    <td width="11%">Prijs</td>
  </tr>
</table>
<?php session_start();?>

<? 
    if (!@mysql_select_db("dullers", @mysql_connect("localhost", "root", ""))) 
    { 
        echo "er kon geen database connectie gemaakt worden."; 
        exit(); }

# de functies 
function addProduct ($piProductId,$piAantal) { 
  if ($piAantal != 0) { 
    if (!isset($_SESSION['mandje'][$piProductId])) { 
      $_SESSION['mandje'][$piProductId] = 0; 
    } 
    $_SESSION['mandje'][$piProductId] += $piAantal; 
  } 
} 

function deleteProduct ($piProductId) { 
  if (isset($_SESSION['mandje'][$piProductId])){ 
    $_SESSION['mandje'][$piProductId] += $piAantal; 
        unset($_SESSION['mandje'][$piProductId]); 
} 
} 


function getProducts () { 
  if (count($_SESSION['mandje']) > 0) 
    RETURN $_SESSION['mandje']; 

} 
# hoe te gebruiken 
# * voeg een product toe: 
if(isset($_POST["actie"]) AND $_POST["actie"] == "toev") {
$test1 = $_POST['aant'];
$test2 = $_POST['pro'];
$test3 = $_POST['pri'];
addProduct($test2,$test1); 
$aProducts = getProducts(); 
/* niet nodig */ //$testpagina = 'mandje.php';
foreach ($aProducts as $iProductId => $iAantal) { 
$selprod  = "SELECT * FROM artikelen WHERE ID = '$iProductId'";
$resselprod = mysql_query($selprod);
 $rowselprod = mysql_fetch_object($resselprod);
 $regeltotaal = $iAantal * $rowselprod->prijs;
$totalpri = $iAantal * $test3;
echo $selprod;
?>
<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="9%"><?php echo $iAantal ?></td>
    <td width="80%"><?php echo $iProductId ?></td>
    <td width="11%">&euro; <?php echo $totalpri ?></td>
  </tr>
</table>
<?php
}
}
?>

  • phYzar
  • Registratie: November 2001
  • Laatst online: 19:24
als aantal niet ingevuld wordt gaat je hele script op z'n bek, misschien een else in bouwen in addProduct?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sorry, maar hier-is-mijn-code-los-het-voor-me-op-topics gaan zoals gewoonlijk gewoon op slot. Je kunt niet van de bezoekers verwachten dat ze 4 pagina's aan code gaan doorspitten op zoek naar een mogelijke fout, dat mag je echt helemaal zelf doen. Kijk goed naar de gegeven foutmeldingen, en leer debuggen. Probeer je probleem te isoleren. Als je dat allemaal gedaan hebt mag je nog een topic openen, mits conform de "quickstart", maar je zult zien dat als je dat eenmaal gedaan hebt je zelf al kunt bedenken waarom het fout is en wat je kunt doen om het op te lossen. Veel succes :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.