• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit dynamisch gefüllten DropDown Menü

Ritschie

Neues Mitglied
Hi

Ich bin gerade dabei ein kleines Tool für die Bedarfsermittlung im Baubereich zu schreiben.
Kaum angefangen und schon ein Problem ;)

Und zwar folgendes:

Ich habe eine Datenbank in welcher all meine verwendeten Produkte gespeichert sind, diese habe ich nun nach Lieferfirma sortiert in ein Dropdownmenü gepackt um den Bedarfsrechner etwas flexibler zu machen.
Bis hier hin funktioniert alles Super, jedoch hat es im Moment noch eine kleine Macke,
sobald die Auswahl und die Eingaben komplett sind und ich PhP rechnen lasse setzen sich die DDs zurück.

Ich hätte gerne das das Drop Down Menü bei dem Produkt bleibt welches zuvor ausgewählt wurde.

Mein bisher bester versuch sieht so aus:
Code:
                <select name="produkt">
                    <?php
                    
                    $select = "SELECT * FROM `Mauersteine` WHERE `firma` = $_POST[marke]";
                    $query = mysql_query($select);
                    while ($ds = mysql_fetch_object($query)) {
                        $id = $ds -> id;
                        $name = $ds -> name;
                    if($id == $_GET[produkt]){$tmp = 'selected';};
                    echo "<option $tmp value=\"".$id."\">".$name."</option>";
                    }
                    ?>
                </select>

Problem jedoch ist das $id leer bleibt und somitt die Gegenüberstellung mit $_GET[produkt] nicht hinhaut^^

könnt ihr mir helfen?

Grüsse Richard
 
Werbung:
Hallo,

wenn ich dich richtig verstanden habe funktioniert sie Vorselektion der DropDonw-Liste nicht?

Das liegt daran, dass die Variable $tmp nur innerhalb der IF-Anweisung gültig ist und danach nicht mehr verfügbar. Um die Variable auch nach der End-klammer der IF-Anweisung nutzen zu können, musst du sie bereits vor der Anweisung definieren.
Also so:
PHP:
<select name="produkt">
<?php
                    
$select = "SELECT * FROM `Mauersteine` WHERE `firma` = $_POST[marke]";
$query = mysql_query($select);
while ($ds = mysql_fetch_object($query)) {
    $id = $ds -> id;
    $name = $ds -> name;
    $tmp = '';
    if($id == $_GET[produkt]){$tmp = 'selected';};
    echo "<option $tmp value=\"".$id."\">".$name."</option>";
}

?>
</select>
Das sollte funktionieren.
 
