Beste,

Ik ben bezig met een project voor een bedrijf waar ik nu werkzaam ben, dit project is in principe afgerond, alleen ben ik nu bezig om het meer overzichtelijk te maken. Voor de geïnteresseerde onder ons, mijn project is het maken van een webshop.

Nu ben ik dus een probleem tegen gekomen, ik had mijn producten allemaal in één grote lijst staan, waarbij ik een pagina nummering had, die dus na elke 10 producten een nieuwe pagina maakte.

Nu heb ik bij al deze producten een categorie meegegeven (enkel een aantal testproducten). Vervolgens heb ik door middel van ajax een drop-down menu gemaakt, waarbij je kunt kiezen van welke categorie je producten wilt zien.

De functionaliteit hiervan werkt in principe half. Hij toont dus producten van de gekozen categorie, maar ik heb dus 4 producten in de lijst en hij toont er maar 3, terwijl hij er 10 moet tonen en dan pas een nieuwe pagina moet maken. Verder is nog een probleem dat hij 7 pagina's aan maakt, terwijl als hij er dus 3 toont, de 4e op een 2e pagina moet staan en dus geen 7 pagina's zijn.

Mijn laatste probleem is, dat als ik voor pagina 2 kies, deze link wel werkt, maar dan moet de keuze uit categorie weer opnieuw worden gekozen en op het moment dat dat gebeurt kom je weer op de eerste pagina met slechts 3 producten uit.

Ik hoop dat iemand mij hierbij kan helpen. Ik weet ook niet zeker of ik het zo goed beschreven heb, maar voor degene die een kijkje willen nemen, kunnen die hier kijken : Webshop.

Als volgt, de code:

Producten.php

