Bestel systeem maken

Status
Niet open voor verdere reacties.

bas007gsm

Gebruiker
Lid geworden
4 jan 2002
Berichten
394
Mensen, ik ben bezig met een bestel systeem te maken, en heb al een en ander gamaakt en uitgevonden. Maar nu het moeilijker wordt loop ik tegen enkele problemen aan, namelijk:

Vanuit de productcatalogus moet een product en aantal worden toegevoegd aan een shoppingcart of mandje, ik heb hier al een en ander gezien, maar dit gaat allemaal met cookies, en aangezien ik voor het login systeem gebruik maak van sessies wil ik de bestelde producten hier graag aan toe voegen. Om deze later uit te lezen en daadwerkelijk een bestelling te plaatsen.

Hoe doe ik zoiets, ik heb nu:

reglogin.php controleert of je bent ingelogd en bevat de gegevens username en password(sessie)
Met een link : voegtoe.php?id=$row->id wil ik de gegevens in de sessie te zetten

product.php

PHP:
<?php include("reglogin.php"); ?> 
<html> 

<head> 

   <title>Product catalogus</title> 

</head> 

<body> 
<h2 align="center">Product catalogus</h2>

 <p>U kunt onderstaande producten bestellen door erop te klikken.<p> 
<table>
	<tr>
		<td><b>Product ID</b></td>
		<td><b>Titel</b></td>
		<td><b>Omschrijving</b></td>
		<td><b>Kleur</b></td>
		<td><b>Maat</b></td>
		<td><b>Prijs</b></td>
		<td><b>Afbeelding</b></td>
	</tr>

<?php 

error_reporting(E_ALL); 

   	include("connect.php");

      // Maak het lijstje 

      $sql = "SELECT id, title, description, color, sizes, price, filenaam FROM products ORDER BY id ASC"; 

      $result = mysql_query($sql); 

      while ($row = mysql_fetch_object($result)) { 

         echo 	("
		 <tr>
		 	<td>$row->id</td>
			<td><a href=\"voegtoe.php?id=$row->id\"><b>$row->title</b></a></td>
			<td>$row->description</td>
			<td>$row->color</td>
			<td>$row->sizes</td>
			<td>€ $row->price</td>
			<td><img src=\"../cms/$row->filenaam\"></td>
		</tr>
		");

       
}
   ?> 
</table>

<p></p>
<p>Sessie uitlezen (staat nu alleen username en password in)</p>

<table>
	<tr>
		<td><b>Username</b></td>
		<td><b>Password</b></td>
	</tr>

<?php
	echo("
	<tr>
		<td> $username </td>
		<td> $password </td>
	</tr>
	");
?>
</table> 

  
</body> 

</html>
 
Ik heb even iets gemaakt, en volgens mij moet het deze kant een beetje op maar dit lijkt er nog niet op en er gebeurd nu ook niets...


PHP:
<?php
error_reporting(E_ALL); 

include("connect.php");

function add ($productid, $title) {

	$query = "SELECT * FROM products WHERE id='" . $_POST["$id"] ."'" or die ("FOUT bij query"); 
	$result = mysql_query($query) or die("FOUT : " . mysql_error()); 
	if (mysql_num_rows($result) > 0){
        // product gevonden, registreer gegevens in session
				$productid= $_POST["id"] or die ("Fout bij posten product id");
				$title= $_POST["title"] or die ("Fout bij posten title");
				session_register("productid") or die ("FOUT bij registreren in sessie");
				session_register("title") or die ("FOUT bij registreren in sessie"); 
				
		header("Location: products.php"); 
        exit();
	}
}
?>
 
Laatst bewerkt:
PHP:
<?php
error_reporting(E_ALL); 

include("connect.php");

  function add($productid,$title)
  {
  $query = "SELECT * FROM products WHERE id='" . $productid . "'"; 
  $result = mysql_query($query) or die("FOUT : " . mysql_error()); 
    if(mysql_num_rows($result) > 0)
    {
    $rij = mysql_fetch_assoc($result);
    $_SESSION['productid'] = $rij['productid'];
    $_SESSION['title'] = $rij['title'];
    }
  
  header("Location: products.php"); 
  exit();
  }

}
?>
session_register() is deprecated :)

