PHP/SQL Abfrage

  • Themenstarter Themenstarter Patrik Garten
  • Beginndatum Beginndatum
P

Patrik Garten

Hallo liebe Community,

ich bin jetzt seit eben gerade registriert und habe jetzt schon ein Problem, zwar geht es darum das ich ein Projekt habe, bei dem es um eine Abfrage von einer Datenbank online geht. Mein Problem besteht darin, das ich ich nicht weiß wie ich nun das Geburtsdatum von Personen richtig ausgeben kann. Bisher habe ich folgendes schon hin bekommen:

PHP:
<?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&ouml;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, ';
            echo '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<1; $j++)
        {
            echo '<td>'.(string)$zeile[0].', '.(string)$zeile[1].'</td>';
        }
        for($j=2; $j<$anzFields; $j++)
        {
            if($j==3)
            {

                $format = '%d.%m.%Y';

                $zeile[$j] = strftime($format);
            }
            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";

?>

Allerdings zeigt er mir bisher nur das aktuelle Datum an und ich habe echt keinen blassen Schimmer wie ich jetzt weiter vorgehen soll. :-/
Habe schon rumprobiert und experimentiert und entweder die Seite zeigt gleich gar nichts an, oder mir werden laufend irgendwelche Fehlermeldungen um die Ohren gehauen.

(Ich muss dazu sagen, ich habe vor kurzem erst mit PHP und SQL angefangen und habe gleich so ein Projekt bekommen.)

Ich bedanke mich jetzt schon einmal bei euch, für eure Hilfe/Kommentare/Tipps/Tricks.
 
Hi Patrik und willkommen im Forum

item: Was für ein Feldtype hat pa_geb_datum in der DB
item: in strftime solltest du noch den 2ten Paramter, den Timestamp mitgeben, ansonsten nimmt er time() als zu formatierender Timestamp

Mein Vorschlag mit der Annamhe das pa_geb_datum ein Timestamp oder date Feld ist. Mit UNIX_TIMESTAMP() gleich das Datum als Unix-Timestamp auslesen
SQL:
SELECT 
    pa_name,
    pa_vorname,
    pa_titel,
    UNIX_TIMESTAMP(pa_geb_datum) AS geb_datum_timestamp,
    pa_pat_nr 
FROM
    patient

PHP:
$format = '%d.%m.%Y';
$zeile[$j] = strftime($format, $zeile[$j]);

Und noch als Anmerkung: Bitte in Zukunft den Code den du hier postest auf das wesentliche reduzieren


Nachtrag: Oder du formatierst bereits im SQL (Annahme, pa_geb_datum ist ein Timestamp oder Date - Feld)
SQL:
SELECT 
    ....
    DATE_FORMAT(pa_geb_datum, '%d.%m.%Y') AS formated_geb_datum,
    ...
 
Zuletzt bearbeitet von einem Moderator:
Hallo yaslaw,

also ich habe jetzt einmal geschaut und der Feldtyp von pa_geb_datum ist in der Tat ein date Feld.
Allerdings wenn ich den Befehl UNIX_TIMESTAMP eingebe, gibt er mir folgende Fehlermeldung aus:
Dynamic SQL Error SQL error code = -804 Function unknown UNIX_TIMESTAMP

Kann es sein, das der Befehl fix für MySQL-Server ist? Wenn ja, dann wundert es mich in der Tat nicht das ich eine Fehlermeldung um die Ohren gehauen bekomme, da ich mit FireBird arbeite. :-/

Das mit dem strftime habe ich dann auch im nachhinein, als ich den Post hier geschrieben habe dann in PHP.net entdeckt, aber danke für den Hinweis.
 
Jepp, UNIX_TIMESTAMP ist MySQL.

Auch mein zweites Beispiel ist MySQL.

In welchem Format FireBird das Datum speichert weiss ich nicht. ggf ist es bereits ein Unix-Timestamp. Ansonsten halt mal googeln nach 'FireBird konvert date to unix timestamp'
 
So, das Thema hat sich gerade erledigt, ich habe einfach folgendes in die SQL-Abfrage eingegeben:

SQL:
extract(day from pa_geb_datum)||
                            '.'|| extract(month from pa_geb_datum)||
                            '.'|| extract(year from pa_geb_datum),

Dann habe ich auch nicht mal was in meiner "for"-Schleife ändern müssen!
Danke an dich yaslaw
 
Zuletzt bearbeitet von einem Moderator:
Zurück