Hallo php.de-Community!
Ich stoße als Neuling mal dazu - meine Kenntnisse sind ein wenig fortgeschritten.
Hier zu meinem Problem:
Ich habe 3 HTML-Dropdown-Menüs, deren eingestellte Werte mit dem Button an das PHP-Skript übergeben werden sollen.
Mit EINEM Wert funktioniert das auch, allerdings nicht mehreren.
Eigentlich ist es logisch, denn der Button übergibt wahrscheinlich auch nur einen Wert.
Das Problem ist: Ich weiß leider nicht, wie ich es anders umsetzen soll.
Hier mal der Code:
Wie gesagt, mit einem Wert (also nur Country) funktioniert es;
der Ablauf sieht dann so aus:
1. Ich wähle "Afghanistan" aus dem Dropdown-Menü aus.
2. Der "book"-Wert wird per Button als POST-Variable gesendet.
3. Der case 'book' wird ausgeführt.
4. Die SQL-Abfrage wird erzeugt und dann wird die while-Schleife ausgeführt und gibt die Daten aus.
Das funktioniert aber nur deshalb, weil diese SQL-Abfrage auch nur auf einen Übergabewert zugeschnitten ist:
$result = $mysqli->query("SELECT * FROM alldata WHERE country = '{$_POST['book']}' AND number > 500 ORDER BY number");
Ich möchte dieses fett markierte AND number > 500 ja ersetzen, indem ein zweiter Wert übergeben wird. Nämlich der aus dem zweiten Dropdown-Menü "Year".
Die SQL-Abfrage sollte dann so aussehen:
$result = $mysqli->query("SELECT * FROM alldata WHERE country = '{$_POST['book']}' AND year = '{$_POST['year']}' ORDER BY number");
Ich weiß jetzt aber nicht, wie ich das umsetzen soll.
Muss ein zweiter bzw. dritter case definiert werden?
Ein Merkmal ist noch, dass in dem einen Dropdown-Menü der name "book" heißt und nicht "country".
Ich hab schon sehr viel versucht - Codeteile verschoben, andere Variablen ausprobiert, aber es hakt schon allein daran, dass ich nicht weiß, wie ich die Werte aus den Dropdown überhaupt richtig verknüpfe, um die SQL-Abfrage mit drei Werten gleichzeitig durch Drücken eines Buttons auszuführen.
Auch schon überall gesucht, aber ich finde leider häufig nur, wie man Werte aus der DB direkt in das Menü einliest. Also nichts richtiges für mein Problem.
Ich bin für jede Hilfe dankbar.
Am hilfreichsten wäre es, wenn jemand mir ein funktionsfähiges Muster gibt, wie so eine Abfrage mit mehreren Bedingungen aussieht.
PS: Ich weiß, dass der Code nicht ganz das Gelbe vom Ei ist bzw. anfällig ist für SQL-Injection.
Das wird hinterher ausgebügelt, sobald das ganze Zeug lauffähig ist. Soll ja auch vorderhand nicht published werden.
Grüße
Ich stoße als Neuling mal dazu - meine Kenntnisse sind ein wenig fortgeschritten.
Hier zu meinem Problem:
Ich habe 3 HTML-Dropdown-Menüs, deren eingestellte Werte mit dem Button an das PHP-Skript übergeben werden sollen.
Mit EINEM Wert funktioniert das auch, allerdings nicht mehreren.
Eigentlich ist es logisch, denn der Button übergibt wahrscheinlich auch nur einen Wert.
Das Problem ist: Ich weiß leider nicht, wie ich es anders umsetzen soll.
Hier mal der Code:
Code:
<td>
<form action="http://localhost/country.php" class="tfsearch" method="post">
<B><Font Color=white>Country:</font></b>
<select name="book">
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="Andorra">Andorra</option>
<option value="Angola">Angola</option>
</select>
<B><Font Color=white>Number:</font></b>
<select name="number">
<option value="10">1-10</option>
<option value="20">11-20</option>
<option value="30">21-30</option>
<option value="50">31-50</option>
</select>
<B><Font Color=white>Year:</font></b>
<select name="year">
<option value="1950">1900-1950</option>
<option value="1970">1951-1970</option>
</select>
<input type="hidden" name="action" value="book" />
<input type="submit" value="Suchen" />
</form>
PHP-Code:
<?php
include('database.inc.php');
$book_country = $_SESSION['book_country'];
$book_number = $_SESSION['book_number'];
$book_year = $_SESSION['book_year'];
unset($error);
if (
($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['action']))
||
($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['action'])))
{
switch ($_REQUEST['action'])
{
case 'book':
[B]$result = $mysqli->query("SELECT * FROM alldata WHERE country = '{$_POST['book']}' AND number > 500 ORDER BY number");[/B]
$seven = $mysqli->query("SELECT table FROM alldata
WHERE country = '{$_POST['book']}'");
if ($result->num_rows >= 1)
{
$abc = $seven->fetch_assoc();
echo "
<div class=\"review\" id=\"dw\">
<B>The following data belong to country <font color=\"red\"> ".$abc['country']." </font>:</B><BR>
</div>";
while ($arr = $result->fetch_assoc()) {
echo "
<div class=\"review\" id=\"dw\">
<table class=\"sng\" cellpadding=\"1\" cellspacing=\"0\">
<col width=\"100\">
<col width=\"300\">
<col width=\"300\">
<col width=\"100\">
<col width=\"100\">
<tbody>
<tr>
<th>Country</th>
<th>Number</th>
<th>Year</th>
</tr>";
$book_country = $arr['country'];
$book_number = $arr['number'];
$book_year = $arr['year'];
echo "
<tr id=\"1\" bgcolor=\"#f5f5f5\">
<td>
<form action=\"http://localhost/country.php?countryid=".$arr['countryid']."\" method=\"post\">
<input type=\"hidden\" name=\"action\" value=\"book\" />
<input type=\"submit\" name=\"book\" value=\"".$arr['countryid']."\" />
</form>
</td>
<td>".$arr['country']."</td>
<td>".$arr['number']."</td>
<td>".$arr['year']."</td>
</tr>
</tbody>
</table>
</div>";
}
$result->close();
}
}
}
?>
der Ablauf sieht dann so aus:
1. Ich wähle "Afghanistan" aus dem Dropdown-Menü aus.
2. Der "book"-Wert wird per Button als POST-Variable gesendet.
3. Der case 'book' wird ausgeführt.
4. Die SQL-Abfrage wird erzeugt und dann wird die while-Schleife ausgeführt und gibt die Daten aus.
Das funktioniert aber nur deshalb, weil diese SQL-Abfrage auch nur auf einen Übergabewert zugeschnitten ist:
$result = $mysqli->query("SELECT * FROM alldata WHERE country = '{$_POST['book']}' AND number > 500 ORDER BY number");
Ich möchte dieses fett markierte AND number > 500 ja ersetzen, indem ein zweiter Wert übergeben wird. Nämlich der aus dem zweiten Dropdown-Menü "Year".
Die SQL-Abfrage sollte dann so aussehen:
$result = $mysqli->query("SELECT * FROM alldata WHERE country = '{$_POST['book']}' AND year = '{$_POST['year']}' ORDER BY number");
Ich weiß jetzt aber nicht, wie ich das umsetzen soll.
Muss ein zweiter bzw. dritter case definiert werden?
Ein Merkmal ist noch, dass in dem einen Dropdown-Menü der name "book" heißt und nicht "country".
Ich hab schon sehr viel versucht - Codeteile verschoben, andere Variablen ausprobiert, aber es hakt schon allein daran, dass ich nicht weiß, wie ich die Werte aus den Dropdown überhaupt richtig verknüpfe, um die SQL-Abfrage mit drei Werten gleichzeitig durch Drücken eines Buttons auszuführen.
Auch schon überall gesucht, aber ich finde leider häufig nur, wie man Werte aus der DB direkt in das Menü einliest. Also nichts richtiges für mein Problem.
Ich bin für jede Hilfe dankbar.
Am hilfreichsten wäre es, wenn jemand mir ein funktionsfähiges Muster gibt, wie so eine Abfrage mit mehreren Bedingungen aussieht.
PS: Ich weiß, dass der Code nicht ganz das Gelbe vom Ei ist bzw. anfällig ist für SQL-Injection.
Das wird hinterher ausgebügelt, sobald das ganze Zeug lauffähig ist. Soll ja auch vorderhand nicht published werden.
Grüße
Kommentar