MYSQL in combinatie met een dropdown box

Status
Niet open voor verdere reacties.

Stinuz

Terugkerende gebruiker
Lid geworden
14 jun 2003
Berichten
1.245
Hey, op het moment vraag ik op de volgende manier informatie op uit een database. Het gaat om een soort webwinkel, en op de volgende manier kan de gebruiker een processor selecteren via een drop-down box:

PHP:
<? 

$sql="SELECT * FROM processor"; 
$result=mysql_query($sql); 

$options=""; 

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

    $id=$row["id"];
	$prijs=$row["prijs"];  
    $naam=$row["naam"]; 
    $options.="<OPTION VALUE=\"$id\">".$naam. "&nbsp;&nbsp;&nbsp;€".$prijs. '</option>';
} 
?> 

<SELECT NAME=processor> 
<OPTION VALUE=0>Choose 
<?=$options?> 
</SELECT> 

<br><br>

//Hier worden later de andere componenten nog bij opgeteld, dit is nu nog niet het geval omdat het nog niet naar behoren werkt en ik wilde de code compact en overzichtelijk houden.

<? $kosten = $prijs + 0; 

echo'

'. $kosten .'

';

?>

Het gaat me om te beginnen om dit gedeelte:

PHP:
$kosten = $prijs + 0; 

echo'

'. $kosten .'

Op de volgende manier wil ik dus de prijzen van alle componenten (processor, videokaart etc. etc.) bij elkaar op laten tellen maar op het moment telt hij alleen de nieuwste entry's bij elkaar op (oftwel de laatst toegevoegde processor, videokaart etc. etc.) maar hij moet de geselecteerde componenten bij elkaar optellen.

Het tweede probleem waar ik mee kamp is dat ik gebruikers allereerst een moederbord wil laten selecteren, en afhankelijk daarvan moeten sommige producten bij andere componenten niet worden weergegeven, en dus niet meer te selecteren. De reden hiervoor is dat het type MB-RAM, videokaart (AGP, PCIe) en processor van het moederbord afhangt. Als een moederbord bijvoorbeeld het processortype AM2 heeft, moeten alle socket-939 processors etc. verborgen worden.

In de database heb ik bij de tabel ''moederbord'' aangegeven welk processortype het moederbord ondersteund, dus dit zou met een IF statement moeten kunnen denk ik, maar ik zou niet weten hoe :/
 
Laatst bewerkt:
Ik denk dat je meer met JavaScript icm met PHP iets zoekt dan alleen met PHP...

Wil je dingen gaan controleren on-the-fly dan heb je niets aan PHP alleen.

Je wilt zeker zoiets, zoiets of zoiets?
 
Dat eerste voorbeeld doet idd precies wat ik wil, maar op die website zelf kom ik weinig verder:eek:

EDIT: Heb even verder gezocht (klikte hiervoor op sponsored links >.<)

Het script overnemen lukt denk ik wel, maar hoe dit precies in verband met de MYSQL database moet gaan werken vraag ik me af...

''Ajax sends a request to the file getCities.php which returns a list of cities. A server side script like this will usually return data from a database. However, I have in this demo used static data to make things simple. Here's the content of getCities.php:''

PHP:
<?php

if(isset($_GET['countryCode'])){
  
  switch($_GET['countryCode']){
    
    case "no":
      echo "obj.options[obj.options.length] = new Option('Bergen','1');\n";
      echo "obj.options[obj.options.length] = new Option('Haugesund','2');\n";
      echo "obj.options[obj.options.length] = new Option('Oslo','3');\n";
      echo "obj.options[obj.options.length] = new Option('Stavanger','4');\n";
      
      break;
    case "dk":
      
      echo "obj.options[obj.options.length] = new Option('Aalborg','11');\n";
      echo "obj.options[obj.options.length] = new Option('Copenhagen','12');\n";
      echo "obj.options[obj.options.length] = new Option('Odense','13');\n";
      
      break;
    case "us":
      
      echo "obj.options[obj.options.length] = new Option('Atlanta','21');\n";
      echo "obj.options[obj.options.length] = new Option('Chicago','22');\n";
      echo "obj.options[obj.options.length] = new Option('Denver','23');\n";
      echo "obj.options[obj.options.length] = new Option('Los Angeles','24');\n";
      echo "obj.options[obj.options.length] = new Option('New York','25');\n";
      echo "obj.options[obj.options.length] = new Option('San Fransisco','26');\n";
      echo "obj.options[obj.options.length] = new Option('Seattle','27');\n";
      
      break;
  }  
}

