PHP "Value" aus foreach-Schleife zurückgeben?

zlep

Banned
Registriert
Feb. 2016
Beiträge
126
Hallo,

ich versuche gerade den Wert aus einem Dropdown-Menu, welches ich mittles einer foreach-Schleife generiere, "zurückzugeben", damit ich weiter damit arbeiten kann. Wenn ich den value normal schreibe ("1", "2", "3") (siehe auskommentierter Bereich) funktioniert es. Wenn ich den Wert "1", "2", "3" per foreach-Schleife generiere, geht es nicht.

Woran liegt das?

Code:
$pdo = new PDO($dsn, $username, $password);

$id =  $_GET['id'];

$sql = 'SELECT * FROM posts';
$sql2 = 'SELECT * FROM posts WHERE id = :id';

$stmt = $pdo -> prepare($sql);
$stmt2 = $pdo -> prepare($sql2);
$stmt2 -> bindParam(':id', $id);
$stmt -> execute();
$stmt2 -> execute();

$results = $stmt -> fetchAll(PDO::FETCH_OBJ);
$results2 = $stmt2 -> fetchAll(PDO::FETCH_OBJ);

?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>

<body>
   
   
    <form action="<?php $_SERVER['PHP_SELF'] ?>" method="get">

        <select name="id">

            <!-- so würde es gehen
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>-->
           
            <!-- so geht es nicht -->
            <?php foreach ($results as $result) : ?>
            <option value="<?php $result -> id ?>"><?php echo $result -> id ?></option>
            <?php endforeach; ?>
           
        </select>
        <input type="submit" name="Submit">
    </form>
   
    <?php foreach($results2 as $result2) : ?>
        <?php echo $result2 -> title; ?>
    <?php endforeach; ?>
   
</body>
</html>

Ich versuche mir derzeit selbst PHP beizubringen und da stoße ich immer mal wieder auf Dinge, die ich mir nicht erklären kann und die ich auch nicht per Google herausfinde, wahrscheinlich, weil ich nicht genau weiß, wonach ich genau suchen muss. Ich hoffe, ihr nehmt es mir nicht übel, wenn ich hier immer einen neuen Thread erstelle :)
Danke
 
Warum benötigst du da eine foreach-Schleife? Wenn es dir nur um Zahlen geht, gehts auch einfacher:

Code:
<select name="id">
<?php
for($i = 1; $i <= 10; $i++) {
?>
<option value="<?=$i;?>"><?=$i;?></option>
<?php
}
?>
</select>

:-)
 
Weil ich gerne so viele Zahlen in dem Dropdown-Menü hätte, wie es Datenbank-Einträge (also ID's) gibt.
Jetzt wo du es sagst, fällt mir aber selbst auf, dass das wahrscheinlich einfacher geht. Vorher einfach mit rowCount() zählen und dann die for-Schleife, oder?

Trotzdem würde mich interessieren, warum die Zahl aus der foreach-Schleife nicht "zurückgegeben" werden kann. Das Problem taucht bestimmt irgendwann mal auf, wo man es nicht anders lösen kann, schätze ich jetzt mal :)
 
Die Variante von @Phoebus Ryan kannst du auch verwenden um ueber eine Array zu iterieren, indem du die Laenge deines Arrays ermittelns (mit count()) und die Bedingung anpasst.
 
Vielleicht liegt es daran, dass
Code:
$id =  $_GET['id'];
NULL ist ggf?
 
DJ_We$t schrieb:
Vielleicht liegt es daran, dass
Code:
$id =  $_GET['id'];
NULL ist ggf?

Hm, eigentlich nicht. Wie gesagt, wenn ich <option value="1">1</option> mache, wird $_GET['id'] in die Variable $id geschrieben und ich kann sie ausgeben. Wenn ich sie per foreach-Schleife einbinde, bleibt sie leer.
 
Naja du setzt $id ja direkt am Anfang des Scripts = $_GET['id'] ich frag mich woher kommt denn $_GET['id']?

Spielt aber auch gerade keine Rolle da in deiner Schleife ja $results ausgewertet wird also das Ergebinis deines ersten SQL Statements...
Ist denn die Verbindung zur Datenbank da? Also mal die Verbindung ausgegeben?
 
was heißt denn geht nicht? kommen einfach keine options? innerhalb des value attributs fehlt übrigens das "echo" im php. du kannst für das ausgeben von werten auch den short tag <?= $var ?> verwenden.

@DJ_We$t $_GET['id'] entspricht dem URL-Parameter, also der GET-Variable, id.
 
  • Gefällt mir
Reaktionen: zlep
DJ_We$t schrieb:
Ist denn die Verbindung zur Datenbank da? Also mal die Verbindung ausgegeben?

Ja, ist vorhanden.

Code:
foreach ($results as $result) {
    echo $result -> id;
}

gibt ganz normal die ID's aus.
Ergänzung ()

Cai-pirinha schrieb:
was heißt denn geht nicht? kommen einfach keine options?

Doch, die options kommen (ID 1 - 11), aber die Zahl wird nicht "zurückgegeben". Ich weiß nicht, wie man das genau nennt. Also in der URL steht "?id=&Submit=Senden" anstatt z.B. "?id=1&Submit=Senden".
Ergänzung ()

Cai-pirinha schrieb:
innerhalb des value attributs fehlt übrigens das "echo" im php. .

Daran lag's. :o
Sorry, war wirklich unnötig. Blöder Fehler. Ist alles nicht so einfach als Anfänger :/
 
Zuletzt bearbeitet:
zlep schrieb:
Doch, die options kommen (ID 1 - 11), aber die Zahl wird nicht "zurückgegeben". Ich weiß nicht, wie man das genau nennt. Also in der URL steht "?id=&Submit=Senden" anstatt z.B. "?id=1&Submit=Senden".

ja gut, das liegt nur daran, dass du eben das echo vergessen hast. die values sind deshalb leer.

macht ja nichts ;) wie gesagt, du kannst auch die kurzschreibweise verwenden <?= $result->id ?>, das gibt dir variablen direkt aus.
 
  • Gefällt mir
Reaktionen: zlep
Zurück
Oben