<?php
	session_start();
	ob_start();	
	include("db_connect.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<script type="text/javascript" src="livesearch.js"></script>
		<script type="text/javascript" src="selectcat.js"></script>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
			<title>Webshop @ College Groep Nederland</title>
		<link rel="stylesheet" type="text/css" href="style.css" />
		<style type="text/css">
			p {margin: 0px; padding: 0px;}
		</style>
	</head>
	<body>
		<div id="wrapper">
			<div id="header"></div>
			<div id="leftcolumn">		 
				<h2>Menu</h2><br>
					<?php 
						include 'menu.php' 
					?>
			</div>
			<div id="rightcolumn">
				<?php
					if(empty($_GET['ProductID'])) 
						{
				?>
							<a href='index.php'>Home</a> » <a href='producten.php'>Producten</a><br><br>
							<h2>Producten</h2><p>
							<br>
							Hieronder ziet u een overzicht van al onze producten. Klik op een product om gedetaileerde informatie van het product te lezen.<br><br>
							Om een product te zoeken typt u een zoekwoord in, in het invoerveld.<br>
							<table border="0">
								<tr>
									<td>
										<form action="zoek_product.php" method="post">
											<input type="text" name="naam" id="txt1" size="20" onkeyup="showResult(this.value)" />
											<input type="submit" value="Zoeken">
										</form>
									</td>
									<td>
										        <b>Categorie:</b>
									</td>
									<td>
										<form>
											<select name="cat" onchange="showStatus(this.value)">
												<option value="">Selecteer categorie</option>
												<option value="accp">Access Points</option>
												<option value="Notebook">Notebooks</option>
											</select>
										</form>
									</td>
								</tr>
							</table>
							<br>
							<div id="txtHint">
								<b>Producten worden hier getoond.</b>
							</div>
				<?php
						}
					else
						{
							$sql2 = "SELECT * FROM productgegevens WHERE ProductID = '".$_GET['ProductID']."'";
							$result2 = mysql_query($sql2);
							while ($rij2 = mysql_fetch_array($result2))
								{
									$get_prijs	= $rij2['prijs'];
									$rond_prijs	= round($get_prijs, 2);
									$prijs		= number_format($rond_prijs, 2, ',', '.');

									$product = stripslashes($rij2['productnaam']);

									echo "<a href='index.php'>Home</a> » <a href='producten.php'>Producten</a> » "; echo $product;
									echo "<br><br>";
									echo "<TABLE border='0' class='producten'>";
									echo (
										"<tr>" .
											"<td width='62%' class='producttitel'> <b>". $product . " </b> </td>" .
											"<td width='38%' class='producttitel'> <b>Prijs:</b> €". $prijs . " </td>" .
										"</tr>" .
										
										"<tr>" .
											"<td colspan='2' valign='top' class='products'>". stripslashes($rij2['omschrijving']) . " </td>" .
										"</tr>" .
										
										"<tr>" .
											"<td colspan='2' class='producttitel'>\n " 
										);
							if($array['level'] == 2)
								{
									echo ("<a href='productbestellen.php?ProductID=".$_GET['ProductID']."'>Product bestellen</a> ");
								}
							else
								{
									echo (" ");
								}
							if($array['level'] == 1)
								{
									echo ("<a href='producttoevaan.php?ProductID=".$_GET['ProductID']."'>Toevoegen aan aanbiedingen</a> ");
									echo (" | ");
									echo ("<a href='productaanpassen.php?ProductID=".$_GET['ProductID']."'>Product aanpassen</a> ");
									echo (" | ");
									echo ("<a href='product_verwijderen.php?ProductID=".$_GET['ProductID']."'>Product verwijderen</a> ");
								}
							else
								{
									echo (" ");
								}
									echo "</td>";
									echo "</tr>";
								}
						}
				?>

									</td>
								</tr>
							</table>

			</div>
		</div>
	</body>
</html>
	<?php 
		ob_end_flush();
	?>


selectcat.js

var xmlhttp;

function showStatus(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="getcat.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}


getcat.php

<?php
	session_start();
	ob_start();	
	include("db_connect.php");
	error_reporting(E_ALL);

	if (isset($_GET["page"]))
		{
			$page  = $_GET["page"]; 
		}
	else 
		{
			$page=1; 
		};
	$start_from = ($page-1) * 10; 
	$q=$_GET["q"];
	$sql = "SELECT ProductID, productnaam, prijs, korteomschrijving, cat, omschrijving FROM `productgegevens` WHERE cat = '".$q."' AND `aanbprijs` = '' ORDER BY productnaam ASC LIMIT $start_from, 10"; 
	$rs_result = mysql_query ($sql);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<?php
		$sql = "SELECT COUNT(productnaam) FROM productgegevens"; 
		$row = mysql_fetch_row($rs_result); 
		$total_records = $row[0]; 
		$total_pages = ceil($total_records / 10); 
		echo "Pagina ";
		for ($i=1; $i<=$total_pages; $i++)
			{
				echo "<a href='producten.php?page=".$i."&cat=".$q."'>".$i."</a> "; 
			}
	?>
	<table class='producttable' border='0'>
		<tr>
			<th align='left'  	class='producttitel' 	width="120">	Productnaam			</th>
			<th align='left'  	class='producttitel' 	width="200">	Korte omschrijving	</th>
			<th align='left'  	class='producttitel' 	width="155">	Categorie			</th>
			<th align='right' 	class='producttitel' 	width="75">		Prijs				</th>
		</tr>
		<?php 
			while ($rij = mysql_fetch_assoc($rs_result))
				{
					$get_prijs	= $rij['prijs'];
					$rond_prijs	= round($get_prijs, 2);
					$prijs		= number_format($rond_prijs, 2, ',', '.');

					echo ("<tr><td valign='top' class='productinfo'><a href='producten.php?ProductID=".$rij['ProductID']."'>". stripslashes($rij['productnaam']) . "</a> </td> " .
						"<td class='productoms'>" . stripslashes($rij['korteomschrijving']) . " </td> " .
						"<td class='productcat'>" . stripslashes($rij['cat']) . " </td> " .
						"<td align='right'>€ " . $prijs . " </td> " . " </tr>\n " );
				}

				?>
		<tr>
			<td colspan='4' class='producttitel'> </td>
		</tr>
	</table>
	<?php
	echo "Pagina ";
	for ($i=1; $i<=$total_pages; $i++)
		{
			echo "<a href='producten.php?page=".$i."'>".$i."</a> "; 
		}
	?>
</html>
Ik zie nu wel dat de paginanummers onder de tabel anders zijn dan die er boven. Daar staat de cat niet in de link.
Emmanuel Delay schreef op 26.08.2009 14:57
Ik zie nu wel dat de paginanummers onder de tabel anders zijn dan die er boven. Daar staat de cat niet in de link.


Ja dat klopt, dat was een test van me om te kijken of de 1 anders zou werken dan de ander, maar dat is dus ook niet het geval.
Nu moet juist nog getriggerd worden dat het ajax request wordt uitgevoerd wanneer $_GET['cat'] een waarde heeft.

Probeer dit eens

EDIT: net aangepast


...
<?php
// ergens bovenaan:
$_GET['cat'] = (! empty($_GET['cat']) ? $_GET['cat'] : '');  // ternary operator
$onLoad = ( !empty($_GET['cat']) ? ' onload="request_ophalen(\''. $_GET['cat'] .'\')" ' : '');
?>
...
        </style>
        <script>
        function request_ophalen(cat)
        {
          showStatus(cat);
        }
        </script>
    </head>
    <body<?php echo $onLoad; ?>>
...
<select id="categorie_select" name="cat" onchange="showStatus(this.value)">
...
Dit zag er echt veelbelovend uit, maar tevergeefs. Het werkt nog steeds niet naar behoren. Ik vermoed dat je mijn code nu opnieuw wilt zien, dus hier heb je de code:

Producten.php

<?php
	session_start();
	include("db_connect.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<script type="text/javascript" src="livesearch.js"></script>
		<script type="text/javascript" src="selectcat.js"></script>
		<script>
			function request_ophalen()
				{
				  var value = document.getElementById("categorie_select").value;
				  showStatus(value);
				}
        </script>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
			<title>Webshop @ College Groep Nederland</title>
		<link rel="stylesheet" type="text/css" href="style.css" />
		<style type="text/css">
			p {margin: 0px; padding: 0px;}
		</style>
	</head>
	<body <?php $onLoad ?>>
		<div id="wrapper">
			<div id="header"></div>
			<div id="leftcolumn">		 
				<h2>Menu</h2><br>
					<?php 
						include 'menu.php' 
					?>
			</div>
			<div id="rightcolumn">
				<?php
					if(empty($_GET['ProductID'])) 
						{
				?>
							<a href='index.php'>Home</a> » <a href='producten.php'>Producten</a><br><br>
							<h2>Producten</h2><p>
							<br>
							Hieronder ziet u een overzicht van al onze producten. Klik op een product om gedetaileerde informatie van het product te lezen.<br><br>
							Om een product te zoeken typt u een zoekwoord in, in het invoerveld.<br>
							<table border="0">
								<tr>
									<td>
										<form action="zoek_product.php" method="post">
											<input type="text" name="naam" id="txt1" size="20" onkeyup="showResult(this.value)" />
											<input type="submit" value="Zoeken">
										</form>
									</td>
									<td>
										&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>Categorie:</b>
									</td>
									<td>
										<form>
											<?php
												$_GET['cat'] = (! empty($_GET['cat']) ? $_GET['cat'] : '');  // ternary operator
												$onLoad = ( !empty($_GET['cat']) ? ' onload="request_ophalen()" ' : '');
												
												echo '
												<select id="categorie_select" name="cat" onchange="showStatus(this.value)">
													<option '. ($_GET['cat'] == '' ?  'selected="selected" ' : '').'value="">Selecteer categorie</option>
													<option '. ($_GET['cat'] == 'ap' ?  'selected="selected" ' : '').'value="ap">Access Points</option>
													<option '. ($_GET['cat'] == 'nb' ?  'selected="selected" ' : '').'value="nb">Notebooks</option>
												</select>
												'
											?> 
										</form>
									</td>
								</tr>
							</table>
							<br>
							<div id="txtHint">
								<b>Producten worden hier getoond.</b>
							</div>
				<?php
						}
					else
						{
							$sql2 = "SELECT * FROM productgegevens WHERE ProductID = '".$_GET['ProductID']."'";
							$result2 = mysql_query($sql2);
							while ($rij2 = mysql_fetch_array($result2))
								{
									$get_prijs	= $rij2['prijs'];
									$rond_prijs	= round($get_prijs, 2);
									$prijs		= number_format($rond_prijs, 2, ',', '.');

									$product = stripslashes($rij2['productnaam']);

									echo "<a href='index.php'>Home</a> » <a href='producten.php'>Producten</a> » "; echo $product;
									echo "<br><br>";
									echo "<TABLE border='0' class='producten'>";
									echo (
										"<tr>" .
											"<td width='62%' class='producttitel'> <b>". $product . " </b> </td>" .
											"<td width='38%' class='producttitel'> <b>Prijs:</b> €". $prijs . " </td>" .
										"</tr>" .
										
										"<tr>" .
											"<td colspan='2' valign='top' class='products'>". stripslashes($rij2['omschrijving']) . " </td>" .
										"</tr>" .
										
										"<tr>" .
											"<td colspan='2' class='producttitel'>\n " 
										);
							if($array['level'] == 2)
								{
									echo ("<a href='productbestellen.php?ProductID=".$_GET['ProductID']."'>Product bestellen</a> ");
								}
							else
								{
									echo ("&nbsp;");
								}
							if($array['level'] == 1)
								{
									echo ("<a href='producttoevaan.php?ProductID=".$_GET['ProductID']."'>Toevoegen aan aanbiedingen</a> ");
									echo (" | ");
									echo ("<a href='productaanpassen.php?ProductID=".$_GET['ProductID']."'>Product aanpassen</a> ");
									echo (" | ");
									echo ("<a href='product_verwijderen.php?ProductID=".$_GET['ProductID']."'>Product verwijderen</a> ");
								}
							else
								{
									echo ("&nbsp;");
								}
									echo "</td>";
									echo "</tr>";
								}
						}
				?>

									</td>
								</tr>
							</table>

			</div>
		</div>
	</body>
</html>
// ergens bovenaan:
$_GET['cat'] = (! empty($_GET['cat']) ? $_GET['cat'] : ''); // ternary operator
$onLoad = ( !empty($_GET['cat']) ? ' onload="request_ophalen(\''. $_GET['cat'] .'\')" ' : '');


Zet dat eens helemaal bovenaan, boven doctype


Bah, dat werkt ook niet. Ik heb nu maar even gemaakt dat hij na 3 producten een nieuwe pagina maakt, zodat ik toch 2 pagina's heb.

Maar het werkt niet. :(
ah ja, 't is dus wel
<body<?php echo $onLoad; ?>>


Bij jou staat de echo niet.
Ik heb nog een aantal dingen aangepast aan mijn post terwijl je aan het testen was (Van daar die EDIT: net aangepast).

Kijk nog eens goed naar dat laatste blok code dat ik postte. De javascript functie is nu ook wat anders.
Dit veranderd het wel. Als je even zou willen kijken op mijn site, dan zie je dat als je de bovenste pagina nummering gebruikt, hij de tabel ververst, maar niet naar pagina 2 gaat.

En bij de onderste doet hij nog altijd hetzelfde. Dus nu lijkt het alsof de pagina nummering niet meer naar behoren werkt.
for ($i=1; $i<=$total_pages; $i++)

Dat komt bij jou twee keer voor, maar wat tussen {} staat, is bij jou verschillend. De tweede keer (de onderste paginanummering) vergeet je ...&cat=... toe te voegen.
Dat is met opzet zo gedaan. Zodat ik het op beide manier kan testen.

Maar de onderste manier werkt dus niet. Maar de bovenste manier werkt bijna.
Hij vernieuwt de tabel, maar hij blijft gewoon op pagina 1 en gaat niet naar pagina 2.

Reageren