PDA

Bekijk Volledige Versie : Details krijgen met selectielijst



Jan
07/03/03, 06:50
Hallo allemaal,
Ik heb een tabel met vogelwaarnemingen: in de trant van heggemus, 2 juni
2003, thuis. In de tabel zit een waarnemingID, soortnaam, datum, aantal,
plaats, biezonderheden. Nu heb ik uit die tabel een soortenlijst
gedestillleerd met SELECT DISTINCT. Die lijst heb ik in een
selectieformulier gekregen, en de bedoeling is dat als je een soort
selecteert, dat dan een pagina wordt opgeroepen met daarin de gegevens die
bij die soort horen: dus als je heggemus inpikt, dat je dan in een tabel
ziet dat-ie gezien is op 2 juni 2003 in mijn tuin, maar ook in 3 mei vorig
jaar in Assen etc. Alleen: ik krijg het niet voor elkaar. Het formulier met
de selectie wel. Maar daarna gaat het mis. Heeft iemand een idee waar het
aan ligt? Of kan het gewoon niet: je haalt natuurlijk een variabele uit een
tabel, doet dan net of het een vate waarde is, en je gaat met die vaste
waarde verder zoeken. De resultaten (met de fout) kun je zien op
www.jandijk.nl/php/soortkeuze4.php

Alvast bedankt.


Hieronder staat de code:
<?php
// variabelen initialiseren:
$username = "***";
$password = "***";
$host="localhost";
$dbnaam="***";
$query="SELECT DISTINCT soort FROM vogelwaarnemingen ORDER BY soort";

// query uitbreiden indien soort is doorgegeven
if (!empty($_POST)){
$query .= " WHERE soort='" . $_POSTsoort . "'";
}
// ---- einde initialisatie

$db = mysql_pconnect ("localhost", "***", "***")
or die ("Kan geen verbinding maken met de server");
Mysql_select_db ("***")
or die ("Kan geen database vinden");
?>
<html>
<head>
<title>Een soortenlijst op het scherm tonen</title>
</head>
<body>
<?php
// controleer of pagina voor het eerst wordt geopend, of
// dat de pagina zichzelf heeft aangeroepen

