Zur Navigation

suchfeld soll beim absenden nicht beachtet werden (optional)

1 andehrl

hallo zusammen,
ich habe ein suchformular mit verschiedenen suchfeldern in meiner seite. bei den feldern handelt es sich um listen/menue-felder und textfelder. wenn ich das formular abschicke funktioniert auch alles. ich bekomme also ein entsprechendes ergebnis aus der datenbank (mysql) zurück. ich habe nun das problem, dass der benutzer des suchformulars nicht gezwungen sein soll alle suchfelder zu benutzen. wenn der suchende z.b. bei einem listen/menue-feld einfach den anfangswert belässt, soll dieses listen/menue-feld beim absenden des suchformulars einfach übergangen oder ausgelassen werden. bin vollkommener neuling und hier ohne hilfe aufgeschmissen.
danke auf jeden fall für jeden rat und hilfe,
andehrl

09.09.2010 17:18

2 Jörg

Also die vorbelegten Werte sollen nicht übermittelt werden, wie z.B. ein "http://" in einem Eingabefeld für eine URL

bin vollkommener neuling

Dann wäre es vielleicht gut, ein fertiges Script an die eigenen Bedürfnisse anzupassen. Hier gibt es eines, welches allerdings nur Eingabefelder beinhaltet:

http://www.mindpalette.com/tutorials/clear_defaults/index.php

Aber das kannst du vielleicht als Grundlage nehmen

09.09.2010 18:36

3 andehrl

hallo jörg,
vielen dank für die prompte antwort. ich hab mir das von dir vorgeschlagene script angeschaut. bin mir nicht so sicher ob es das richtige ist.
ich habe z.b. ein suchfeld in dem der anwender eine stadt wählen kann. der sichtbare anfangswert des listenfeldes ist "wählen sie eine stadt". wenn der anwender den wert "wählen sie eine stadt" belässt soll die datenbank alle unter abfahrtsort eingetragenen städte als ergebnis zurücksenden, so als wäre das feld abfahrtsort als suchfilter gar nicht vorhanden. in dem von dir vorgeschlagenen srcipt wird der anfangswert "wählen sie eine stadt" gelöscht. heisst das es wird ein leerfeld verschickt? falls ja, würde dann nicht als ergebnis kein ergebnis zurück kommen?

09.09.2010 19:28

4 Jörg

wenn der anwender den wert "wählen sie eine stadt" belässt soll die datenbank alle unter abfahrtsort eingetragenen städte als ergebnis zurücksenden, so als wäre das feld abfahrtsort als suchfilter gar nicht vorhanden.

Das würde ich dann aber nicht mit JavaScript regeln, sondern in dem Script, welches das Formular serverseitig verarbeitet und die Datenbankabfrage stellt.

09.09.2010 21:03

5 andehrl