?>

In dit voorbeeld wordt dus gewoon met een PHP bestand zonder MYSQL gewerkt, maar hoe krijg ik dit nu werkende met mijn database?
 
Laatst bewerkt:
Die had ik net nog gevonden ja :)

Ik heb het script nu werkende gekregen zoals te zien in hun voorbeeld, maar hoe ik dit in verband met mijn database kan gebruiken is mij een raadsel
 
De case komt uit de database en ook bij new Option haal je dus uit de database wat bij het case gedeelte hoort.
 
Ok, het begint iets te worden, ik heb nu dit:

PHP:
<?php

include("config.php");

  $detailQuery = "SELECT * FROM processor WHERE type='AM2'";
  $detailResult = mysql_query($detailQuery) or die (mysql_error());
    while($detailRow = mysql_fetch_array($detailResult))
    {
  $socket939Query = "SELECT * FROM processor WHERE type='Socket-939'";
  $socket939Result = mysql_query($socket939Query) or die (mysql_error());
  $socket939Row = mysql_fetch_array($socket939Result);
      extract($detailRow);

if(isset($_GET['countryCode'])){
  
  switch($_GET['countryCode']){
    
    case "AM2":
	
      echo "obj.options[obj.options.length] = new Option('$detailRow[naam]','$detailRow[id]');\n";
      
      break;
    case "Socket-939":
      
      echo "obj.options[obj.options.length] = new Option('$socket939Row[naam]','$socket939Row[id]');\n";
      
      break;
    case "3":
      
      echo "obj.options[obj.options.length] = new Option('$naam','$id');\n";
      
      break;
  }
  }
}

?>

Probleempje nu is dat als ik ''Socket 939'' selecteer hij de input dubbel weergeeft.

In ''AM2'' heb ik 2 entry's
In ''Socket-939'' heb ik er maar 1.
En nu weergeeft hij die ene entry dus dubble omdat ''AM2'' er 2 heeft.. hoe fix ik dat? :)
 
Volgens mij moet je het anders doen...

Aangezien je het uit een database haalt heb je denk ik geen SWITCH nodig.

Probeer dit eens:
PHP:
<?php
include("config.php"); 
if(isset($_GET['countryCode'])) { 

  $detailQuery = "SELECT * FROM processor WHERE type='". $_GET['countrycode'] ."'";
  $detailResult = mysql_query($detailQuery) or die (mysql_error()); 
  while($detailRow = mysql_fetch_array($detailResult)) {
    echo "obj.options[obj.options.length] = new Option('$detailRow[naam]','$detailRow[id]');\n";
  }
} 
?>
 
Hoezo werk je nu met een $_GET functie? Kan je dat aub toelichten?
 
Nog een probleempje, dit is het javascript:

Code:
<script type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript">

var ajax = new sack();

function getCityList(sel)
{
	var countryCode = sel.options[sel.selectedIndex].value;
	document.getElementById('dhtmlgoodies_processor').options.length = 0;	// Empty city select box
	if(countryCode.length>0){
		ajax.requestFile = 'processor.php?countryCode='+countryCode;	// Specifying which file to get
		ajax.onCompletion = createProcessor;	// Specify function that will be executed after file has been found
		ajax.runAJAX();		// Execute AJAX function	
	}
	document.getElementById('dhtmlgoodies_geheugen').options.length = 0;	// Empty city select box
	if(countryCode.length>0){
		ajax.requestFile = 'mbram.php?countryCode='+countryCode;	// Specifying which file to get
		ajax.onCompletion = createGeheugen;	// Specify function that will be executed after file has been found
		ajax.runAJAX();		// Execute AJAX function		
	}
}

function createProcessor()
{
	var obj = document.getElementById('dhtmlgoodies_processor');
	eval(ajax.response);	// Executing the response from Ajax as Javascript code	
}	

function createGeheugen()
{
	var obj = document.getElementById('dhtmlgoodies_geheugen');
	eval(ajax.response);	// Executing the response from Ajax as Javascript code	
}	
</script>

Nu heb ik dus 2 verschillende document.getElementById en die vraag ik op de volgende manier op:

PHP:
	<tr>
		<td>Processor: </td>
		<td><select id="dhtmlgoodies_processor" name="dhtmlgoodies_processor">
		</select>
		</td>
	</tr>
	<tr>
		<td>Geheugen: </td>
		<td><select id="dhtmlgoodies_geheugen" name="dhtmlgoodies_geheugen">
		</select>
		</td>
	</tr>

