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

Wie kann folgendes realisiert werden?

Das Auslesen will einfach nicht funktionieren. Im Browser müsste doch das Bundesland angezeigt werden das Ausgewählt wurde, aber ich kriege einfach nur eine leere Seite.:(
Egal ob mit value oder ohne, bei der GET-Methode wird meine Auswahl zum Beispiel im Link oben angezeigt. Aber POST funktioniert nicht.
 
So jetzt habe ich wiede rmal eine Frage :p^^

Ich habe mir ein Formular angelegt und eine mysql Datenbank.
Wenn ich ein normales select Formular mit der Datenbank abgleiche und dann die Werte ausgebe funktioniert es.
Wenn ich allerdings ein multiple select Formular mit der Datenbank abgleichen will und die Werte auslesen will, funktioniert es nicht.

Ich weiß das bei einem multiple select Formular die Daten an ein Array übergeben werde. Ich denke mal darin besteht das Problem.
Nur leider habe ich durch etliche Recherchen nicht herausgefunden was ich in den php-Code schrieben muss damit er das richtige ausgibt.

Hier die Codes:

Formular:
Code:
<body> 
<form method="post" action="ausgabe.php">
<select multiple size="5" name="selectbundesland[]">
<option value="Schleswig-Holstein">Schleswig-Holstein</option>
<option value="Bayern">Bayern</option>
<option value="Mecklenburg-Vorpommern">Mecklenburg-Vorpommern</option>
<option value="Thüringen">Thüringen</option>
<option value="Hamburg">Hamburg</option>
<option value="Berlin">Berlin</option>
<option value="Baden-Württemberg">Baden-Württemberg</option>
<option value="Saarland">Saarland</option>
<option value="Rheinland-Pfalz">Rheinland-Pfalz</option>
<option value="Hessen">Hessen</option>
<option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
<option value="Thüringen">Thüringen</option>
<option value="Sachsen">Sachsen</option>
<option value="Bremen">Bremen</option>
<option value="Niedersachsen">Niedersachsen</option>
<option value="Brandenburg">Brandenburg</option>
</select>
<input type="submit" name="button1" value="Absenden">
</form>

Und die ausgabe.php
Code:
<?php
mysql_connect ("localhost", "root","")  or die (mysql_error());
mysql_select_db ("test");
 


$term = $_POST['selectbundesland'];
 
$sql = mysql_query("select * from testtabelle where bundesland like '$term'");
 
while ($row = mysql_fetch_array($sql)){
   echo $row[0].'<br />';
   }
?>

Hierbei erhalte ich also eine weiße Seite.
Wenn ich die ausgabe für ein select Formular ohne multiple verwende funktioniert es einwandfrei.

Ich hoffe ihr könnt mir helfen.
Vielen Dank schon mal!
 
Was wollt ihr nur immerzu mit LIKE, wenn ihr = meint? Das bist längst nicht nur du, aber ich finde das immer wieder seltsam.

- MySQL :: MySQL 5.6 Reference Manual :: 11.5.1 String Comparison Functions

LIKE ist ein Operator zur Mustererkennung. Die Anwendung ist viel komplizierter als die des einfachen Vergleichsoperators. Wie kommt man zuerst auf die kompliziertere Lösung?

Dein Script ist zudem anfällig für SQL-Injection.

Eine mögliche Lösung:

PHP:
<?php

if (count($_POST) > 0) {

    mysql_connect('a', 'b', 'c');

    $escaped = array();

    foreach ($_POST['selectbundesland'] as $bl) {
        $escaped[] = mysql_real_escape_string($bl);
    }

    $q = "
        SELECT
                `col1`, `col2`
        FROM
                `table`
        WHERE
                `col3` IN ('". implode("', '", $escaped) ."')
        ";

    var_dump($q);
}

?><!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="utf-8" />
        <title>New</title>
    </head>

    <body>
        <form method="post" action="">
            <select multiple size="5" name="selectbundesland[]">
                <option value="Schleswig-Holstein">Schleswig-Holstein</option>
                <option value="Bayern">Bayern</option>
                <option value="Mecklenburg-Vorpommern">Mecklenburg-Vorpommern</option>
                <option value="Thüringen">Thüringen</option>
                <option value="Hamburg">Hamburg</option>
                <option value="Berlin">Berlin</option>
                <option value="Baden-Württemberg">Baden-Württemberg</option>
                <option value="Saarland">Saarland</option>
                <option value="Rheinland-Pfalz">Rheinland-Pfalz</option>
                <option value="Hessen">Hessen</option>
                <option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
                <option value="Thüringen">Thüringen</option>
                <option value="Sachsen">Sachsen</option>
                <option value="Bremen">Bremen</option>
                <option value="Niedersachsen">Niedersachsen</option>
                <option value="Brandenburg">Brandenburg</option>
            </select>
            <input type="submit" name="button1" value="Absenden">
        </form>
    </body>

</html>

Edit:

Noch kurz zu dem LIKE: Schön sind immer diese Queries:

Code:
SELECT * FROM `users` WHERE `name` LIKE '$name' AND `password` LIKE '$password'

Wenn $name auf 'admin' und $password auf '%' gesetzt wird, ist man als Nutzer admin eingeloggt, ohne das Passwort wissen zu müssen.
 
Zuletzt bearbeitet:
Vielen Dank für die Antwort.
ich habe das jetzt versucht mit meinen Datenbank-Werten etc zu füllen, aber ich kriege das nicht ganz hin.
Kannst du deinen Code noch ein bisschen erklären? Wäre extrem net von dir.
 
So, ich habe mir jetzt einen Code gebastelt mit dem es funktioniert.

Jetzt stellt sich wieder eine neue Frage^^

Ich habe ja jetzt EINEN Filter, was ist wenn ich z.B. 3 Filter habe und nur das angezeigt bekommen möchte das allen 3 Filterkriterien entspricht?
Hat da wer nen schlagwort worüber ich mich informieren muss oder ein Beispiel-Code parat?
 
das allen 3 Filterkriterien entspricht?

Dann schreibst du das in deine Where Klausel.
Code:
SELECT * FROM tabelle WHERE Ort='Hamburg' AND Familienstand='verheirated' AND Nachname="Müller"

würde dann alle Müller in Hamburg filtern, die verheirated sind.
 
html
Code:
<body> 
<form method="post" action="ausgabe.php">
<select multiple size="5" name="selectbundesland[]">
<option value="Schleswig-Holstein">Schleswig-Holstein</option>
<option value="Bayern">Bayern</option>
<option value="Mecklenburg-Vorpommern">Mecklenburg-Vorpommern</option>
<option value="Thüringen">Thüringen</option>
<option value="Hamburg">Hamburg</option>
<option value="Berlin">Berlin</option>
<option value="Baden-Württemberg">Baden-Württemberg</option>
<option value="Saarland">Saarland</option>
<option value="Rheinland-Pfalz">Rheinland-Pfalz</option>
<option value="Hessen">Hessen</option>
<option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
<option value="Thüringen">Thüringen</option>
<option value="Sachsen">Sachsen</option>
<option value="Bremen">Bremen</option>
<option value="Niedersachsen">Niedersachsen</option>
<option value="Brandenburg">Brandenburg</option>
</select>
<select multiple size="2" name="selecttyp[]">
<option value="typa">typa</option>
<option value="typb">typb</option>
</select>
<select multiple size="2" name="selecttyp2[]">
<option value="Ja">Ja</option>
<option value="Nein">Nein</option>
</select>
<input type="submit" name="button1" value="Absenden"> </br>
Mehrfachauswahl mit gedrückter strg-Taste möglich
</form>
</body>

php
Code:
<?php
mysql_connect ("localhost", "root","")  or die (mysql_error());
mysql_select_db ("test");
 


$bl = $_POST['selectbundesland'];
if(is_array($bl)) 
{
  foreach($bl as $value)  




$typ = $_POST['selecttyp'];
if(is_array($typ)) 
{
  foreach($typ as $value2) 
  

$typ2 = $_POST['selecttyp2'];
if(is_array($typ2))
{
  foreach($typ2 as $value3)


$sql = mysql_query("SELECT * FROM testtabelle WHERE bundesland like '%$value%' AND typ like '%$value2%' AND typ2 like '%$value3%' ");
 
while ($row = mysql_fetch_array($sql)){
   echo $row[0].'<br />'; 
   
  }
}
}
}
?>
 
Dein PHP-Code sieht fehlerhaft aus.

Was soll das hier?

PHP:
  foreach($bl as $value)

Und hier

PHP:
$sql = mysql_query("SELECT * FROM testtabelle WHERE bundesland like '%$value%' AND typ like '%$value2%' AND typ2 like '%$value3%' ");

solltest Du die Variablen richtig einbinden und auch maskieren:

PHP:
$sql = mysql_query("SELECT * FROM testtabelle WHERE bundesland like '%".mysql_escape_string($value)."%' AND typ like '%".mysql_escape_string($value2)."%' AND typ2 like '%".mysql_escape_string($value3)."%' ");

Wenn Du nicht sicher bist, was überhaupt gesucht wird, wenn Du das ausführst, lass dir auch mal das Statement ausgeben. Ändere

PHP:
$sql = mysql_query("SELECT * FROM testtabelle WHERE bundesland like  '%".mysql_escape_string($value)."%' AND typ like  '%".mysql_escape_string($value2)."%' AND typ2 like  '%".mysql_escape_string($value3)."%' ");

in

PHP:
$query = "SELECT * FROM testtabelle WHERE bundesland like  '%".mysql_escape_string($value)."%' AND typ like  '%".mysql_escape_string($value2)."%' AND typ2 like  '%".mysql_escape_string($value3)."%' ";
echo "Statement: ".$query;
$sql = mysql_query($query);

und du wirst nach "Statement: " das Statement ausgegeben bekommen. Führe es in phpmyadmin auf deiner Datenbank aus um zu sehen was da raus kommt. Wenn etwas nicht stimmt mit dem Ergebnis aus deiner Sicht, ändere das Statement im phpmyadmin so lange bis es aus deiner Sicht stimmt.
 
Fangen wir mal mit dem HTML-Code an:

du hast folgenden
HTML:
<select multiple size="2" name="selecttyp[]"> <option value="typa">typa</option> <option value="typb">typb</option> </select> <select multiple size="2" name="selecttyp2[]"> <option value="Ja">Ja</option> <option value="Nein">Nein</option> </select>

Frage: soll man wirklich eine Mehrfachauswahl anbieten bei der nur 2 Optionen zur auswahl stehen?
Ändere auch den Namen, der derzeit ein Array ist mit vernünftigen Ausdrücken.

Zu PHP lies erst mal
PHP fr dich - if ... echo \'PHP\'; ... else ...

und schau mal was du gemacht hast. Finde den Fehler und korrigiere ihn. Vorher hat es keinen Sinn über die Where Klausel nachzudenken.
 
Zurück
Oben