Das würde ich dann aber nicht mit JavaScript regeln, sondern in dem Script, welches das Formular serverseitig verarbeitet und die Datenbankabfrage stellt.
also jetzt bin ich dann doch zu überfordert. habe die seite mit dreamweaver erstellt und die datenbankabfrage auch mit diesem tool zuwege gebracht. ich denke das entsprechende script wäre dann das unten aufgeführte. aber was und wie muss ich das verändern oder ergänzen um mein gewünschtes resultat zu bekommen??

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort'])) {
  $colname_R1 = $_POST['abfahrtsort'];
}
$colname1_R1 = "KEIN EINTRAG";
if (isset($_POST['zielort'])) {
  $colname1_R1 = $_POST['zielort'];
}
$colname2_R1 = "KEIN EINTRAG";
if (isset($_POST['tag'])) {
  $colname2_R1 = $_POST['tag'];
}
$colname4_R1 = "KEIN EINTRAG";
if (isset($_POST['jahr'])) {
  $colname4_R1 = $_POST['jahr'];
}
$colname3_R1 = "KEIN EINTRAG";
if (isset($_POST['monat'])) {
  $colname3_R1 = $_POST['monat'];
}
$colname5_R1 = "NULL";
if (isset($_POST['stunde'])) {
  $colname5_R1 = $_POST['stunde'];
}
$colname7_R1 = "NULL";
if (isset($_POST['hinfahrtladeflaeche'])) {
  $colname7_R1 = $_POST['hinfahrtladeflaeche'];
}
$colname8_R1 = "NULL";
if (isset($_POST['hilfeeinausladen'])) {
  $colname8_R1 = $_POST['hilfeeinausladen'];
}
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = sprintf("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, Eingabe.tag, Eingabe.monat, Eingabe.jahr, Eingabe.stunde, Eingabe.`minute`, Eingabe.hinfahrtladeflaeche, Eingabe.hilfeeinausladen, Eingabe.rueckfahrt, Eingabe.rueckfahrtladeflaeche, Eingabe.beschreibung, Eingabe.preis, Eingabe.marke, Eingabe.model, Eingabe.laderaumhoehe, Eingabe.laderaumbreite, Eingabe.laderaumlaenge, Eingabe.laderaumvolumen, Eingabe.treibstoff, Eingabe.getriebe, Eingabe.tempo, Eingabe.nutzername, Eingabe.passwort, Eingabe.mail, Eingabe.handy, Eingabe.tel FROM Eingabe WHERE abfahrtsort = %s AND Eingabe.zielort  = %s AND Eingabe.tag  >= %s AND Eingabe.monat >= %s AND Eingabe.jahr >= %s AND Eingabe.stunde >= %s AND Eingabe.hinfahrtladeflaeche = %s AND Eingabe.hilfeeinausladen = %s ORDER BY Eingabe.monat, Eingabe.tag, Eingabe.stunde, Eingabe.`minute`", GetSQLValueString($colname_R1, "text"),GetSQLValueString($colname1_R1, "text"),GetSQLValueString($colname2_R1, "text"),GetSQLValueString($colname3_R1, "text"),GetSQLValueString($colname4_R1, "text"),GetSQLValueString($colname5_R1, "text"),GetSQLValueString($colname7_R1, "text"),GetSQLValueString($colname8_R1, "text"));
$R1 = mysql_query($query_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);
$totalRows_R1 = mysql_num_rows($R1);$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort'])) {
  $colname_R1 = $_POST['abfahrtsort'];
}
$colname1_R1 = "KEIN EINTRAG";
if (isset($_POST['zielort'])) {
  $colname1_R1 = $_POST['zielort'];
}
$colname2_R1 = "KEIN EINTRAG";
if (isset($_POST['tag'])) {
  $colname2_R1 = $_POST['tag'];
}
$colname4_R1 = "KEIN EINTRAG";
if (isset($_POST['jahr'])) {
  $colname4_R1 = $_POST['jahr'];
}
$colname3_R1 = "KEIN EINTRAG";
if (isset($_POST['monat'])) {
  $colname3_R1 = $_POST['monat'];
}
$colname5_R1 = "NULL";
if (isset($_POST['stunde'])) {
  $colname5_R1 = $_POST['stunde'];
}
$colname7_R1 = "NULL";
if (isset($_POST['hinfahrtladeflaeche'])) {
  $colname7_R1 = $_POST['hinfahrtladeflaeche'];
}
$colname8_R1 = "NULL";
if (isset($_POST['hilfeeinausladen'])) {
  $colname8_R1 = $_POST['hilfeeinausladen'];
}
$colname1_R1 = "KEIN EINTRAG";
if (isset($_POST['zielort'])) {
  $colname1_R1 = (get_magic_quotes_gpc()) ? $_POST['zielort'] : addslashes($_POST['zielort']);
}
$colname2_R1 = "KEIN EINTRAG";
if (isset($_POST['tag'])) {
  $colname2_R1 = (get_magic_quotes_gpc()) ? $_POST['tag'] : addslashes($_POST['tag']);
}
$colname3_R1 = "KEIN EINTRAG";
if (isset($_POST['monat'])) {
  $colname3_R1 = (get_magic_quotes_gpc()) ? $_POST['monat'] : addslashes($_POST['monat']);
}
$colname4_R1 = "KEIN EINTRAG";
if (isset($_POST['jahr'])) {
  $colname4_R1 = (get_magic_quotes_gpc()) ? $_POST['jahr'] : addslashes($_POST['jahr']);
}
$colname5_R1 = "KEIN EINTRAG";
if (isset($_POST['stunde'])) {
  $colname5_R1 = (get_magic_quotes_gpc()) ? $_POST['stunde'] : addslashes($_POST['stunde']);
}
$colname7_R1 = "NULL";
if (isset($_POST['hinfahrtladeflaeche'])) {
  $colname7_R1 = (get_magic_quotes_gpc()) ? $_POST['hinfahrtladeflaeche'] : addslashes($_POST['hinfahrtladeflaeche']);
}
$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort'])) {
  $colname_R1 = (get_magic_quotes_gpc()) ? $_POST['abfahrtsort'] : addslashes($_POST['abfahrtsort']);
}
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = sprintf("SELECT * FROM Eingabe WHERE abfahrtsort = '%s' AND Eingabe.zielort = '%s' AND Eingabe.tag >= '%s' AND Eingabe.monat >= '%s' AND Eingabe.jahr >= '%s' AND Eingabe.stunde >= '%s' AND Eingabe.hinfahrtladeflaeche = '%s' ORDER BY Eingabe.monat, Eingabe.tag, Eingabe.stunde, Eingabe.`minute`", $colname_R1,$colname1_R1,$colname2_R1,$colname3_R1,$colname4_R1,$colname5_R1,$colname7_R1);
$R1 = mysql_query($query_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);
$totalRows_R1 = mysql_num_rows($R1);
?>

[Edit Jörg: zur besseren Lesbarkeit den Code in Codetags eingefügt]

09.09.2010 21:22 | geändert von Jörg: 09.09.2010 21:46

6 Jörg

Ja, das scheint das verarbeitende Script zu sein. Ich habe es zur besseren Lesbarkeit in Codetags eingefügt (Code markieren und auf den Button "Code" klicken)