if (empty($_POST)){?>
<h2>Kies een soort</h2>
<form name="form1" action="<?php echo($_SERVER["PHP_SELF"]);?>"
method="post">
soort:
<select name="soort">
<?php
// de selectielijst vullen met beschikbare ID's
$result = mysql_query($query) or die (mysql_error());
while (list($soort) = mysql_fetch_row($result)){
echo("<option value=\"$soort\">$soort</option>\n");
}?>
</select>
<input type="Submit" value="Tonen">
</form>
<?php
}else{
// Als de pagina zichzelf heeft aangeroepen het else-blok uitvoeren
global $soort;
$soort = $_POSTsoort;//hier gaat het dus fout.
//Als ik vierkante haken zet dan verwacht-ie
//een kolom met de vogelnaam.
//Als ik ronde haken zet (zoals ze er nu staan)
// roept-ie iets over een
//ongedefinieerde functie:
//Fatal error: Call to undefined function:
// array()
// in/home/sites/site61/web/php/soortkeuze2.php
// on line 29


echo("<h2>Doorgegeven soort: $soort </h2>\n");
$query="SELECT $soort FROM vogelwaarnemingen";
$result = mysql_query($query) or die (mysql_error());
while (list($waarnemingenID, $soort, $datum, $plaats, $aantal,
$biezonderheden, $extra) =
mysql_fetch_row($result)){
echo
("
<tr>
<td width=5%><font face=Arial, Helvetica, sans-serif
size=2>$waarnemingenID</font></td>
<td width=14%><font face=Arial, Helvetica,
sans-serif size=2>$soort</font></td>
<td width=15%><font face=Arial, Helvetica,
sans-serif size=2>$datum</font></td>
<td width=15%><font face=Arial, Helvetica,
sans-serif size=2>$plaats</font></td>
<td width=15%><div align=center><font face=Arial,
Helvetica, sans-serif size=2>$aantal</font></div></td>
<td windt=36%><font face=Arial, Helvetica,
sans-serif size=2>$biezonderheden</font></td>


</tr>
\n
");
echo("<a href=\"" . $_SERVER["PHP_SELF"] . "\">Andere soort
selecteren</a>");
}
}
// verbinding afsluiten
mysql_close($db);
?>
</body>
</html>

Jaap-Andre de Hoop
07/03/03, 10:05
In article <BA8DF0C3.6A9F%jan-dijk@planet.nl>, Jan <jan-dijk@planet.nl> wrote:
>Hallo allemaal,
>Ik heb een tabel met vogelwaarnemingen: in de trant van heggemus, 2 juni
>2003, thuis. In de tabel zit een waarnemingID, soortnaam, datum, aantal,
>plaats, biezonderheden. Nu heb ik uit die tabel een soortenlijst
>gedestillleerd met SELECT DISTINCT. Die lijst heb ik in een
>selectieformulier gekregen, en de bedoeling is dat als je een soort
>selecteert, dat dan een pagina wordt opgeroepen met daarin de gegevens die
>bij die soort horen: dus als je heggemus inpikt, dat je dan in een tabel
>ziet dat-ie gezien is op 2 juni 2003 in mijn tuin, maar ook in 3 mei vorig
>jaar in Assen etc. Alleen: ik krijg het niet voor elkaar. Het formulier met
>de selectie wel. Maar daarna gaat het mis. Heeft iemand een idee waar het
>aan ligt? Of kan het gewoon niet: je haalt natuurlijk een variabele uit een
>tabel, doet dan net of het een vate waarde is, en je gaat met die vaste
>waarde verder zoeken. De resultaten (met de fout) kun je zien op
>www.jandijk.nl/php/soortkeuze4.php

Het begin is goed gevonden, maar bij de tweede stap maak je een denkfout.
(foutmelding was error in sql)

>$query="SELECT DISTINCT soort FROM vogelwaarnemingen ORDER BY soort";
>
>// query uitbreiden indien soort is doorgegeven
>if (!empty($_POST)){
> $query .= " WHERE soort='" . $_POSTsoort . "'";

waarom wil je dit uitbreiden? je hebt toch al de soort in $_POST[soort] ?
Let trouwens op de haken rondom soort, daarom gaat die query
fout$_POSTsoort is namelijk leeg.


>}else{
> // Als de pagina zichzelf heeft aangeroepen het else-blok uitvoeren
> global $soort;
> $soort = $_POSTsoort;//hier gaat het dus fout.
> //Als ik vierkante haken zet dan verwacht-ie
> //een kolom met de vogelnaam.
> //Als ik ronde haken zet (zoals ze er nu staan)
> // roept-ie iets over een
> //ongedefinieerde functie:
> //Fatal error: Call to undefined function:
> // array()
> // in/home/sites/site61/web/php/soortkeuze2.php
> // on line 29
>
>
> echo("<h2>Doorgegeven soort: $soort </h2>\n");
> $query="SELECT $soort FROM vogelwaarnemingen";
> $result = mysql_query($query) or die (mysql_error());
> while (list($waarnemingenID, $soort, $datum, $plaats, $aantal,
>$biezonderheden, $extra)

in deze query vraag je alleen $soort op, niet de overige informatie:
$query2="select soort, waarnemeningenID, datum,plaats,aantal,
bijzonderheden, extra from volgewaarnemingen where
soort=$_POST['soort']";
Verder gebruik je een 'exotische' manier om de gegevens uit de database
te krijgen. Goed gebruik is mysql_fetch_array of mysql_fetch_object.



> <td windt=36%><font face=Arial, Helvetica,
>sans-serif size=2>$biezonderheden</font></td>


typo windt=width, waarom telkens font face=arial, blablabla, je bent geen
MSWord? (kan makkelijker, zodat minder code en minder verkeer oplevert).

Bien, nog een paar dingen aan te passen, veel succes.

Jaap-Andre