Ik haal trouwens de rij op uit de database. Als de titel via POST of GET wordt opgegeven, dan kun je hoofdletterverschil krijgen.

Tip: Templates gebruiken.
 
Laatst bewerkt:
okay, ik was redelijk opweg dus, maar nu gebeurt er niets en blijft ie staan in voegtoe.php dus ik kan niet zien wat er mis is, de pagina's zijn nu:

(de actie zou moeten zijn dat hij terug gaat naar products.php toch?)

product.php

PHP:
<?php include("reglogin.php"); ?> 
<html> 

<head> 

   <title>Product catalogus</title> 

</head> 

<body> 
<h2 align="center">Product catalogus</h2>

 <p>U kunt onderstaande producten bestellen door erop te klikken.<p> 
<table>
	<tr>
		<td><b>Product ID</b></td>
		<td><b>Titel</b></td>
		<td><b>Omschrijving</b></td>
		<td><b>Kleur</b></td>
		<td><b>Maat</b></td>
		<td><b>Prijs</b></td>
		<td><b>Afbeelding</b></td>
	</tr>

<?php 

error_reporting(E_ALL); 

   	include("connect.php");

      // Maak het lijstje 

      $sql = "SELECT id, title, description, color, sizes, price, filenaam FROM products ORDER BY id ASC"; 

      $result = mysql_query($sql); 

      while ($row = mysql_fetch_object($result)) { 

         echo 	("
		 <tr>
		 	<td>$row->id</td>
			<td><a href=\"voegtoe.php?id=$row->id\"><b>$row->title</b></a></td>
			<td>$row->description</td>
			<td>$row->color</td>
			<td>$row->sizes</td>
			<td>€ $row->price</td>
			<td><img src=\"../cms/$row->filenaam\"></td>
		</tr>
		");

       
}
   ?> 
</table>

<p></p>
<p>Sessie uitlezen (staat nu alleen username en password in)</p>

<table>
	<tr>
		<td><b>Username</b></td>
		<td><b>Password</b></td>
	</tr>

<?php
	echo("
	<tr>
		<td> $username </td>
		<td> $password </td>
	</tr>
	");
?>
</table> 

  
</body> 

</html>


en voegtoe.php

PHP:
<?php
error_reporting(E_ALL); 

include("connect.php");

  function add($id,$title)
  {
  $query = "SELECT * FROM products WHERE id='" . $id . "'"; 
  $result = mysql_query($query) or die("FOUT : " . mysql_error()); 
    if(mysql_num_rows($result) > 0)
    {
    $rij = mysql_fetch_assoc($result);
    $_SESSION['id'] = $rij['id'];
    $_SESSION['title'] = $rij['title'];
    }
  
  header("Location: products.php"); 
  exit();
  }


?>

de database products:
id int(11) auto_increment
title varchar(35)
description varchar(25)
color varchar(25)
sizes varchar(25)
price float(4,2) 0.00
filenaam varchar(100)
 
Laatst bewerkt:
Uiteraard wel session_start() bovenaan je script zetten.
 
Staat er nu in, maar omdat er al een sessie bestaat (waar login en pass in staan) krijg ik een error namelijk:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/bas007gsm/domains/nathalzen.nl/public_html/cms/1/new/products.php:3) in /home/bas007gsm/domains/nathalzen.nl/public_html/cms/1/new/reglogin.php on line 1

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/bas007gsm/domains/nathalzen.nl/public_html/cms/1/new/products.php:3) in /home/bas007gsm/domains/nathalzen.nl/public_html/cms/1/new/reglogin.php on line 1


het is de bedoeling dat de bestel gegevens bij de login en pass in de session komen te staan, of kan dit helemaal niet??

inhoud van reglogin.php
PHP:
<?php session_start();
if (!isset($_SESSION["username"])){
	$tekst = "<h2>U bent nog niet aangemeld.</h2>
		U kunt <a href=\"index.php\">hier inloggen</a> of<br>
		U kunt zich <a href=\"register.php\">hier registeren</a>";
	echo($tekst);
	exit();
}?>
 
