checkbox abfrage sql php - geht nicht

sandroP

Erfahrenes Mitglied
hallo, ich bin neuling

-wenn ich nur nach preis abfrage funktioniert alles.
-sobald ich aber die checkbox mitabfrage kommt folgendes:

Notice: Undefined index: ort in C:\Apache2\htdocs\programme\ud08.php on line 10

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Apache2\htdocs\programme\ud08.php on line 14
keine passenden Datensätze gefunden
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Apache2\htdocs\programme\ud08.php on line 24

was mache ich falsch? das ganze soll ein umfangreichers Abfrage Formular werden.
__________________________________________________________________
Mein Abfrage Formular:
<html>
<body>
Anzeige der Unterkünfte mit einem Preis zwischen:
<form action = "ud08.php" method = "post">




<p>Preis bis: <select name="preis" size="1">
<option value="99999999">egal</option>
<option value="10">bis 10 Euro</option>
<option value="20">bis 20 Euro</option>
<option value="30">bis 30 Euro</option>
<option value="40">bis 40 Euro</option>
<option value="50">bis 50 Euro</option>
<option value="75">bis 75 Euro</option>
<option value="100">bis 100 Euro</option>
<option value="150">bis 150 Euro</option>
<option value="200">bis 200 Euro</option>
</select></p>


<p>Bitte kreuzen Sie die Gewünschten Orte an: &nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="ort" value="Lindau">Lindau &nbsp;<input type="checkbox" name="ort" value="Meersburg">Meersburg</p>


<input type = "submit">
<input type = "reset">
</form>
</body>
</html>

__________________________________________


Meine PHP Abfrage:

<html>
<body>
<?php

mysql_connect();
mysql_select_db("firma");

$sqlab = "select name, infoseite, bild, typ, sterne, ort, preis, beschreibung from gastgeber";
$sqlab .= " where preis <= " . $_POST["preis"] ;
$sqlab .= " where ort == " . $_POST["ort"] ;
$sqlab .= " order by preis";

$res = mysql_query($sqlab);
$num = mysql_num_rows($res);
if ($num==0) echo "keine passenden Datensätze gefunden";


// Tabellenbeginn
echo "<table border='0' bgcolor='#FEF08D' >";


// Tabelleninhalt

while ($zeile = mysql_fetch_assoc($res))
{
echo "<tr>";
// Überschrift
echo "<tr bgcolor='#F1D247'> <td align='center' valign='middle'><b>$zeile[typ] $zeile[name]</b></td> <td align='center'>Preis ab: $zeile[preis] € &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $zeile[sterne]</td> <td align='center'>Ort: $zeile[ort]</td></tr>";

// Inhalt
echo '<td align="center" valign="middle" bgcolor="#FEF08D"><img src="'.$zeile['bild'].'" width="150" height="100"></td>';
echo "<td align='center' valign='middle' bgcolor='#FEF08D' width='300'>$zeile[beschreibung]</td>";
echo '<td align="center" valign="middle" bgcolor="#FEF08D"><a href="'.$zeile['infoseite'].'">Infoseite</a></td>';
echo "</tr>";
}
// Tabellenende
echo "</table>";

?>
</body>
</html>




Danke für eure mühe, bin ja mal gespannt
 
Hi,

wenn eine Checkbox nicht gewählt ist, kommt die Variable auch auf dem Server nicht an.
Deshalb grundsätzlich $_POST und $_GET Variablen am Scriptanfang deklarieren um Fehler zu vermeiden. Weiterhin ist der SQL Syntax fehlerhaft:

PHP:
<?php

// deklaration/definition der Variablen
$preis = isset($_POST["preis"]) ? $_POST["preis"] : null;
$ort = isset($_POST["ort"]) ? $_POST["ort"] : null;

mysql_connect();
mysql_select_db("firma");

$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";
$sqlab .= " AND ort = '".$ort."'";

...

?>

Auch sollte die Angabe des Ortes wahrscheinlich Pflicht sein, ansonsten ist in der SQL Bedingen ein "leerer" Ort vorausgesetzt.

