[PHP/JS] Waarde uit DDL naar textbox

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KoploperMau
  • Registratie: December 2010
  • Nu online
Hallo allemaal,

Ik ben bezig met een domeinregistratiesysteem. Nou heb ik het volgende probleempje:

Het is me met PHP en met MySQL gelukt om een drop down list te vullen met waardes. Dit zijn pakketten welke een persoon kan bestellen bij een domeinnaam. Al deze pakketten hebben een prijs. Ik moet aan de hand van het geselecteerde pakket een prijs krijgen zonder de pagina te vernieuwen. Als ik een pakket selecteer moet er dus automatisch in een textbox een prijs verschijnen welke aangepast KAN worden (hoeft niet) indien een klant korting krijgt. Het systeem is intern en wordt door 1 persoon gebruikt dus laat de fraudegevoelige dingen maar even achterwege.

Ik heb op Google gezocht en ik kan dit met Javascript doen. Nou heb ik dus al een dropdownlist genaamd "afgesproken_prijs". De waardes van deze DDL worden uit de database gehaald, namelijk de pakketnaam. Bij een pakketnaam hoort een prijs. Die moet worden opgehaald met een SQL Query. Dus ik heb dit gedaan:
echo "<select name=\"ddl_pakket\" onChange=\"prijsAanpassen('prijsaanpassen.php?pakketaanpassen='+this.value)\">";
Daarmee wordt dit Javascript script aangeroepen (van Google):
function getXMLHTTP() {
var xmlhttp=false;
try{
xmlhttp=new XMLHttpRequest();
}
catch(e) {
try{
xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e1){
xmlhttp=false;
}
}
}

return xmlhttp;
}

function prijsAanpassen(strURL)
{
var req = getXMLHTTP();
if (req)
{
//function to be called when state is changed
req.onreadystatechange = function()
{
//when state is completed i.e 4
if (req.readyState == 4)
{
// only if http status is "OK"
if (req.status == 200)
{
document.getElementById('afgesproken_prijs').value=req.responseText; //afgesproken prijs is de naam van de textbox
}
else
{
alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}
}
}
req.open("GET", strURL, true);
req.send(null);
}
}
Daarmee gaan we dus naar prijsAanpassen.php en we geven "pakketaanpassen" door aan de volgende pagina.

$pakketaanpassen=$_REQUEST['pakketaanpassen'];
switch($pakketaanpassen)
{
case $_REQUEST['pakketaanpassen']:

include ('../connect.php');

$sql = "SELECT standaardprijs FROM paketten WHERE pakketnaam = ' " . $pakketaanpassen . " ' ; " ;

$result = mysql_query($sql, $con);

echo $result;
break;
}
?>

Volgens Google zou dit moeten werken... Maar dat doet het niet. Wat doe ik verkeerd? Ik zie het probleem niet! :|

Acties:
  • 0 Henk 'm!

  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 08:21
Ondanks dat ik een groot aantal dingen anders zou doen...

De eerste fout zit in je PHP. Wat is de waarde van $result? hint, hint.

Ik kan het niet hard maken met je gegeven code, maar waarschijnlijk heb je een tweede fout: Heb je een id meegeven aan de select (DDL is zo ver ik weet geen gangbare term). Je roept in je Javascript namelijk het element aan met bijbehorend id en hebt het in je beschrijving over een naam.

Dusja, ik weet niet wat je precies in Google gevonden hebt? ;)

Leesvoer:
getElementById
switch
if - isset
require_once
mysql_real_escape_string

En om het (Javascript/AJAX) leven makkelijker te maken: jQuery.

Verder is het gebruikelijk om code te laten inspringen, om de leesbaarheid te vergroten. (En de bereidheid op GoT om je te helpen ;)) Zoek ook eens naar een alternatieve methode om HTML in je echo te zetten. Je zult zien dat het een stuk leesbaarder wordt in je IDE/editor.

Ook is het feit dat het systeem intern en door een beperkt aantal personen wordt gebruikt geen excuus om niet aan veiligheid te denken. :F

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Bekijk die switch() ook eens goed, die heeft echt heel erg weinig zin nu. Verder heb ik t idee dat je geen flauw idee hebt wat je aan het doen bent. En zoals rooot al zegt, beveilig meteen de boel want je weet nooit waar het toe kan leiden, zoveel moeite is het niet.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:43

Ventieldopje

I'm not your pal, mate!

Afgezien van dat, die Ajax requests kun je veel makkelijker afhandelen met jQuery met de success(data) callback.

Bovendien gaat getElementById ook niet werken op een element dat geen ID heeft maar een Name ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • KoploperMau
  • Registratie: December 2010
  • Nu online
Ik heb jQuery doorgelezen en ga me erin verdiepen, dank voor de antwoorden. :)

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Waarom in dit geval niet ook direct de prijzen uit de database halen en in een Javascript array zetten? Dan heb je helemaal geen Ajax nodig; kan je onChange direct de juiste prijs uit dat Javascript array printen. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • KoploperMau
  • Registratie: December 2010
  • Nu online
Je hebt gelijk! Ik heb het even uitgeprobeerd maar dat werkt een stuk beter... Bedankt!

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wil je volgende keer je code ook tussen [code=php], [code=html], [code=css] en [code=js] tags plaatsen? Dat maakt het leesbaarder

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1