Zur Navigation

Verwendung von ">=" in Datenbankabfrage [5]

41 andehrl

die antwort wurde wohl wieder verschluckt.
ist vieleicht zu lang? vieleicht kannst den text wie schon mal wieder holen.


am ende wird auf jeden fall diese warnmeldung ausgegeben:

b>Warning</b>:  mysql_free_result(): 5 is not a valid MySQL result resource in <b>/is/htdocs/wp10548565_XUUKREW8G9/www/2cMitumzugAngeboteEinfachergebnisdetails.php</b> on line <b>719</b><br />

in der datenbank gibt es das feld "datum" im typ "date" mit null=ja und Standardwert NULL . ein eintrag ist zb. 2010-03-03

28.09.2010 19:11

42 Jörg Kruse

Zitat von andehrl
am ende wird auf jeden fall diese warnmeldung ausgegeben:

b>Warning</b>:  mysql_free_result(): 5 is not a valid MySQL result resource in <b>/is/htdocs/wp10548565_XUUKREW8G9/www/2cMitumzugAngeboteEinfachergebnisdetails.php</b> on line <b>719</b><br />

und was steht in Zeile 719 in 2cMitumzugAngeboteEinfachergebnisdetails.php?

28.09.2010 20:16

43 andehrl

Zeile 719 ist die fett gedruckte

<?php
mysql_free_result($R1);

mysql_free_result($R1);
?>

28.09.2010 20:23

44 andehrl

ich hab gerade gesehen das die query im seitencode zwei mal vorkommt:

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

$colname_R1 = "-1";
if (isset($_GET['recordID'])) {
  $colname_R1 = $_GET['recordID'];
}
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = sprintf("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%%d.%%m.%%Y') AS datum_formatiert, 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 id = %s", GetSQLValueString($colname_R1, "int"));
$R1 = mysql_query($query_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);
$totalRows_R1 = mysql_num_rows($R1);$colname_R1 = "-1";
if (isset($_GET['recordID'])) {
  $colname_R1 = $_GET['recordID'];
}
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = sprintf("SELECT * FROM Eingabe WHERE id = %s", GetSQLValueString($colname_R1, "int"));
$R1 = mysql_query($query_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);
$totalRows_R1 = mysql_num_rows($R1);
?>

warum das so ist weiß ich nicht aber das ist doch bestimmt die ursache, oder?
falls das so ist wie ich denke, kann ich den fett markierten teil einfach löschen, oder braucht die seite noch einen teil davon?

28.09.2010 20:49

45 Jörg Kruse

Ja, das solltest du löschen, die zweite Query überschreibt nämlich die erste, in der auch `datum_formatiert` ausgegeben wird

Auch das zweite "mysql_free_result($R1);" solltest du löschen, dann verschwindet auch die Warnung

28.09.2010 21:00

46 andehrl

ja, jetzt geht alles :-)

28.09.2010 21:06

47 andehrl

ich habe heute versucht die felder stunde und minute so miteinander zu verbinden wie du es mir bei den feldern tag,monat und jahr gezeigt hast. ich bekomme zwar ergebnisse, sie werden aber nicht gefiltert. ich bekomme immer die selben datensätze.

der code sieht bei mir jetzt so aus:

$query_R1 = "SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%d.%m.%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%H.%i') AS zeit_formatiert, usw.

if (isset($_POST['stunde'], $_POST['minute']) && $_POST['stunde'] != '-' && $_POST['minute'] != '-') {
    $query_R1 .= " zeit >= '" . sprintf("%02H-%02i", $_POST['stunde'], $_POST['minute']) . "' AND ";
}

<?php echo $row_R1['zeit_formatiert']; ?>

29.09.2010 18:13

48 Jörg Kruse

Syntaktisch scheint das alles OK. Die Frage ist aber vielleicht, was für Datensätze du wie filtern möchtest. Wenn man z.B. Forenbeiträge sucht, die nach dem 29.09.2009 und nach 18:00 Uhr geschrieben wurden, dann fällt ein Beitrag vom 30.09., der um 17:00 geschrieben wurde, nicht darunter, weil er die zweite Bedingung nicht erfüllt - angezeigt werden dann nur Beiträge nach dem 30.09, die abends geschrieben wurden :). Wenn man Forenbeiträge sucht, die nach dem 29.09.2009 18:00 Uhr geschrieben wurden, dann schon. In dem zweiten Fall muss man Datum und Zeit in einer Bedingung zusammenfassen - also in deinem Fall Jahr, Monat, Tag, Stunde und Minuten in einem Datenfeld speichern. Das passende Format hierfür wäre DATETIME ('YYYY-MM-DD HH:MM:SS')

29.09.2010 19:31 | geändert: 29.09.2010 19:33

49 andehrl

Zitat von Jörg
Syntaktisch scheint das alles OK. Die Frage ist aber vielleicht, was für Datensätze du wie filtern möchtest. Wenn man z.B. Forenbeiträge sucht, die nach dem 29.09.2009 und nach 18:00 Uhr geschrieben wurden, dann fällt ein Beitrag vom 30.09., der um 17:00 geschrieben wurde, nicht darunter, weil er die zweite Bedingung nicht erfüllt - angezeigt werden dann nur Beiträge nach dem 30.09, die abends geschrieben wurden :). Wenn man Forenbeiträge sucht, die nach dem 29.09.2009 18:00 Uhr geschrieben wurden, dann schon. In dem zweiten Fall muss man Datum und Zeit in einer Bedingung zusammenfassen - also in deinem Fall Jahr, Monat, Tag, Stunde und Minuten in einem Datenfeld speichern. Das passende Format hierfür wäre DATETIME ('YYYY-MM-DD HH:MM:SS')

mir geht es aber tatsächlich um den ersten fall. um bei deinem beispiel zu bleiben: ich möchte, dass bei einer suchanfrage für den 29.09.2009 um 14.05, die datensätze des 30.09.2009 auch erst ab 14.05 angezeigt werden.
momentan ist es aber so, das ich den 29.09.2009 und 15.05 eingebe und als ergebnis auch den 29.09.2009 um 14.00 erhalte.

29.09.2010 20:01 | geändert: 29.09.2010 20:06

50 Jörg Kruse

mir geht es aber tatsächlich um den ersten fall. um bei deinem beispiel zu bleiben: ich möchte, dass bei einer suchanfrage für den 29.09.2009 um 14.05, die datensätze des 30.09.2009 auch erst ab 14.05 angezeigt werden.

Das sollte in beiden Fällen so sein. Der erste Fall unterscheidet sich vom zweiten nur dahingehend, dass auch an den Folgetagen nur Datensätze ab 14:05 angezeigt werden.

momentan ist es aber so, das ich den 29.09.2009 und 15.05 eingebe und als ergebnis auch den 29.09.2009 um 14.00 erhalte.

Dann liegt da noch ein Fehler vor. Auf den zweiten Blick fällt er mir dann auch auf:

sprintf("%02H-%02i", $_POST['stunde'], $_POST['minute'])

Mit den "%02H" und "%02i" kann sprintf() nichts anfangen, siehe hierzu auch die Erläuterungen zu den Typangaben im PHP-Manual:

http://www.php.net/manual/de/function.sprintf.php

Korrekt wäre hier "%02d-%02d"

Das "H" und "i" kommen als Typen bei der MySQL-Funktion TIME_FORMAT() zum Einsatz (was du dort auch richtig angewandt hast)

29.09.2010 20:48 | geändert: 29.09.2010 20:49