SQL query opzetten adhv html form variabele
Ik zit al een paar dagen te puzzelen op het volgende. Ik probeer een sql query op te laten bouwen adhv waarden die via een html formulier zijn doorgegeven. Vervolgens moet die waarden via een array omgezet worden naar xml
Ik heb nu het als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//variabele uit formulier omzetten in 'gewone' variabele.
$stat1 = $_POST['stat1'];
$product1 = $_POST['product1'];
//data ophalen
$sqldata = "SELECT '$stat1' FROM 'kap_productgegevens' WHERE 'product' = '$product1' ORDER BY 'datum'ASC";
$sqldataresult = mysql_query($sqldata)
or die (mysql_error());
//query result omzetten naar xml
$xml_output = "<xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n";
$xml_output .= "<row>\n";
$xml_output .= "<string>" . $product1 . "</string>\n";
while ($row = mysql_fetch_array($sqldataresult)) {
$xml_output .="<number>" . $row['$data1'] . "</number>\r\n";
}
$xml_output .= </row>\n";
//xml opslaan in document komt hierna
?>
//variabele uit formulier omzetten in 'gewone' variabele.
$stat1 = $_POST['stat1'];
$product1 = $_POST['product1'];
//data ophalen
$sqldata = "SELECT '$stat1' FROM 'kap_productgegevens' WHERE 'product' = '$product1' ORDER BY 'datum'ASC";
$sqldataresult = mysql_query($sqldata)
or die (mysql_error());
//query result omzetten naar xml
$xml_output = "<xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n";
$xml_output .= "<row>\n";
$xml_output .= "<string>" . $product1 . "</string>\n";
while ($row = mysql_fetch_array($sqldataresult)) {
$xml_output .="<number>" . $row['$data1'] . "</number>\r\n";
}
$xml_output .= </row>\n";
//xml opslaan in document komt hierna
?>
Ik krijg een xml document maar hij geeft de waarde van $stat1 weer tussen <number> en </number> terwijl $stat1 bedoelt is om de juiste kolom te selecteren in de array en adh daarvan de waarden uit te lezen.
Kan wat ik wil Uberhaupt wel? Ik denk het wel, maar ik zie niet wat ik fout doe. Heb al tig dingen geprobeerd. Helaas, zonder resultaat.
Heeft iemand een idee wat ik fout doe?
alvast bedankt!
Mark
Gewijzigd op 18/07/2011 13:24:19 door Mark van Dijk
Leuk al die quotes in de query. Je weet dat alles wat tussen quotes staat als 'tekst' wordt gezien en niet als veld- of kolomnaam.
Geen dubbele vars, haal vars buiten quotes, gebruik de juiste quotes. En wellicht dat je ook wil kijken naar real string escape.
Met de quotes heb ik inderdaad van alles geprobeerd, maar lukken wil het niet. Iemand een suggestie?
Waarom gebruik je niet gewoon SimpleXML of DOM voor de opbouw van je XML-structuur?
- Aar - op 18/07/2011 15:13:07:
Waarom gebruik je niet gewoon SimpleXML of DOM voor de opbouw van je XML-structuur?
omdat het de enige methode is die ik ken. Ik ben een beginner, dus roei ik met de kennis die ik heb.
- Aar - op 18/07/2011 15:37:55:
Bedankt. Heb er even snel doorheen gekeken, maar zal er mijn tijd aan moeten besteden. Echter zie ik niet hoe dit mijn probleem kan oplossen? Wil je hiermee zeggen dat wat ik nu heb volledig fout gaat? Of is dit gewoon een andere methode voor hetzelfde? Het enige wat er nu fout lijkt te gaan is de manier waarop ik variabelen in een sql query gebruik.
Als je met XML bezig gaat houden is de de beste manier. Dit staat los van je probleem verder.
- Aar - op 18/07/2011 15:49:39:
Als je met XML bezig gaat houden is de de beste manier. Dit staat los van je probleem verder.
Toch bedankt... :-)
Mark van Dijk op 18/07/2011 15:06:11:
Met de quotes heb ik inderdaad van alles geprobeerd, maar lukken wil het niet. Iemand een suggestie?
Ja, gewoon géén quotes.
- SanThe - op 18/07/2011 16:04:31:
Ja, gewoon géén quotes.
Mark van Dijk op 18/07/2011 15:06:11:
Met de quotes heb ik inderdaad van alles geprobeerd, maar lukken wil het niet. Iemand een suggestie?
Ja, gewoon géén quotes.
Helemaal geen quotes? of alleen sommige quotes? Alleen de dubbele quotes? of alleen de enkele? Bedankt voor je antwoord, maar je zult toch wat specifieker moeten zijn voor deze beginner :-).
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sqldata = "SELECT $stat1
FROM kap_productgegevens
WHERE product = '$product1'
ORDER BY datum
ASC";
?>
$sqldata = "SELECT $stat1
FROM kap_productgegevens
WHERE product = '$product1'
ORDER BY datum
ASC";
?>
Right?
Gewijzigd op 18/07/2011 16:47:41 door Jasper DS
Dat lijkt me correct, vergeet ook niet mysql_real_escape_string toe te voegen indien nodig. Ik weet niet of die vars veilig zijn maar ik denk van niet.
PHP Jasper op 18/07/2011 16:54:44:
Dat lijkt me correct, vergeet ook niet mysql_real_escape_string toe te voegen indien nodig. Ik weet niet of die vars veilig zijn maar ik denk van niet.
wat bedoel je met veilig?, ik heb de mysql_real_escape_string al eerder gezien en vanmiddag eens bekeken op de php site. Maar werd er niet veel wijs uit.
staan de quotes hier trouwens wel goed?
Code (php)
1
2
3
4
2
3
4
<?php
while ($row = mysql_fetch_array($sqldataresult)) {
$xml_output .="<number>" . $row['$data1'] . "</number>\r\n";
?>
while ($row = mysql_fetch_array($sqldataresult)) {
$xml_output .="<number>" . $row['$data1'] . "</number>\r\n";
?>
Gewijzigd op 18/07/2011 16:58:48 door Mark van Dijk
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sqldata = "SELECT " . $stat1 . "
FROM kap_productgegevens
WHERE product = '" . mysql_real_escape_string($product1) . "'
ORDER BY datum
ASC";
?>
$sqldata = "SELECT " . $stat1 . "
FROM kap_productgegevens
WHERE product = '" . mysql_real_escape_string($product1) . "'
ORDER BY datum
ASC";
?>
En zo is de query ook nog beveiligd.
- SanThe - op 18/07/2011 16:57:08:
Zoals Jasper al aangeeft.
En zo is de query ook nog beveiligd.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sqldata = "SELECT " . $stat1 . "
FROM kap_productgegevens
WHERE product = '" . mysql_real_escape_string($product1) . "'
ORDER BY datum
ASC";
?>
$sqldata = "SELECT " . $stat1 . "
FROM kap_productgegevens
WHERE product = '" . mysql_real_escape_string($product1) . "'
ORDER BY datum
ASC";
?>
En zo is de query ook nog beveiligd.
Ik zie dat je het alleen bij de 2e var doet. Is daar een reden voor? Of kan ik het er bij de eerste var ook gewoon voor zetten?
bedankt voor de snelle reacties trouwens. Ik maak meer meters dan ooit tevoren. :-)
Ik nam eigenlijk aan dat de eerste var door de maker van het script is gevuld en niet door een websitebezoeker. Maar ik zie nu dat het ook uit een formulier komt. Ja, dan MOET dat er ook omheen voor de veiligheid.