Zur Navigation

Verwendung von ">=" in Datenbankabfrage [3]

21 andehrl

tag, Monat und jahr sind aber drei verschiedene felder. wenn ich alle drei als typ "date" definiere bekomme ich dreimal 0000.00.00 in der datenbank und entsprechend wird mir bei einer abfrage dann auch dass ergebnis angezeigt.
????

27.09.2010 16:36

22 Jörg Kruse

Ich würde für das Datum ein Datenfeld in der Datenbank anlegen. Wenn du im Formular drei Eingabefelder hast, kannst du die Werte vor der Datenbankquery im passenden Datumsformat zusammenfassen, z.B. so:

$datum = sprintf("%04d-%02d-%02d", $_POST['jahr'], $_POST['monat'], $_POST['tag']);

27.09.2010 17:01 | geändert: 27.09.2010 17:02

23 andehrl

ok, das hört sich gut und unkompliziert an. ich hab in der datenbank das feld "datum" als typ "date" angelegt. mir ist jetzt allerdings nicht klar wo ich den von dir beschriebenen code in den jeweiligeen seitencode eintrage.

ich habe hier den code der eingabeseite:

<?php require_once('Connections/Eingabe.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $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;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache suche")) {
  $insertSQL = sprintf("INSERT INTO Eingabe (abfahrtsort, zielort, tag, monat, jahr, stunde, `minute`, hinfahrtladeflaeche, hilfeeinausladen, rueckfahrt, rueckfahrtladeflaeche, preis, nutzername, mail, handy, tel) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['abfahrtsort'], "text"),
                       GetSQLValueString($_POST['zielort'], "text"),
                       GetSQLValueString($_POST['tag'], "int"),
                       GetSQLValueString($_POST['monat'], "int"),
                       GetSQLValueString($_POST['jahr'], "int"),
                       GetSQLValueString($_POST['stunde'], "int"),
                       GetSQLValueString($_POST['minute'], "int"),
                       GetSQLValueString($_POST['hinfahrtladeflaeche'], "text"),
                       GetSQLValueString($_POST['hilfeeinausladen'], "text"),
                       GetSQLValueString($_POST['rueckfahrt'], "text"),
                       GetSQLValueString($_POST['rueckfahrtladeflaeche'], "text"),
                       GetSQLValueString($_POST['preis'], "text"),
                       GetSQLValueString($_POST['nutzername'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['handy'], "text"),
                       GetSQLValueString($_POST['tel'], "text"));

  mysql_select_db($database_Eingabe, $Eingabe);
  $Result1 = mysql_query($insertSQL, $Eingabe) or die(mysql_error());

  $insertGoTo = "Danke.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

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;
}
}
?>

dann der code der suchseite:

<?php require_once('Connections/Eingabe.php'); ?>
<?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;
}
}

mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = "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 ";
$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'Abfahrtsort') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($colname_R1, 'text') . " AND ";
}
$colname1_R1 = "KEIN EINTRAG";
if (isset($_POST['zielort']) && $_POST['zielort'] != 'Zielort') {
   $query_R1 .= " zielort  = " . GetSQLValueString($colname1_R1, 'text') . " AND ";
}
$colname2_R1 = "NULL";
if (isset($_POST['tag']) && $_POST['tag'] != '-') {
    $query_R1 .= " tag = " . GetSQLValueString($colname2_R1, 'int') . " AND ";
}
$colname4_R1 = "NULL";
if (isset($_POST['jahr']) && $_POST['jahr'] != '-') {
    $query_R1 .= " jahr = " . GetSQLValueString($colname4_R1, 'int') . " AND ";
}
$colname3_R1 = "NULL";
if (isset($_POST['monat']) && $_POST['monat'] != '-') {
    $query_R1 .= " monat = " . GetSQLValueString($colname3_R1, 'int') . " AND ";
}
$colname5_R1 = "NULL";
if (isset($_POST['stunde']) && $_POST['stunde'] != '-') {
    $query_R1 .= " stunde = " . GetSQLValueString($colname5_R1, 'int') . " AND ";
}
$colname7_R1 = "NULL";
if (isset($_POST['hinfahrtladeflaeche']) && $_POST['hinfahrtladeflaeche'] != 'Angaben zur Ladefläche') {
    $query_R1 .= " hinfahrtladeflaeche = " . GetSQLValueString($colname7_R1, 'text') . " AND ";
}
$query_R1 .= "1 ORDER BY Eingabe.monat, Eingabe.tag, Eingabe.stunde, Eingabe.`minute`";
$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'];
}

?>

und natürlich die ergebnisseite:

<?php require_once('Connections/Eingabe.php'); ?>
<?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;
}
}

$maxRows_R1 = 20;
$pageNum_R1 = 0;
if (isset($_GET['pageNum_R1'])) {
  $pageNum_R1 = $_GET['pageNum_R1'];
}
$startRow_R1 = $pageNum_R1 * $maxRows_R1;
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = "SELECT * FROM Eingabe WHERE ";
$colname_R1 = "KEIN EINTRAG";
if (isset($_POST['abfahrtsort']) && $_POST['abfahrtsort'] != 'Abfahrtsort') {
    $query_R1 .= " abfahrtsort = " . GetSQLValueString($_POST['abfahrtsort'], 'text') . " AND ";
}
if (isset($_POST['zielort']) && $_POST['zielort'] != 'Zielort') {
   $query_R1 .= " zielort  = " . GetSQLValueString($_POST['zielort'], 'text') . " AND ";
}
if (isset($_POST['tag']) && $_POST['tag'] != '-') {
    $query_R1 .= " tag = " . GetSQLValueString($_POST['tag'], 'int') . " AND ";
}
if (isset($_POST['jahr']) && $_POST['jahr'] != '-') {
    $query_R1 .= " jahr = " . GetSQLValueString($_POST['jahr'], 'int') . " AND ";
}
if (isset($_POST['monat']) && $_POST['monat'] != '-') {
    $query_R1 .= " monat = " . GetSQLValueString($_POST['monat'], 'int') . " AND ";
}
if (isset($_POST['stunde']) && $_POST['stunde'] != '-') {
    $query_R1 .= " stunde = " . GetSQLValueString($_POST['stunde'], 'int') . " AND ";
}
if (isset($_POST['hinfahrtladeflaeche']) && $_POST['hinfahrtladeflaeche'] != 'Angaben zur Ladefläche') {
    $query_R1 .= " hinfahrtladeflaeche = " . GetSQLValueString($_POST['hinfahrtladeflaeche'], 'text') . " AND ";
}
$query_R1 .= "1 ORDER BY Eingabe.monat, Eingabe.tag, Eingabe.stunde, Eingabe.`minute`";
$query_limit_R1 = sprintf("%s LIMIT %d, %d", $query_R1, $startRow_R1, $maxRows_R1);
$R1 = mysql_query($query_limit_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);

if (isset($_GET['totalRows_R1'])) {
  $totalRows_R1 = $_GET['totalRows_R1'];
} else {
  $all_R1 = mysql_query($query_R1);
  $totalRows_R1 = mysql_num_rows($all_R1);
}
$totalPages_R1 = ceil($totalRows_R1/$maxRows_R1)-1;

$currentPage = $_SERVER["PHP_SELF"];

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;
}
}

$maxRows_R1 = 20;
$pageNum_R1 = 0;
if (isset($_GET['pageNum_R1'])) {
  $pageNum_R1 = $_GET['pageNum_R1'];
}
$startRow_R1 = $pageNum_R1 * $maxRows_R1;

$colname6_R1 = "NULL";
if (isset($_POST['minute'])) {
  $colname6_R1 = $_POST['minute'];
}
$colname7_R1 = "NULL";
if (isset($_POST['hinfahrtladeflaeche'])) {
  $colname7_R1 = $_POST['hinfahrtladeflaeche'];
}
$colname5_R1 = "NULL";
if (isset($_POST['stunde'])) {
  $colname5_R1 = $_POST['stunde'];
}
$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 = "NULL";
if (isset($_POST['tag'])) {
  $colname2_R1 = $_POST['tag'];
}
$colname3_R1 = "NULL";
if (isset($_POST['monat'])) {
  $colname3_R1 = $_POST['monat'];
}
$colname4_R1 = "NULL";
if (isset($_POST['jahr'])) {
  $colname4_R1 = $_POST['jahr'];
}

$queryString_R1 = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_R1") == false && 
        stristr($param, "totalRows_R1") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_R1 = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_R1 = sprintf("&totalRows_R1=%d%s", $totalRows_R1, $queryString_R1);
?>

27.09.2010 18:23

24 Jörg Kruse

$insertSQL ist hier die Query, mit welcher die Daten in die Datenbank gespeichert werden - was u.a. an dem "INSERT INTO" erkenntlich ist (und an dem Namen $insertSQL)

Die Query kannst du so anpassen:

  $insertSQL = sprintf("INSERT INTO Eingabe (abfahrtsort, zielort, datum, stunde, `minute`, hinfahrtladeflaeche, hilfeeinausladen, rueckfahrt, rueckfahrtladeflaeche, preis, nutzername, mail, handy, tel) 
                       VALUES (%s, %s, '%04d-%02d-%02d', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['abfahrtsort'], "text"),
                       GetSQLValueString($_POST['zielort'], "text"),
                       GetSQLValueString($_POST['jahr'], "int"),
                       GetSQLValueString($_POST['monat'], "int"),
                       GetSQLValueString($_POST['tag'], "int"),
                       GetSQLValueString($_POST['stunde'], "int"),
                       GetSQLValueString($_POST['minute'], "int"),
                       GetSQLValueString($_POST['hinfahrtladeflaeche'], "text"),
                       GetSQLValueString($_POST['hilfeeinausladen'], "text"),
                       GetSQLValueString($_POST['rueckfahrt'], "text"),
                       GetSQLValueString($_POST['rueckfahrtladeflaeche'], "text"),
                       GetSQLValueString($_POST['preis'], "text"),
                       GetSQLValueString($_POST['nutzername'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['handy'], "text"),
                       GetSQLValueString($_POST['tel'], "text"));

27.09.2010 19:38 | geändert: 27.09.2010 19:40

25 andehrl

hab den code geändert. sieht jetzt so aus:

  $insertSQL = sprintf("INSERT INTO Eingabe (abfahrtsort, zielort, datum, stunde, `minute`, hinfahrtladeflaeche, hilfeeinausladen, rueckfahrt, rueckfahrtladeflaeche, preis, nutzername, mail, handy, tel) VALUES (%s, %s, '%04d-%02d-%02d', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['abfahrtsort'], "text"),
                       GetSQLValueString($_POST['zielort'], "text"),
                       GetSQLValueString($_POST['tag'], "int"),
                       GetSQLValueString($_POST['monat'], "int"),
                       GetSQLValueString($_POST['jahr'], "int"),
                       GetSQLValueString($_POST['stunde'], "int"),
                       GetSQLValueString($_POST['minute'], "int"),
                       GetSQLValueString($_POST['hinfahrtladeflaeche'], "text"),
                       GetSQLValueString($_POST['hilfeeinausladen'], "text"),
                       GetSQLValueString($_POST['rueckfahrt'], "text"),
                       GetSQLValueString($_POST['rueckfahrtladeflaeche'], "text"),
                       GetSQLValueString($_POST['preis'], "text"),
                       GetSQLValueString($_POST['nutzername'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['handy'], "text"),
                       GetSQLValueString($_POST['tel'], "text"));

  mysql_select_db($database_Eingabe, $Eingabe);
  $Result1 = mysql_query($insertSQL, $Eingabe) or die(mysql_error());


bekomme dann diese fehlermeldung:

Warning: sprintf() [function.sprintf]: Too few arguments in /is/htdocs/wp10548565_XUUKREW8G9/www/6cEingabeEinfacheAngaben.php on line 50
Query was empty

zeile 50 ist diese:

GetSQLValueString($_POST['tel'], "text"));

27.09.2010 20:00

26 Jörg Kruse

Der Datumsstring "'%04d-%02d-%02d'" muss die vormaligen Strings ("%s") 3 bis 5 ersetzen; so sollte es von der Anzahl wohl hinkommen:

$insertSQL = sprintf("INSERT INTO Eingabe (abfahrtsort, zielort, datum, stunde, `minute`, hinfahrtladeflaeche, hilfeeinausladen, rueckfahrt, rueckfahrtladeflaeche, preis, nutzername, mail, handy, tel) 
                       VALUES (%s, %s, '%04d-%02d-%02d', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",

27.09.2010 20:47

27 andehrl

die daten werden jetzt abgeschickt ohne fehlermeldung, kommen aber in der datenbank nicht an. das feld "datum" zeigt 0000-00-00.

27.09.2010 20:57

28 Jörg Kruse

Das entspricht nicht der Reihenfolge in '%04d-%02d-%02d' (siehe auch meinen Code in Beitrag 24):

                        GetSQLValueString($_POST['tag'], "int"),
                       GetSQLValueString($_POST['monat'], "int"),
                       GetSQLValueString($_POST['jahr'], "int"),

27.09.2010 21:07 | geändert: 27.09.2010 21:08

29 andehrl

ok,jetzt kommen die daten an. aber wie muss ich den code in der suchseite und ergebnisseite ändern? in der suchseite sind tag, monat und jahr auch in einzele suchfelder unterteilt in der ergebnisseite natürlich auch (s. beitrag 23).

27.09.2010 21:23

30 Jörg Kruse

Diesen Aschnitt musst du zusammenfassen:

if (isset($_POST['tag']) && $_POST['tag'] != '-') {
    $query_R1 .= " tag = " . GetSQLValueString($_POST['tag'], 'int') . " AND ";
}
if (isset($_POST['jahr']) && $_POST['jahr'] != '-') {
    $query_R1 .= " jahr = " . GetSQLValueString($_POST['jahr'], 'int') . " AND ";
}
if (isset($_POST['monat']) && $_POST['monat'] != '-') {
    $query_R1 .= " monat = " . GetSQLValueString($_POST['monat'], 'int') . " AND ";
}

so in etwa:

if (isset($_POST['tag'], $_POST['jahr'], $_POST['monat']) && $_POST['tag'] != '-' && $_POST['jahr'] != '-' && $_POST['monat'] != '-') {
    $query_R1 .= " datum >= '" . sprintf("%04d-%02d-%02d", $_POST['jahr'], $_POST['monat'], $_POST['tag']) . "' AND ";
}

28.09.2010 13:38