Mijn php pagina hier beneden (example.php) werkt verder goed en de resultaten van de dbase query worden goed weergegeven (alle records). Maar als ik naar een volgende pagina ga (output.php) en daar de session gegevens weer oproep laat hij enkel de laatste record zien. Ik begrijp dat dit komt doordat session in de while loop staat in emample.php. Maar ik weet niet hoe ik het dan moet wijzigen. Kan iemand mijn scrip aanpassen. Het is vast heel eenvoudig?

De example.php file:

<?php
//session starts
session_start();

// Database selection and pH selection (this comes from a form+post file where the pH level is asked for and selected)
switch ($_POST["pH"]) {

//Option 1 (I put xxxx for privacy purposes, guess you understand) (c1, c2, c3 are the selections you could make in the Form)
case "c1":
$con = mysqli_connect("localhost", "xxxx", "") or die (mysql_error ());
if (!$con) {die('Could not connect: ' . mysqli_error($con));}
mysqli_select_db($con,"xxx")or die(mysql_error());

//change query here
$sql="SELECT * FROM people WHERE rain <=200 AND Soil IN ('Sand','Sand Clay', 'Sand Clay Silt') AND pH<=4.5";
$result = mysqli_query($con,$sql);
break;

//Option 2
case "c2":
$con = mysqli_connect("localhost", "xxxx", "") or die (mysql_error ());
if (!$con) {die('Could not connect: ' . mysqli_error($con));}
mysqli_select_db($con,"xxx")or die(mysql_error());

//change query here
$sql="SELECT * FROM people WHERE rain <=200 AND Soil IN ('Sand','Sand Clay', 'Sand Clay Silt') AND pH BETWEEN 4.5 AND 7.0";
$result = mysqli_query($con,$sql);
break;

//Option 3
case "c3":
$con = mysqli_connect("localhost", "xxxx", "") or die (mysql_error ());
if (!$con) {die('Could not connect: ' . mysqli_error($con));}
mysqli_select_db($con,"xxx")or die(mysql_error());

//change query here
$sql="SELECT * FROM people WHERE rain <=200 AND Soil IN ('Sand','Sand Clay', 'Sand Clay Silt') AND pH >=7.0";
$result = mysqli_query($con,$sql);
break;


//default when nothing is selected
default:
$strpH = "Please go back and make your selection";
break;
}





//here starts the echo part for this page.


// printing main table
echo "<table>
<tr bgcolor=#339966>
<th>id</th>
<th>Common Name</th>
<th>Latin Name</th>
<th>pH level</th>
<th>Soil</th>
<th>Rain annual</th>
</tr>";

// Loop the recordset $result and Write the value van $result

while($row = mysqli_fetch_array($result))
{
$queryArray[] = $row;

// Declaration of session items...here something has to be changed.
$_SESSION ['select1']= $row [id];
$_SESSION ['select2']= $row ['CommonName'];
$_SESSION ['select3']= $row ['LatinName'];
$_SESSION ['select4']= $row [pH];
$_SESSION ['select5']= $row ['Soil'];
$_SESSION ['select6']= $row [rain];

echo "<tr>";
echo "<td>" .$row[id]. "</td>";
echo "<td>" .$row['CommonName']. "</td>";
echo "<td>" .$row['LatinName']. "</td>";
echo "<td>" .$row[pH]. "</td>";
echo "<td>" .$row['Soil']. "</td>";
echo "<td>" .$row[rain]. "</td>";
echo "</tr>";
}
echo "</table>";

// Close the database connection
mysqli_close($con);
?>






En hieronder de output.php file

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

session_start();

// setting the table
echo "<table>
<tr bgcolor=#339966>
<th>id</th>
<th>Common Name</th>
<th>Latin Name</th>
<th>pH level</th>
<th>Soil</th>
<th>Rain annual</th>
</tr>";


//readig session variables
echo "<tr>";
echo "<td>" .$_SESSION ['select1']. "</td>";
echo "<td>" .$_SESSION ['select2']. "</td>";
echo "<td>" .$_SESSION ['select3']. "</td>";
echo "<td>" .$_SESSION ['select4']. "</td>";
echo "<td>" .$_SESSION ['select5']. "</td>";
echo "<td>" .$_SESSION ['select6']. "</td>";
echo "</tr>";
echo "</table>";
?>
Maar dat is precies wat er gebeurt? Je onthoudt precies één record, in output.php druk je ook maar één record af (hier ontbreekt een loop ook in het geheel).

Het enige wat variabel is in je switch-statement is je query, de rest (maken connectie, selecteren database, uitvoeren query) is elke keer hetzelfde; dit kun je dus buiten je switch-statement trekken. Je kunt dus deze code dus flink in het aantal regels terugbrengen.

Daarnaast is het enige gegeven wat bepaalt hoe de query luidt, en dus welke resultaten getoond worden $_POST['pH']. Als je dit gegeven nu eens in $_GET (je querystring) doorgeeft? Dan hoef je niet alle (zoek?)resultaten over te hevelen in je sessie. Je zou er zelfs voor kunnen kiezen om enkel dat (de pH-waarde) op te slaan in je sessie, maar je hoeft hiervoor helemaal geen sessie te gebruiken.

Te meer als dit een soort van zoekfunctionaliteit is: gebruik alsjeblieft $_GET, dit levert ook knip- en plakbare links op (in tegenstelling tot wanneer je $_POST gebruikt).

Ik zou dus deze ingeslagen weg niet verder bewandelen, maar de hele aanpak omgooien.

Ik weet ook niet wat je in het bovenstaande probeert te bereiken; als je op grond van een pH-waarde data wilt afdrukken kun je, als je hiervoor $_GET gebruikt, zelfs dezelfde broncode gebruiken...
Dag Thomas, bedankt voor de snelle reactie. Mijn uiteindelijke doel is het bouwen van een groot systeem met veel selecties uit een grote database, en daarvan is dit het beginnetje, wat ik eerst eens goed wil hebben voordat ik verder ga.

In een formulier zijn er 3 keuzes. De example.php koppelt elke keuze aan een selectie uit een database. Je merkt terecht op dat connectie maken e.d. buiten de Switch kan, dat ga ik doen. Dank daarvoor.
Op dezelfde example.php pagina wordt alles goed ge-echoed. Er worden meerdere records getoond als dat er meerdere moeten zijn. So far so good.
Mijn doel is om deze selectie van meer records nogmaals te echoen op een andere pagina. Dat is de output.php file (dat wil ik zodat bezoekers daar een schone lijst kunnen printen). Maar dat lukt dus niet. Ik weet niet precies hoe ik daar dan $_GET voor kan gebruiken, of hoe e.a. daar in een loop te zetten. Wellicht kun je me helpen met een stukje code? Ben hier al dagen mee bezig en wil maar niet lukken.



Indien je een groot systeem gaat bouwen lijkt het mij (heel) belangrijk dat je al je code(bestanden) goed organiseert.

Ik begrijp dat er de wens is om de selectie die je in example.php maakt (via een formulier) onthoudt in output.php.

Je zult mij moeten helpen met twee dingen:

* Hoe verschilt example.php wezenlijk van output.php, is het de bedoeling dat je in laatstgenoemde pagina andere dingen kunt doen dan example.php? Anders lijkt mij een van de twee overbodig.

* Als blijkt dat output.php een bestaansrecht heeft naast example.php, is het dan de bedoeling dat je van example.php kunt navigeren naar output.php?

Zoals ik het op dit moment zie doen beide pagina's hetzelfde.

Als dit alles zoekfunctionaliteit betreft, dan zou ik je formulier aanpassen naar zoiets:
<form action="example.php" method="get">
<select name="ph">
<option value="c1">c1</option>
<option value="c2">c2</option>
<option value="c3">c3</option>
</select>
<button type="submit">go</button>
</form>

Vervolgens doe je zoiets in example.php:
<?php
// stop in includes/connect.php je database-connectie-gegevens
require './includes/connect.php';

if (isset($_GET['ph'])) {
    $query = false;
    switch ($_GET['ph']) {
        case 'c1':
            $query = '... je c1 query hier ...';
        break;

        case 'c2':
            $query = '... je c2 query hier ...';
        break;

        case 'c3':
            $query = '... je c3 query hier ...';
        break;
    }
    if ($query === false) {
        ?><p>Geen geldige pH waarde geselecteerd.</p><?php
    } else {
        // voer hier je query $query uit en druk de resultaten af
        // ...
    }
} else {
    ?><p>Geen pH waarde geselecteerd.</p><?php
}
?>

En als je de geselecteerde pH waarde over meerdere pagina's wilt onthouden sla je deze op in $_SESSION, maar niet alle bijbehorende resultaten.
Hoi Thomas, bedankt alweer voor de goede reactie! Inderdaad is het de bedoeling dat je via een Form naar Example.php gaat. De Form file heb ik boven niet weergegeven, maar is vrij simpel. Voor wat betreft je vragen:

* Hoe verschilt example.php wezenlijk van output.php, is het de bedoeling dat je in laatstgenoemde pagina andere dingen kunt doen dan example.php? Anders lijkt mij een van de twee overbodig.

Inderdaad ga je straks ook andere dingen doen in Example.php; namelijk een volgende formulier invullen (wat dan doorverwijst naar Example2.php, Example3.php etc etc (volg je het nog?). Uiteindelijk wordt het een systeem waar je via verschillende pagina's met vragen (Forms) steeds een meer nauwkeurige zoekopdracht uitvoert in dezelfde database. Het gaat hier over het selecteren van Boomsoorten waarbij je eerst gevraagd wordt naar de grondsoort, dan pH, available water, etc etc. (eigenlijk wilde ik een volledig dynamische pagina waarbij je eerst een zoekresultaat laat zien, dan de volgende vraag invult, en onmiddellijk een meer nauwkeurige zoekresultaat laat zien (een selectie uit de eerste zoekopdracht), dan weer een vraag invult, ect etc. Maar aangezien ik echt geen idee heb, en in welke code, hoe ik zo'n dynamisch script moet maken ben ik de weg hierboven maar ingeslagen; er zullen wel een hoop files moeten worden aangemaakt op deze manier.


* Als blijkt dat output.php een bestaansrecht heeft naast example.php, is het dan de bedoeling dat je van example.php kunt navigeren naar output.php?

Inderdaad. Op example.php komt een button (naast een nieuwe Form waar je naar Example 2,3,4 etc gaat) waar je navigeert naar een nieuwe pagina met enkel de resultaten van je zoekopdracht, en verder niets. Die kun je daar dan printen/of PDF van maken.

Bedankt alvast voor de suggesties hierboven. Als je er nog meer hebt aan de hand van mijn antwoord dan graag!


Moet dit per se stapsgewijs (example 1 > example 2 > example 3) in die zin dat ingevulde waarden van bijvoorbeeld example 2 van invloed zijn op de informatie in example 3, dus dat je zeg maar steeds verder inzoomt op de gewenste informatie (die er in verschillende gevallen anders uit kan zien)?

Anders kun je volstaan met één filter-formulier waarbij je een of meer filterwaarden invult en vervolgens een query opbouwt op grond van ingevulde filter-eigenschappen (de niet-ingevulde filter-eigenschappen worden buiten beschouwing gelaten).

Ik denk dat de opzet van je zoekfunctionaliteit afhangt van:
- hoe je data georganiseerd is, en
- hoe je hier (vervolgens) in wilt zoeken
Hoi Thomas,

Het antwoord op je vraag is een mix van beide suggesties.

In principe is het idee van 1 Form met 5-6 vragen ok. Maar de antwoorden moeten dan wel uiteindelijk 1 eindselectie opleveren. Dus alle antwoorden moeten bij elkaar gevoegd, en daar moet dan één zoekopdracht voor gegeven worden. Hoe dat precies dan zou moeten weet ik niet, je moet dan inderdaad een query opbouwen....of example.php moet een keuze kunnen maken uit alle (pakweg 100 verschillende mogelijke eindselecties (5-6 vragen met elk 3-4 antwoorden).

Maar ik schreef een mix van je suggesties. Want ik zou wel graag elke vraag van het Formulier op een aparte pagina willen stellen. De uiteindelijke website gaat gebruikt worden door boeren in Spanje, en op elke pagina komt een uitgebreide beschrijving van de vraag en hoe ze de beste keuze kunnen maken.

Maar we zouden dan kunnen denken aan 5-6 forms die uiteindelijk allemaal bij example.php uitkomen? Maar we moeten dan wel steeds de antwoorden tussentijds opslaan. Er worden dan geen tussen resultaten getoond (hoewel dat natuurlijk wel mooi zou zijn, maar is niet direct noodzakelijk, dan kom je trouwens alsnog terecht bij jou suggestie 1, hierboven).

Wat betreft de database, die is niet ingewikkeld. Er komen pakweg 50 soorten planten en bomen in, met 10 kolommen met eigenschappen. Die structuur staat al.


groet, Marco
Als je echt in 5 á 6 stappen het formulier wil afwerken, dan kan dat inderdaad prima via een sessie.
Wellicht is via Javascript steeds maar 1 stap (van 1 formulier op 1 pagina) tonen.
Alsof je doorgaat, maar je doet niet meer dan een ander stukje van dat ene formulier op 1 pagina tonen.

Voordelen:
Maximaal 2 pagina's
1 Pagina met 1 formulier
Geen gezeur met onthouden, of erger: halverwege binnenkomen (dus op pagina 3 oid).

Nadelen: het vertrouwt op Javascript... Maar je kan het ook zo maken dat, wanneer Javascript uit staat (0,1% oid), het heel formulier gewoon in 1x wordt getoond.
Okay, er is dus de wens om -zonder dat daar eigenlijk een noodzaak voor is in die zin dat vragen en antwoorden van elkaar afhangen- het formulier verspreid over verschillende pagina's op te zetten.

Er zijn verschillende oplossingen denkbaar:
- iets met JavaScript, waarbij je divs (pagina-elementen) toont en verbergt, op grond van welke vraag je beantwoordt, je hoeft dan niets door te geven, je blijft continu op dezelfde pagina tot het moment dat je alle informatie verstuurt
- een oplossing met PHP, waarbij je alles opdeelt over verschillende scripts, ik denk dat je hiermee wel wat overhead introduceert, omdat de structuur over het algemeen hetzelfde zal zijn
- een oplossing met PHP, waarbij je één script gebruikt

Ik neem aan dat het in het belang van de invuller is dat alles waarheidsgetrouw wordt ingevuld en dat er niet (expres) geprobeerd zal worden om stappen over te slaan of foutieve of lege antwoorden in te vullen (dus dat er sprake is van "vals spel")? Natuurlijk moet het script wel veilig zijn, maar dit laatste bepaalt wel een beetje hoe robuust je navigatie moet zijn en hoe grondig de opgeslagen gegevens gevalideerd moeten worden.

Als je wilt kan ik wel een voorbeeldje geven van een enkel script waarin "aparte" pagina's worden aangeroepen waartussen je informatie verstuurt via formulieren en opslaat in een sessie.
Dank voor beide reacties. Er zal inderdaad geen sprake zijn van vals spel. Dat sommige gebruikers het evt zonder java zouden moeten uitvoeren zou wel kunnen gebeuren, dus een soort van beveiliging dat hij dan maar meteen de hele pagina laat zien is wellicht het beste.

Het zou inderdaad een goed idee zijn, om via een scrip en divs steeds nieuwe vragen te laten zien. Als je inderdaad een voorbeeldje kunt geven wat ik zelf makkelijk kan uitbreiden met meer vragen en antwoorden zou ik daar zeer mee geholpen zijn.

marco
Hoi Thomas, kun je me nog een voorbeeldje geven zoals je hierboven aangaf? Dan kan ik verder! Alvast bedankt.

Reageren