Nöp geht leider auch nicht :(

könnte es daran liegnen das $id leer ist? bzw das ich bei dieser variable den fehler hab?
wenn ich sie versuche abzurufen wird nichts angezeigt
 
Werbung:
@vitus: $tmp ist nicht nur innerhalb von if gültig. Das war in früheren PHP Versionen so, aber mittlerweile sind so ziemlich alle Variablen global, zumindest was if/else/elseif in Schleifen angeht.

@Ritschie: Ist es denn ganz, ganz sicher, dass der Feldname auch `id` ist? Soweit ich weiß, ist MySQL auch case sensitive.
 
Wenn der Feldname falsch währe könnte die schleife doch auch keinen wert zuweisen oder?

Die variable $_GET[produkt] hat immer den richtigen wert und auch im Quelltext wird dem jeweiligen Produkt auch die richtige ID als wert zugewiesen.
Jedoch sobald ich auf berechnen klicke bleibt zwar der Wert in $_GET[produkt] der DD Menü jedoch schiebt sich wieder in die ausgangsstellung.

grüsse Richard
 
Ne ganz banale Idee. Ich meine mich dunkel zu erinnern, dass man selected="selected" benutzen muss.

Was Anderes würde mir jetzt echt nicht einfallen, da der Quelltext ja sonst in Ordnung zu sein scheint.
 
Werbung:
Nöp auch nichts...
Die if abfrage greift einfach nicht.... und ich wüsste auf anhieb nicht wie ich das sonst lösen sollte...

hier mal der komplette Code vieleicht werdet ihr ja schlau daraus warum er die abfrage ignoriert:

Code:
    </div>
    
    <form method="post">
        <div class="mauerwerk">
            <h3>Mauerwerk:</h3>
            <p>Marke:
                <select name="marke">
                <option value=1>Wienerberger</option>
                <option value=2>Kotzian</option>
                </select>
            </p>
            <p>Produkt:
                <select name="produkt">
                    <?php
                    
                    $select = "SELECT * FROM `Mauersteine` WHERE `firma` = $_POST[marke]";
                    $query = mysql_query($select);
                    while ($ds = mysql_fetch_object($query)) {
                        $id = $ds -> id;
                        $name = $ds -> name;
                    echo "<option value=\"".$id."\"
                    "; if($ds -> id == $_GET[produkt]){echo "selected='selected'";}; echo "
                    >".$name."</option>";
                    }
                    ?>
                </select>
            </p>
        </div>
        
        <div class="auswahl">
            <input type="submit" name="Button" value="Änderungen übernehmen">
        </div>
    </form>

Ich hab jetzt die If abfrage in die Ausgabe geschoben und diese abgeteilt hat jedoch auch nichts gebracht

Grüsse Richard
 
Also ich denke mal es wäre hilfreicher, sich den Quellcode anzuschauen, der ausgespuckt wird. Meist erkennt man da, wo auf jeden Fall die Fehlerursache ist, anstatt hypotetisch im Source zu suchen.

Wäre also nice, wenn wir den fertigen Code mal sehen könnten.
 
Du verwendest eine Menge undefinierter Konstanten. Wenn du
PHP:
<?php
error_reporting(E_ALL | E_STRICT);
an den Anfang deiner Datei schreibst, erhälst du ein paar Fehlermeldungen.

Und ersetze auch mal
Code:
$query = mysql_query($select);
durch
Code:
$query = mysql_query($select) OR die (mysql_error());
.
 
Werbung:
Also ich denke mal es wäre hilfreicher, sich den Quellcode anzuschauen, der ausgespuckt wird. Meist erkennt man da, wo auf jeden Fall die Fehlerursache ist, anstatt hypotetisch im Source zu suchen.

Wäre also nice, wenn wir den fertigen Code mal sehen könnten.


So die gewünschten Änderungen hab ich vorgenommen.
Die Seite kann man unter:

http://generaljack.bplaced.net/index.php
einsehen.

bezüglich der Code einrückung entschuldige ich mich bei allen die es als störend empfunden haben.
Ich versuche dies bei zukünftigen Posts zu verbessern.

Grüsse Richard
 
Werbung:
HTML:
<select name="produkt">
					<style>.bpe a:link, .bpe a:visited, .bpe a:active { color: #0b4c8e; text-decoration: none; } .bpe a:hover { color: #0D7CEC; }</style>
<span class="bpe" style="font: 11px/1.2em Verdana, sans-serif;"><br />
<b>Notice</b>:  Undefined index: marke in <b>/users/generaljack/www/index.php</b> on line <b>24</b><br />

</span>                </select>

Das sieht aber noch nach Arbeit aus.

Wenn man sich die Notice anschaut, es fehlt der Post-Wert, ergo kann da nichts angezeigt werden, weil die Abfrage auch nichts ausliest.
 
Hab den fehler^^

Hab statt $_POST[produkt], $_GET[produkt] verwendet^^
jetzt funkt es wie es soll^^

Danke für die anregungen

Grüsse Richard
 
Ihr immermit euren Injections.
Ja, die Zahl der nachrückenden Spracheinsteiger wird nicht kleiner.
Ich merk schon, dass die meisten wirklich Pessimisten sind, die immer vom Schlimmsten ausgehen.
Du kannst uns ja erzählen, was es für ein Gefühl ist, wenn dein Projekt, das du über mehrere Wochen und Monate auf die Beine gestellt hast, binnen Sekunden von der Platte geputzt wurde.
Aber da es ja so unheimlich mega wichtig zu sein scheint,
Ist es!
noch 2 Seiten dazu:
Keine Ahnung, was dein Beitrag aussagen soll, wenn du dann doch noch 2 Quellen zum Umgang mit SQL-Injection postest.
 
Werbung:
Ich denke mal das er damit sagen will das die SQL injection nicht viel mit dem ursprünglichen Problem zu tun hat.
Ich für meinen Teil fand es dennoch interressant und Hilfreich auch wenn mich das dem Problem nicht näher gebraht hat.

Grüsse Richard
 
Guck, wir lösen sogar Probleme, von denen du nicht wusstest, dass du sie hast. ;)

Nein, im Ernst, Escaping zum Schutz vor SQL Injections ist nichts, wo es irgendwas zu diskutieren gäbe. Es nicht zu tun, ist in hohem Maße fahrlässig.

CWE - 2010 CWE/SANS Top 25 Most Dangerous Programming Errors

Platz 1: Fehlendes Escaping bei HTML-Ausgaben
Platz 2: Fehlendes Escaping bei SQL-Queries

Code zu schreiben, der (am Ende gar zufällig) irgendwie läuft, ist nicht alles.
 
Zurück
Oben