Hey,

Ik ben bezig met een database waarin je product prijzen kan ingeven. Deze bestaat uit een paar velden. In deze velden kies ik de productnaam en doormiddel van een knop "update" worden dan de velden die bij dit product horen geupdate. Alleen als ik op update heb gedrukt.. wordt mijn pagina herladen en staat de productnaam weer op de eerste die in de select voorkomt. Check bijvoorbeeld als je tomaat kiest op www.2fresh.nl en dan op update drukt.. dan schier die weer terug naar aardbei. Hoe kan ik dit tegen gaan?

Mijn code:


<?php
include("db.php");
?>

<html>
<head>
<title>Stad/regio</title>
</head>
<body>
<?php

if(isset($_POST['add']))
{
$query3 = "INSERT INTO `prijzen` ( `id` , `stad` , `datum` , `productsoort` , `producttype` , `kiloprijs` , `herkomst` )
VALUES (NULL ,'$_POST[stad]', '$_POST[datum]', '$_POST[productnaam]', '$_POST[producttype]', '$_POST[prijs]', '$_POST[herkomst]')";
mysql_query($query3) or die('Error, insert query failed');
}

else

{
?>

<form method="post">
	<table>
		<tr>
			<td>Stad/regio</td>
			<td><input type="text" name="stad" value="stad" size="40"></td>
		</tr>
		<tr>
			<td>Datum</td>
			<td><input type="text" name="datum" value="datum" size="40"></td>
		</tr>
		<tr>
			<td>Soort</td>
			<td><select name="productnaam">
<?php
$query = 'SELECT DISTINCT productnaam FROM producten;';
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {?>
			<option value="<?php echo $row['productnaam'];?>"><?php echo $row['productnaam'];?></option>
<?php }
?>
</select></td><td><input name="update" type="submit" id="update" value="Update"></td>
		</tr>
<tr>
			<td>Type</td>
			<td><select name="producttype">
<?php
if(isset($_POST['update']))
{
$var = $_POST['productnaam'];
$query1 = "SELECT * FROM producten WHERE productnaam = '$var';";
$result1 = mysql_query($query1);
while ($row1 = mysql_fetch_array($result1)) {
?>
			<option value="<?php echo $row1['producttype'];?>"><?php echo $row1['producttype'];?></option>
<?php }} ?>
</select></td>
		</tr>
		<tr>
			<td>Prijs per kilo €</td>
			<td><input type="text" name="prijs" value="post" size="40"></td>
		</tr>
		<tr>
			<td>Herkomst</td>
			<td><input type="text" name="herkomst" value="post" size="40"></td>
		</tr>
		<tr> 
<td width="100">&nbsp;</td>
<td><input name="add" type="submit" id="add" value="Add New User"></td>
</tr>
	</table>
</form>
<?php
echo "$query3";
echo "$query1";
}
?>
</body>
</html>


Oftewel het gekozen productnaam moet na update "selected" zijn..

Alvast bedankt!
<td>
<?php
$query = "
SELECT DISTINCT productnaam
FROM producten
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_error ());
}
else {
echo '<select name="productnaam">';
while ($row = mysql_fetch_assoc ($res)) {
// check ook of $_POST['productnaam'] werkelijk bestaat!
$selected = ($row["productnaam"]==$_POST["productnaam"])?(' selected="selected"'):('');
echo PHP_EOL;
echo '<option' . $selected . ' value="' . $row['productnaam'] . '">' . $row['productnaam'] . '</option>';
}
echo '</select>';
}
?> </td>

Vorige code stonden 2 selects in was foutje!
probeer het eens zonder PHP_EOL
dan krijg ik deze melding

Notice: Query was empty in /customers/2fresh.nl/2fresh.nl/httpd.www/index.php on line 43
Hier zitten nog wel wat foutjes in:
<?
$query3 = "INSERT INTO `prijzen` ( `id` , `stad` , `datum` , `productsoort` , `producttype` , `kiloprijs` , `herkomst` )
VALUES (NULL ,'$_POST[stad]', '$_POST[datum]', '$_POST[productnaam]', '$_POST[producttype]', '$_POST[prijs]', '$_POST[herkomst]')";
?>
1) Gebruik nooit, maar dan ook helemaal nooit, backtics ` in je queries. Die zorgen uiteindelijk voor (ernstige) bugs en dat wil je niet.
2) Jouw datum is geen datum, dat controleer je nergens, dat gaat dus hopeloos fout. Een datum sla je op in een DATE in het formaat yyyy-mm-dd. Andere formaten zijn fout.
3) MySQL controleert zelden een datum, dat zul je dus in PHP moeten controleren. checkdate() is je beste vriend
4) User-input, bv. COOKIE, GET en POST, mag nooit onbeveiligd in een query staan, gebruik bv. mysql_real_escape_string() om de boel te beveiligen.
5) Variabelen buiten quotes
6) Een index is geen constante maar een string en hoort dus tussen quoten te staan.
7) Overzichtelijk scripten scheelt bugs
8) Is de prijs wel een prijs? Dat controleer je nergens, prijzen sla je op met decimalen, dus met een punt en niet met een komma. Dat controleer je nergens.

Beginnetje:
<?php
$query3 = "
INSERT INTO
prijzen (
stad,
datum,
productsoort ,
producttype,
kiloprijs,
herkomst
)
VALUES (
'".mysql_real_escape_string($_POST['stad'])."',
'".$datum."',
'".mysql_real_escape_string($_POST['productnaam']."',
'".mysql_real_escape_string($_POST['producttype'])."',
'".mysql_real_escape_string($_POST['prijs']."',
'".mysql_real_escape_string($_POST['herkomst']."'
)";
?>

    $query = "
        SELECT DISTINCT productnaam
        FROM producten
        ";
    if (!$res = mysql_query ($sql)) {
        trigger_error (mysql_error ());
    }

Dat gaat niet werken zoek zelf maar uit waarom ;)


Hint:

Variabelenamen
ja dat had ik al door :D mysql_query ($sql klopt niet dat moet dus zijn $query dom zeg maarja ik zag het net al!!!


Tnx for the help!!
Heb je script wat aangepast:

<select name="productnaam">
<?php
    $query = mysql_query("SELECT DISTINCT productnaam FROM producten")
    or die(mysql_error());
    while ($row = mysql_fetch_assoc($query)) {
        $selected = ($row["productnaam"]==$_POST["productnaam"])?(' selected="selected"'):('');
        echo '<option' . $selected . ' value="' . $row['productnaam'] . '">' . $row['productnaam'] . '</option>';
    }
?>
</select>
@Jelle: $query is in jouw voorbeeld helemaal geen SQL query, maar een resultaat-set. Een naam als $result oid is dan ook veel logischer...

Overigens is het slimmer om de query eerst in een variabele te zetten en deze variabele in mysql_query() te gebruiken. Op die manier kun je bij een foutmelding ook altijd de query echoën.
Ja je hebt gelijk, ik heb ook niet naar de variable namen gekeken, alleen die hele zooi wat ingekort.

<select name="productnaam">
<?php
    $query = "SELECT DISTINCT productnaam FROM producten";
    $result= mysql_query($query)
    or die(mysql_error().'<br><br>'.$query);
    while ($row = mysql_fetch_assoc($result)) {
        $selected = ($row["productnaam"]==$_POST["productnaam"])?(' selected="selected"'):('');
        echo '<option' . $selected . ' value="' . $row['productnaam'] . '">' . $row['productnaam'] . '</option>';
    }
?>
</select>


Wat modificaties verricht op basis van de tips van Blanche.

Reageren