Das ist ein Abschnitt, wo der Parameter 'abfahrtsort' aufgelesen wird:

$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort'])) {
  $colname_R1 = (get_magic_quotes_gpc()) ? $_POST['abfahrtsort'] : addslashes($_POST['abfahrtsort']);
}

Du kannst die fettmarkierte Bedingung so ändern, dass auch die Vorbelegung berücksichtigt wird

if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'wählen sie eine stadt') {
will heißen: wenn der Parameter 'abfahrtsort' übermittelt wurde und nicht den Inhalt 'wählen sie eine stadt' hat

Wenn du mit JavaScript den Wert vorm Absenden leerst, ginge es möglicherweise auch so:

if (! empty($_POST['abfahrtsort'])) {
will heißen: wenn der Parameter 'abfahrtsort' nicht leer ist

09.09.2010 22:02 | geändert: 09.09.2010 22:03

7 andehrl

hab denvorgeschlagenen code eingegeben;

if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'wählen sie eine stadt') {

erhalte dann leider diese fehlermeldung

Parse error: syntax error, unexpected T_BOOLEAN_AND in /is/htdocs/wp10548565_XUUKREW8G9/www/1 home.php on line 59

09.09.2010 22:40

8 Jörg

Hast du diese Zeile damit ersetzt (?):

if (isset($_POST['abfahrtsort'])) {

09.09.2010 22:46

9 andehrl

ich habe

if (isset($_POST['abfahrtsort'])) {

mit

if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'wählen sie eine stadt') {

ersetzt

habs grad nochmal versucht und den selben code in der ergebnisseite eingefügt. bekomme jetzt zwar keine fehlermeldung mehr. das ergebnis ist aber immer noch das gleiche. kein ergebnis bei "wählen sie eine stadt" oder den gewählten abfahtsort als ergebnis.

09.09.2010 22:59

10 Jörg

Ja, diese Datenbankabfrage müsste noch angepasst werden:

$query_R1 = sprintf("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, Eingabe.tag, Eingabe.monat, Eingabe.jahr, Eingabe.stunde, Eingabe.`minute`, Eingabe.hinfahrtladeflaeche, Eingabe.hilfeeinausladen, Eingabe.rueckfahrt, Eingabe.rueckfahrtladeflaeche, Eingabe.beschreibung, Eingabe.preis, Eingabe.marke, Eingabe.model, Eingabe.laderaumhoehe, Eingabe.laderaumbreite, Eingabe.laderaumlaenge, Eingabe.laderaumvolumen, Eingabe.treibstoff, Eingabe.getriebe, Eingabe.tempo, Eingabe.nutzername, Eingabe.passwort, Eingabe.mail, Eingabe.handy, Eingabe.tel FROM Eingabe WHERE abfahrtsort = %s AND Eingabe.zielort  = %s AND Eingabe.tag  >= %s AND Eingabe.monat >= %s AND Eingabe.jahr >= %s AND Eingabe.stunde >= %s AND Eingabe.hinfahrtladeflaeche = %s AND Eingabe.hilfeeinausladen = %s ORDER BY Eingabe.monat, Eingabe.tag, Eingabe.stunde, Eingabe.`minute`", GetSQLValueString($colname_R1, "text"),GetSQLValueString($colname1_R1, "text"),GetSQLValueString($colname2_R1, "text"),GetSQLValueString($colname3_R1, "text"),GetSQLValueString($colname4_R1, "text"),GetSQLValueString($colname5_R1, "text"),GetSQLValueString($colname7_R1, "text"),GetSQLValueString($colname8_R1, "text"));

D.h. der Abschnitt mit den Bedingungen:
WHERE abfahrtsort = %s AND Eingabe.zielort  = %s AND Eingabe.tag  >= %s AND Eingabe.monat >= %s AND Eingabe.jahr >= %s AND Eingabe.stunde >= %s AND Eingabe.hinfahrtladeflaeche = %s AND Eingabe.hilfeeinausladen = %s ORDER BY Eingabe.monat, Eingabe.tag, Eingabe.stunde, Eingabe.`minute`"

.. diese müssen in Abhängigkeit davon, ob die betreffenden Parameter nicht leer sind (bzw. nicht den vorbelegten Werten entsprechen) eingefügt werden. Der Aufbau der Query Strings geht dann allerdings nicht mit sprintf() - so in etwa würde ich es versuchen:

$query_R1 = "SELECT Eingabe.id, /* und so weiter */ FROM Eingabe WHERE ";
if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'wählen sie eine stadt') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($colname_R1, "text") . " AND ";
}
if (isset($_POST['zielort']) && $_POST['zielort'] != 'wählen sie einen zielort') {
   $query_R1 .= " Eingabe.zielort  = " . GetSQLValueString($colname_R1, "text") . " AND ";
}
/* und so weiter */

PS. du hast da zwei Abfragen in deinem Code - ich weiß nicht zu welchem Zweck du zwei benötigst - die müsstest du u.U. beide anpassen

09.09.2010 23:44 | geändert: 09.09.2010 23:50