Würde bedeuten, dass Du die Variable $ort auf Inhalt prüfen mußt:
PHP:
if(!empty($ort)){
   // sql/script ...
}
else{
    echo "Bitte Ort waehlen!";
}

Gruß tyg3r
 
Zuletzt bearbeitet:
ok, das funktioniert mal soweit. - Danke-

es gibt jetzt aber das problem:

wenn ich beide checkboxen auswähle, wird in der suche nur die zweite (Meersburg)
berücksichtigt.

-es sollen aber auch mehrere orte ausgewählt werden können.



danke für die bisherige hilfe.

Sandro
 
Hi,

da Du für die Checkboxen den gleichen Namen verwendest, überschreibt die Letzte die vorherigen Checkboxen. Dazu mußt Du dann ein Array anlegen:

HTML:
<input type="checkbox" name="ort[]" value="Lindau"> Lindau
<input type="checkbox" name="ort[]" value="Meersburg"> Meersburg

Im PHP sind dann Änderungen beim Erzeugen der SQL notwendig:

PHP:
$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";

foreach($ort AS $_value){
    if($_value!=''){
        $sqlab .= " AND ort = '".$_value."'";
    }
}

Gruß tyg3r
 
hallo,

also wenn der ort leer ist, bringt er mir die Meldung -bitte Ort...- das geht also.

aber das mit der checkbox funktioniert noch nicht. ist es einfacher wenn ich jeder bod einen extra namen gebe?
-was für einen TYP wähle ich im SQL aus?

gruss Sandro
 
Ist sicher besser/einfacher über ein Array, also nicht eigene Namen geben. Nur so kannst du eine Schleife verwenden und dein Skript bleibt übersichtlich und kürzer.

Da ich mal annehme du möchtest alle Werte die einem der Orte entsprechen anzeigen möchtet, müsstest du dann durch ein OR verknüpfen

PHP:
$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";
$sqlab .= " AND(0";
foreach($ort AS $_value){
    if($_value!=''){
        $sqlab .= " OR ort = '".$_value."'";
    }
$sqlab .= ")";
}

Datentyp ist ein String also VARCHAR würde ich verwenden.
 
Zuletzt bearbeitet:
Und was kommt da raus?

"AND ( OR ort = "bla") OR ort = "blubb" ) OR ort = "lalala" )"
:rolleyes:
PHP:
$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";
$sqlab .= " AND(";
foreach($ort AS $key => $_value){
    if( !empty( $_value ) ) {
        $sqlab .= ($key>0?" OR":"")." ort = '".$_value."'";
    }
}
$sqlab .= ")";

So wird das " OR" nur vorran gestellt, wenn es sich mindestens um den zweiten Arrayeintrag handelt.
 
funktioniert

super Danke


im augenblick werden meine daten gleich per "order by" sortiert,
kann ich das auch erst nach der ausgabe machen?

praktisch so:

sortieren nach: //hier über radio sortieren lassen und mit submit abschicken
// hier seht die ausgabe tabelle
 
Und was kommt da raus?

"AND ( OR ort = "bla") OR ort = "blubb" ) OR ort = "lalala" )"
:rolleyes:

Also es wäre herausgekommen
AND (0 OR Ort="blabla" OR Ort ="lala")
Da 0 immer falsch ist, würde der selbe Effekt entstehen, wäre interessant welche Methode effizienter ist( 1mal SQL OR oder in der Schleife jedesmal die Bedingung)
aber wie auch immer.
 
Also es wäre herausgekommen
AND (0 OR Ort="blabla" OR Ort ="lala")
Da 0 immer falsch ist, würde der selbe Effekt entstehen, wäre interessant welche Methode effizienter ist( 1mal SQL OR oder in der Schleife jedesmal die Bedingung)
aber wie auch immer.
Stimmt, so weit habe ich gar nicht gedacht, da ich solchem Gebastel nich leiden kann. :)
Die schließende Klammer war dennoch falsch gesetzt.
Der Performanceunterschied dürfte bei so einer simplen Abfrage (in PHP, sowie in MySQL) imho erst ab ein paar tausend Abfragen merkbar werden (zum Nachteil von PHP), wenn überhaupt.

:)
 
Zurück