PATIX Geschrieben 17. März 2011 Geschrieben 17. März 2011 Heiho liebe Community, ich habe hier ein echt dringendes und blödes Problem und zwar geht es jetzt darum, das ich jetzt ein paar weitere Angaben zu meiner Abfrage hinzufügen soll, dazu gehört eben eine Abfrage über das Geburtsdatum des Patienten. Allerdings ist jetzt das Problem da das Datum in der DB wie folgt abgespeichert ist: z.B. 1958-02-14 00:00:00 Ich allerdings brauche erstens nur das Datum, also ohne Uhrzeit und zweitens wenn es geht leserlicher, soll heißen z.B. so: 14.02.1958 Wie mache ich das letztendlich dann? Direkt über die SQL Abfrage? Ich habe nämlich echt keinen Schimmer, wie ich das anstellen soll. Vielen Dank schon einmal im voraus. Grüße PATix Hier noch der Code: <?php // Logindaten für die Datenbank $host = ... $dbuser = ... $dbpassword = ... // Datenbank Login $login = ibase_connect($host, $dbuser, $dbpassword); // Fehlermeldung if($login==false) { echo "Die Datenbank konnte nicht geöffnet werden.<br />"; echo ibase_errmsg(); die; } // Einbindung der HTML Datei (zur Wiederholung der Eingabe) include('index.html'); $text = $_POST['eingabe']; // Abfrage der query switch($text) { // Keine Eingabe case FALSE: echo "<br /><b>Bitte machen Sie eine Eingabe!</b>"; echo ibase_errmsg(); die; // Eingabe: Komma -> Alles anzeigen case ',': $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient ORDER by pa_name,pa_vorname;"; break; // Eingabe = Zahl case is_numeric($text): $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_PAT_NR) LIKE '".$text."%';"; break; case (strpos($text, ',')<1): $splitted_name = explode(',', $text); $vorname = trim($splitted_name[1]); $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_VORNAME) LIKE '".strtolower($vorname)."%' ORDER by pa_name,pa_vorname;"; // Suche nach Vor- und Nachnamen über Eingabe: Komma case (strpos($text, ',')>0): $splitted_name = explode(',', $text); $name = trim($splitted_name[0]); $vorname = trim($splitted_name[1]); $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_NAME) LIKE '".strtolower($name)."%' AND LOWER(PA_VORNAME) LIKE '".strtolower($vorname)."%' ORDER by pa_name,pa_vorname;"; break; // Suche nach Vor- und Nachnamen über Eingabe: Leerzeichen case (strpos($text, ' ')>0): $splitted_name = explode(' ', $text); $name = trim($splitted_name[0]); $vorname = trim($splitted_name[1]); $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_NAME) LIKE '".strtolower($name)."%' AND LOWER(PA_VORNAME) LIKE '".strtolower($vorname)."%' ORDER by pa_name,pa_vorname;"; break; // Suche nach Vor- und Nachnamen über Eingabe: Kommas anschließenden Leerzeichen case (strpos($text, ', ')>0): $splitted_name = explode(', ', $text); $name = trim($splitted_name[0]); $vorname = trim($splitted_name[1]); $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_NAME) LIKE '".strtolower($name)."%' AND LOWER(PA_VORNAME) LIKE '".strtolower($vorname)."%' ORDER by pa_name,pa_vorname;"; break; // Suche nach Vor- und Nachnamen über Eingabe: Leerzeichen anschließend Komma case (strpos($text, ' ,')>0): $splitted_name = explode(' ,', $text); $name = trim($splitted_name[0]); $vorname = trim($splitted_name[1]); $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_NAME) LIKE '".strtolower($name)."%' AND LOWER(PA_VORNAME) LIKE '".strtolower($vorname)."%' ORDER by pa_name,pa_vorname;"; break; // Suche nach Vor- und Nachnamen über Eingabe: Leerzeichen, Komma, Leerzeichen case (strpos($text, ' , ')>0): $splitted_name = explode(' , ', $text); $name = trim($splitted_name[0]); $vorname = trim($splitted_name[1]); $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_NAME) LIKE '".strtolower($name)."%' AND LOWER(PA_VORNAME) LIKE '".strtolower($vorname)."%' ORDER by pa_name,pa_vorname;"; break; // Normale Suche nach Nachnamen default: $query = "SELECT pa_name,pa_vorname,pa_titel,pa_geb_datum,pa_pat_nr FROM patient WHERE LOWER(PA_NAME) LIKE '".strtolower($text)."%' ORDER by pa_name,pa_vorname;"; } // Login und Verbindung zur Query $dbabfrage = ibase_query($login, $query); //Fehlermeldung if($dbabfrage==false) { echo(string)ibase_errmsg(); die; } // Datenbank anzeigen echo '<br />'; echo '<table border="0" style="background-color: white; min-width: 750px; font-family: Arial">'; echo '<tr>'; echo '<th>Name</th>'; echo '<th>Vorname</th>'; echo '<th>Titel</th>'; echo '<th>Geb.-Datum</th>'; echo '<th>Pat-Nr.</th>'; echo '</tr>'; $anzFields = ibase_num_fields($dbabfrage); while($zeile = ibase_fetch_row($dbabfrage)) { echo '<tr>'; for($j=0; $j<$anzFields; $j++) { echo '<td>' . (string)$zeile[$j] . '</td>'; } echo '</tr>'; } echo '</table>'; // Beenden und Schließen der Datenbank ibase_free_result($dbabfrage); ibase_close($login); // Abschließender Satz echo "<br /><br />database request completed"; ?>[/PHP] Zitieren
etreu Geschrieben 17. März 2011 Geschrieben 17. März 2011 Wo genau liegt dein Problem? Soweit ich sehen kann ist das Datum in den Anfragen schon enthalten. Findest du php-Referenz nicht? PHP: strtotime - Manual PHP: date - Manual Zitieren
PATIX Geschrieben 17. März 2011 Autor Geschrieben 17. März 2011 Wo genau liegt dein Problem? Soweit ich sehen kann ist das Datum in den Anfragen schon enthalten. Findest du php-Referenz nicht? Ja, das Datum habe ich schon drin, aber das Problem was ich habe ist, das mir das Datum nicht in der Deutschen Schreibung angezeigt wird, sondern so: 1953-03-10 00:00:00. Ich allerdings brauche es erstens ohne Uhrzeit und zweitens in Deutscher Schreibung, soll heißen so: 10.03.1953 z.B. Zitieren
etreu Geschrieben 17. März 2011 Geschrieben 17. März 2011 Die erste Funktion nimmt den String und macht daraus einen Zeitstempel. Die Zweit bekommt und Format und einen Zeitstempel übergeben und macht daraus einen String. Hast du dir die Links angeschaut? Hast du Fragen dazu? Zitieren
fisianer2009 Geschrieben 18. März 2011 Geschrieben 18. März 2011 das er das so 1953-03-10 00:00:00 anzeigt liegt daran das der datentyp in der db so eingestellt ist. du kannst aber per explode() das ganze aus einander nehmen und dann per array neu formatieren. wenn du den datentyp nicht ändern willst/kannst dann benutz noch substr() um nur den datumteil zu benutzen. Zitieren
Toothrot Geschrieben 23. März 2011 Geschrieben 23. März 2011 (bearbeitet) Wie mache ich das letztendlich dann? Direkt über die SQL Abfrage? Da das Datum ja hoffentlich in einem Datumsformat in der Datenbank gespeichert ist, wäre es ziemlicher Unsinn, das tatsächlich als String zu verarbeiten. Es gibt in PHP eine Funktion, die das InterBase Format bei Datumsfeldern anpasst: PHP: ibase_timefmt - Manual Wie der Format-String aufgebaut wird, erfährst Du hier: PHP: strftime - Manual Edit: Die Funktion gibt's in php5 nicht mehr... Moment... Das kann ab php5 mit ini_set($datentyp, $format) gemacht werden, Datentyp ist einer von diesen: "ibase.dateformat", "ibase.timeformat", "ibase.timestampformat" Du musst in der DB nachsehen, welcher genau verwendet wird. Format siehe oben. Bearbeitet 23. März 2011 von Toothrot Zitieren
etreu Geschrieben 23. März 2011 Geschrieben 23. März 2011 Datumsformate konvertieren (CONVERT) Sieht aus, als könntest 4 bzw. 104 verwenden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.