Nu is het probleem dat alleen de laatste document.getElementById het doet. Op het moment doet alleen ''geheugen'' het dus. En als ik het zoals hieronder omdraai, dan doet alleen ''processor'' het:

PHP:
function getCityList(sel)
{
	var countryCode = sel.options[sel.selectedIndex].value;
	document.getElementById('dhtmlgoodies_geheugen').options.length = 0;	// Empty city select box
	if(countryCode.length>0){
		ajax.requestFile = 'mbram.php?countryCode='+countryCode;	// Specifying which file to get
		ajax.onCompletion = createGeheugen;	// Specify function that will be executed after file has been found
		ajax.runAJAX();		// Execute AJAX function		
	}
	document.getElementById('dhtmlgoodies_processor').options.length = 0;	// Empty city select box
	if(countryCode.length>0){
		ajax.requestFile = 'processor.php?countryCode='+countryCode;	// Specifying which file to get
		ajax.onCompletion = createProcessor;	// Specify function that will be executed after file has been found
		ajax.runAJAX();		// Execute AJAX function	
	}
}
 
Hoezo werk je nu met een $_GET functie? Kan je dat aub toelichten?

De SWITCH is een statisch databasemodel.
Wat de SWITCH doet is gewoon kijken wat er in de $_GET staat en controleert of die in een case staat. Zo ja, voert hij die case uit, zo nee dan doet hij niets.

Bij een database kun je dus met een query die controle uitvoeren.

Met het JS specifiek kan ik je niet echt helpen, daar ben ik ook nog wat lerende in :eek:
 
Maar hoe kan je nou met een $_GET functie werken als het om een externe pagina gaat, en er helemaal niet met dingen in de adresbalk wordt gewerkt?
 
Welkom bij AJAX:D
PHP:
ajax.requestFile = 'processor.php?countryCode='+countryCode;
Daar wordt die $_GET gebruikt. Dus als ik het goed verwoord dan wordt die pagina intern aangeroepen en niet door de gebruiker.
 
Ik zal eerst eens proberen die document.getElementById's aan de praat te krijgen, want zo kom ik toch geen stap verder :confused:
 
Wellicht heb je meer succes om daar een vraag over te stellen in het Javascript gedeelte? Je zou daar dan kunnen verwijzen naar dit toch voor achtergrond informatie.

edit: Hmm, dat idee had jij dus ook al :D

Wellicht dat je aan die JS functies een extra parameter mee moet geven die de CSS-id voorstelt...

Dus GetCityList(sel, cssid) o.i.d.
 
Laatst bewerkt:
Ik heb antwoord op de javascript-vraag gehad van Egel. Maar nu het volgende:

Er is maar één option value, namelijk type maar ik wil niet dat hij alleen naar deze query kijk, maar ook naar videokaart en geheugentype. Hoe krijg ik dát nou weer voor elkaar? :eek:

Code:
$options.="<OPTION VALUE=\"$type\">".$naam. "&nbsp;&nbsp;&nbsp;€".$prijs. '</option>';
 
Ik denk dat je dan het PHP bestand even zo aan moet passen dat hij bij de ene een andere query uitvoert
PHP:
if($_GET['blabla'] == "processor") {
 $query = "SELECT * FROM processor";
}
elseif($_GET['blabla'] == "geheugen") {
  $query = "SELECT * FROM geheugen";
}
//etc
 
Nou ik had het nog geprobeerd met queries ipv ''case'' maar toen deed hij niks... en moet je niet met ''andif'' werken ipv ''elseif'' want hij moet 3 dingen tegelijk doen. :eek:
 
Hij roept elke keer diezelfde pagina aan maar geeft telkens een andere waarde mee in de $_GET.

Door die IF-statements geeft hij dus telkens een ander resultaat.
 
Ah juist. Maar heb je, om te beginnen, enig idee waarom onderstaande niet werkt?

PHP:
<?php 
include("config.php"); 
if(isset($_GET['countryCode'])) { 

  $detailQuery = "SELECT * FROM processor WHERE type='". $_GET['countrycode'] ."'"; 
  $detailResult = mysql_query($detailQuery) or die (mysql_error()); 
  while($detailRow = mysql_fetch_array($detailResult)) { 
    echo "obj.options[obj.options.length] = new Option('$detailRow[naam]','$detailRow[id]');\n"; 
  } 
} 
?>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan