letzte Auswahl im Selector "merken"

phpneuling_

Grünschnabel
Hallo ihr lieben,

ich hätte da mal ein kleines Problem,

Ich krieg es nicht hin, das die letzte Auswahl die ich ausgewählt habe im Selecetor stehen bleibt. der springt immer wieder auf den ersten Eintrag zurück.

was mach ich da falsch?
Kann es vielleicht daran liegen, dass ich die Werte in _POST und element auswahl vorher auf Gleichheit prüfen muss?

thx und grüße

PHP:
<!DOCTYPE HTML>
<html lang="de">
<head>
    <meta charset="utf-8">
        <title>test</title>
<?php
try {
        $pdo = new PDO ( 'mysql:dbname=nation;charset=utf8', 'root', '' );
        //$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        //$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch ( PDOException $e ) {
        die ( $e->getMessage () );
}


?>
</head>


<body>
<form method="post">
  <fieldset>

<?php
    $sql = "SELECT name, region_id FROM regions ORDER BY name";
    $stmt = $pdo -> prepare($sql);
    $stmt -> execute();
    //print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
    echo "<select name ='auswahl' id = 'auswahl'>";

?>

<?php
    foreach ($stmt->fetchAll(PDO::FETCH_COLUMN,0) as $daten)
    echo "<option value = '$daten'>$daten </option> ";

     //echo "<option value = '.$daten->$daten.'"' .($_POST['auswahl'] == $daten->id ? ' selected='selected'' : '') . '>'.$daten->name.'</option>'";
     echo "</select>";
     $auswahl = $_POST['auswahl'] ?? 'standard';
    if(isset($_POST['auswahl'])){
       $region = $_POST['auswahl'];




        $auswahl = 'SELECT countries.name as "name2", countries.area, avg(country_stats.gdp), avg(country_stats.population), continents.name FROM
                    countries, country_stats, regions INNER JOIN continents ON regions.continent_id = continents.continent_id
                    WHERE regions.region_id = countries.region_id AND countries.country_id = country_stats.country_id AND regions.name = "'. $region .'" GROUP BY countries.country_id';


        $stmt = $pdo -> prepare($auswahl);
        $stmt->execute();
        echo "<table id=\"Länder\">\n\t";
        echo "<thead>
                <tr>
                <th><h3>Land</h3></th>
                <th><h3>Fläche</h3></th>
                <th><h3>AVG BIP</h3></th>
                <th><h3>AVG Bevölkerung</h3></th>
                <th><h3>Kontinent</h3></th>
                </tr>
                </thead>\n";
        echo "<tbody>\n\t";
        $ausgabe[] = $stmt->fetch(PDO::FETCH_ASSOC);

        while ( $zeile = $stmt->fetch ( PDO::FETCH_ASSOC ) ) {
          echo  "<tr>\t<td>".$zeile['name2']."</td>
                      <td>".$zeile['area']."</td>
                      <td>".$zeile['avg(country_stats.gdp)']."</td>
                      <td>".$zeile['avg(country_stats.population)']."</td>
                      <td>".$zeile['name']."</td></tr>\n\t";
          }

}


?>
<br>
<input type = "submit" value ="anzeigen">
</form>


        </body>
</html>
 
Lösung
Das hier kommt mir auch sehr seltsam vor:
PHP:
$auswahl = isset($_POST['auswahl']) ? isset($_POST['auswahl']) : "";
isset gibt doch boolean zurück
Hätte sowas erwartet (damit $auswahl dann auch den Wert der Auswahl bekommt, und nicht True)
PHP:
$auswahl = isset($_POST['auswahl']) ? $_POST['auswahl'] : "";
Weil dann sollte das hier funktionieren
PHP:
$selected = $auswahl==$daten ? "selected" : "";

EDIT: Wobei das hier ja eigentlich auch Quatsch ist
PHP:
$auswahl = isset($_POST['auswahl']) ? $_POST['auswahl'] : "";
einfach direkt
PHP:
$auswahl = $_POST['auswahl'];
Wenn nix ausgewählt ist, gibt $_POST['auswahl'] eh nen leeren String zurück
Oder verstehe ich das falsch?
Jein, aber wenn die Seite über den Browser das erste Mal aufgerufen wird, ist $_POST nicht gesetzt und mit
PHP:
$auswahl = $_POST['auswahl'];
würdest du trotzdem darauf zugreifen. PHP wird dann meckern, aber das würde man auch nur sehen, wenn das Error-Reporting hochgedreht ist. Daher sollte man das schon mit isset prüfen.
Na dann...... :cool::cool::cool::cool:
 
Zurück