Kennelijk stuur je toch nog output naar de browser voordat je session_start() aanroept :)


Onder output valt alles dat door de browser weergegeven kan worden, van een simpele spatie tot tags zoals <html>
 
heb ik geprobeerd, maar dan gebeurt er nog niets, ik denk dat het iets te maken heeft met de sessie die al bestaat (en naar mijn inziens uitgebreid moet worden) want de pagina blijft steeds staan bij voegtoe.php en geeft wel gewoon de id van het product door (in adres balk) ik heb ook al eens gekeken naar session_id() maar dat werkte ook niet..
 
Test deze scripts eens (apart van elkaar natuurlijk) en trek je conclusies:

PHP:
<?
session_start();
echo 'blaat';
?>
PHP:
<?
echo 'blaat';
session_start();
?>
 
nou ik heb het even weer opgepakt, en script al aangepast, maar kom nog niet verder, zo is het nu:

PHP:
<html> 

<head> 

   <title>Product catalogus</title> 

</head> 

<body> 
<h2 align="center">Product catalogus</h2>

 <p>U kunt onderstaande producten bestellen door erop te klikken.<p> 
<table>
	<tr>
		<td><b>Product ID</b></td>
		<td><b>Titel</b></td>
		<td><b>Omschrijving</b></td>
		<td><b>Kleur</b></td>
		<td><b>Maat</b></td>
		<td><b>Prijs</b></td>
		<td><b>Afbeelding</b></td>
	</tr>

<?php 
error_reporting(E_ALL); 

   	include("connect.php");

      // Maak het lijstje 

      $sql = "SELECT id, title, description, color, sizes, price, filenaam FROM products ORDER BY id ASC"; 

      $result = mysql_query($sql); 

      while ($row = mysql_fetch_object($result)) { 

         echo 	("
		 <tr>
		 	<td>$row->id</td>
			<td><a href=\"voegtoe.php?id=$row->id\"><b>$row->title</b></a></td>
			<td>$row->description</td>
			<td>$row->color</td>
			<td>$row->sizes</td>
			<td>€ $row->price</td>
			<td><img src=\"cms/$row->filenaam\"></td>
		</tr>
		");

       
}
   ?> 
</table>

  
</body> 

</html>

voegtoe.php (geeft nu alleen blaat en gaat niet verder)
PHP:
<?php
session_start();
echo 'blaat';
 
error_reporting(E_ALL); 

if (!empty($_POST)){

include("connect.php");

  $query = "SELECT * FROM products WHERE id= '" . $_POST["id"] ."'" or die("FOUT: bij maken query"); 
  $result = mysql_query($query) or die("FOUT : " . mysql_error()); 
    if(mysql_num_rows($result) > 0)
    {
    //$rij = mysql_fetch_assoc($result);
	$id = $_POST['id'];
	$rij = $_POST['rij'];
	session_register("id"); 
	session_register("rij");
   }

  
  header("Location: products1.php"); 
  exit();
  }


?>

Het is dus de bedoeling dat wanneer op het product geklikt wordt de id via het voegtoe script in een sessie komt te staan samen met de product title, zodat deze later weer kan worden uitgelezen. Dit is toch gewoon mogelijk??
 
Wederom: session_register() is deprecated, hierdoor worden je sessies hoogst waarschijnlijk niet geregistreerd.
 
sorry:confused: maar ik had het gebruikt omdat het bij een ander script wel werkte, nu is het als volgt en de actie is nog steeds hetzelfde:

PHP:
<?php
session_start();
echo 'blaat';
 
error_reporting(E_ALL); 

if (!empty($_POST)){

include("connect.php");

  $query = "SELECT * FROM products WHERE id= '" . $_POST["id"] ."'" or die("FOUT: bij maken query"); 
  $result = mysql_query($query) or die("FOUT : " . mysql_error()); 
    if(mysql_num_rows($result) > 0)
    {
   $rij = mysql_fetch_assoc($result);
    $_SESSION['id'] = $rij['id'];
    $_SESSION['title'] = $rij['title'];   }

  
  header("Location: products1.php"); 
  exit();
  }


?>

{edit}
volgens mij gebeurt er niets, moet ik ipv een if statement er een funtion van maken oid en hoe zou ik dat moeten aanpakken?

En wat bedoel je met deprecated ik heb nog even rond gekeken maar volgens mij is daar niets mis mee http://nl.php.net/session-register
{/edit}
 
Laatst bewerkt:
Een functie ? :confused: Nee...
Hoogstens zou je er een else bij kunnen zetten, in welke je de melding 'Geen rijen gevonden' weergeeft.
 
ik heb even een en ander verandert:
PHP:
<?php
session_start();
echo 'blaat';
 
error_reporting(E_ALL); 

if (isset($id)){

include("connect.php");

  $query = "SELECT * FROM products WHERE id= '" . $_POST["$id"] ."'" or die("FOUT: bij maken query"); 
  $result = mysql_query($query) or die("FOUT : " . mysql_error()); 
    if(mysql_num_rows($result) > 0)
    {
   $rij = mysql_fetch_assoc($result);
    $_SESSION['id'] = $rij['id'];
    $_SESSION['title'] = $rij['title'];   }

  
  header("Location: products1.php"); 
  exit();
  }
  else{
  echo "geen inhoud id" ;
  }


?>

nu krijg ik de error Notice: Undefined index: 18 in /home/bas007gsm/domains/nathalzen.nl/public_html/cms/1/voegtoe.php on line 11

dit gaat om de waarde van $id (die overigens wel klopt)

$query = "SELECT * FROM products WHERE id= '" . $_POST["$id"] ."'" or die("FOUT: bij maken query");
 
Jij vraagt $_POST["$id"] op, als je de slordigheid daar ff bij weghaalt hou je $_POST[$id] over, $id heeft -kennelijk- een waarde van 18. Dus je vraagt $_POST[18] op. Bestaat die waarde ? :)

Voer anders een print_r($_POST); uit, dan kun je zien wat er wel en niet bestaat :)
 
Ik heb het nu voor eerst opgelost:

products.php
PHP:
<?php
session_start();
?>
<html> 

<head> 

   <title>Product catalogus</title> 

</head> 

<body> 
<h2 align="center">Product catalogus</h2>

 <p>U kunt onderstaande producten bestellen door erop te klikken.<p> 
<table>
	<tr>
		<td><b>Product ID</b></td>
		<td><b>Titel</b></td>
		<td><b>Omschrijving</b></td>
		<td><b>Kleur</b></td>
		<td><b>Maat</b></td>
		<td><b>Prijs</b></td>
		<td><b>Afbeelding</b></td>
	</tr>

<?php 
error_reporting(E_ALL); 

   	include("connect.php");

      // Maak het lijstje 

      $sql = "SELECT id, title, description, color, sizes, price, filenaam FROM products ORDER BY id ASC"; 

      $result = mysql_query($sql); 

      while ($row = mysql_fetch_object($result)) { 

         echo 	("
		 <tr>
		 	<td>$row->id</td>
			<td><a href=\"voegtoe.php?id=$row->id\"><b>$row->title</b></a></td>
			<td>$row->description</td>
			<td>$row->color</td>
			<td>$row->sizes</td>
			<td>€ $row->price</td>
			<td><img src=\"cms/$row->filenaam\"></td>
		</tr>
		");

       
}
   ?> 
</table>

  
</body> 

</html>

voegtoe.php
PHP:
<?php

error_reporting(E_ALL); 

if (isset($id)){

include("connect.php");

  $query = "SELECT * FROM products WHERE id= $id" or die("FOUT: bij maken query"); 
  $result = mysql_query($query) or die("FOUT : " . mysql_error()); 
    if(mysql_num_rows($result) > 0)
    {
   $rij = mysql_fetch_assoc($result);
    $_SESSION['id'] = $rij['id'];
    $_SESSION['title'] = $rij['title'];   }

  
  header("Location: products1.php"); 
  exit();
  }
  else{
  echo "geen inhoud id" ;
  }


?>

Weer bedankt voor de hulp en ik ga het nu verder uitwerken!
 
ik heb wel een bestel systeem op cd een of ander data base progje waar je alles invoer omzet naar html en upload naar de server helaas werkt dat onder html en java en kun je er geen plaatjes in toevoegen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan