Bin wohl zu Blond... :(

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bin wohl zu Blond... :(

    Hallo, ich bin absoluter Neuling in Sachen PHP und MySQL. Ich habe es inzwischen geschafft eine Datenbank zu erstellen und diese Lustig mit Daten zu füttern. Nun würde ich gerne aus dieser Datenbank bestimmte Datensaätze abfragen und zwar zum Beispiel alle Daten eines bestimmten Tages, zum Beispiel vom 06.11. die in der Zeit zwischen 16:00 und 16:59 eingetragen wurden. Die Spalte heisst starttime. Ich habe es mit
    PHP-Code:
    SELECT FROM 'datei' WHERE 'starttime' BETWEEN 'Anfang' AND 'Ende'
    probiert, es wird auch was gesucht aber kein Ergebnis zurück geliefert. Wie gesagt seht mir bitte die wirklich blöde Frage nach ich bin absolut neu und habe jetzt zwei Stunden im Web und hier im Forum gesucht...

    Kann vielleicht jemand nen Stups geben?

  • #2
    Du solltest Fehlermeldungen, die du vom Datenbankserver bekommst, auch lesen.

    Kommentar


    • #3
      Ja, wenn da nur welche wären... Er führt die Abfrage kommentarlos aus... Abfragedauer 0,0014 - Das ist alles...

      Kommentar


      • #4
        PHP-Code:
        BETWEEN 'Anfang' AND 'Ende' 
        Ich hoffe doch, dass 'Anfang' und 'Ende' korrekte Datumsformate sind. Oder? Zeig doch mal einen echten Query.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Peter, Genau da fängt ja das Dilemma schon an bei mir... Ich habe dort um das überhaupt zu testen diese Abfrage via PHPadmin gemacht und anstatt der ANfang und Ende Variablen die da später rein sollen die gewünschten Daten eingegeben also: '2013-11-07 16:00:00' und so weiter...

          Andre

          Kommentar


          • #6
            Und welches Format hat die Spalte starttime? Ich hoffe doch nicht ein VARCHAR oder dergleichen.

            Peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Nein, die ist DATETIME

              Kommentar


              • #8
                Hi Gobo,

                unter MySQL :: MySQL 5.1 Referenzhandbuch :: 12.5 Datums- und Zeitfunktionen findest du die

                verschiedensten Datums-/Zeitfunktionen für mySQL.

                date(spalte) z.B. gibt dir das Datum aus '2013-11-07 16:00:00' zurück.
                time(spalte) die Uhrzeit.

                Good Luck
                Günni

                Kommentar


                • #9
                  Hi Günni,

                  erst mal herzlichen Danke für die Hilfe beim Datensatzlöschen. Klappt super und ich habe den Weg verstanden und inzwischen für meine Anwendung verfeinert! Danke.

                  Mit der Date und Time Geschichte das ist mir soweit klar. Ich kapier nur im Moment noch nicht so richtig wie ich die schreiben muss, die Abfrage damit der nur die entsprechenden Sätze ausgibt. Ich probier mal weiter...

                  Puh... In meinem Alter noch soviel lernen...

                  Kommentar


                  • #10
                    Hi Gobo,

                    wenn starttime vom Typ datetime ist, so sind ja Datum und Uhrzeit darin enthalten.

                    Die Abfrage nach Einträgen an einem bestimmten Tag, in einem Zeitraum von Uhrzeit bis Uhrzeit könnte dann so aussehen:

                    PHP-Code:
                    select from tabelle WHERE date(starttime) = '2013-12-12' and time(starttimeBETWEEN '12:00' AND '14:00' 
                    Datum und die Uhrzeiten wären Daten, die von einem Formular gesendet werden:

                    PHP-Code:
                    <html>
                    <head>
                    <title>Untitled</title>
                    </head>
                    <body>
                    <form action="" method="post">
                    <input type="text" name="datum" />
                    <input type="text" name="von" />
                    <input type="text" name="bis" />
                    <input type="submit" name="cmd" />
                    </form>
                    <?php 
                    if(isset($_POST['cmd'])){
                     
                    $query 'select * from tabelle where date(starttime)="'.$_POST['datum'].'" and time(starttime) between "'.$_POST['von'].'" and "'.$_POST['bis'].'"';
                     
                    //echo $query.'<br>';
                     
                    $result mysql_query($query);
                     if(
                    mysql_num_rows($result)==0){
                      echo 
                    'Die Anfrage brachte kein Ergebnis';
                     exit;
                     }else{
                      while(
                    $row mysql_fetch_array($resultMYSQL_ASSOC)){
                      echo 
                    implode(' | '$row).'<br>';
                     }
                           }
                     }
                    ?>
                    </body>
                    </html>
                    Gruß
                    Günni

                    Kommentar


                    • #11
                      Bitte nicht so einen Schund posten!

                      Es fehlt der SQL-Escaping und die mysql_* Funktionen sind veraltet. SELECT * sollte nicht verwendet werden. Außerdem hältst du das EVA-Prinzip nicht ein. Ein exit mitten im Programmcode ist böse.


                      PHP-Code:
                      <?php

                      $result 
                      null;
                      $error_message '';

                      if (isset(
                      $_GET['date'], $_GET['from_time'], $_GET['to_time'])) {
                          
                      $db = new mysqli('localhost''root''''test');
                          if (! 
                      $db) {
                              
                      $error_message 'Datenbankverbindung konnte nicht aufgebaut werden.';
                          } else {
                              
                      $db->set_charset('utf8');

                              
                      $from_datetime $_GET['date'] . ' ' $_GET['from_time'];
                              
                      $to_datetime $_GET['date'] . ' ' $_GET['to_time'];
                              
                              
                      $sql "
                                  SELECT foo, bar
                                  FROM tabelle
                                  WHERE starttime BETWEEN '" 
                      $db->escape_string($from_datetime) . "'
                                  AND '" 
                      $db->escape_string($to_datetime) . "'
                              "
                      ;
                              
                              
                      $result $db->query($sql);
                              if (! 
                      $result instanceof mysqli_result) {
                                  
                      $error_message 'Datenbankabfrage fehlgeschlagen.';
                              }
                          }
                      }

                      header('Content-Type: text/html; charset=utf-8');

                      $e = function ($value) {
                          return 
                      htmlspecialchars($valueENT_QUOTES'UTF-8');
                      };

                      ?><!DOCTYPE html>
                      <html>
                          <head>
                              <title>Foobar</title>
                          </head>
                          <body>
                              <form action="" method="get">
                                  <label>
                                      Datum: <input type="text" name="date" />
                                  </label>
                                  <br />
                                  <label>
                                      Von: <input type="text" name="from_time" />
                                  </label>
                                  <br />
                                  <label>
                                      Bis: <input type="text" name="to_time" />
                                  </label>
                                  <br />
                                  <input type="submit" />
                              </form>

                              <?php if (! empty($error_message)): ?>
                                  <p>
                                      <?php echo $e($error_message); ?>
                                  </p>
                              <?php endif; ?>

                              <?php if ($result instanceof mysqli_result): ?>
                                  <?php if ($result->num_rows == 0): ?>
                                      <p>
                                          Die Suchabfrage brachte ein leeres Ergebnis.
                                      </p>
                                  <?php else: ?>
                                      <ul>
                                          <?php while ($row $result->fetch_assoc()): ?>
                                              <li>
                                                  <?php echo $e($row['foo']); ?>;
                                                  <?php echo $e($row['bar']); ?>
                                              </li>
                                          <?php endwhile; ?>
                                      </ul>
                                  <?php endif; ?>
                              <?php endif; ?>
                          </body>
                      </html>
                      ungetestet
                      Zuletzt geändert von h3ll; 10.11.2013, 09:15.

                      Kommentar


                      • #12
                        Hallo h3ll,

                        funktioniert super. Liefert auch genau mein gewünschtes Ergebnis. Jetzt noch eine Sache an der ich gerade total verzweifel...

                        Ich lese ja starttime mit aus in der Abfrage der Datenbank. Logischerweise beinhaltet starttime immer den genauen Datumstring: Beispiel: 2013-11-09 14:57:36 - Jetzt möchte ich daraus in der Ausgabe aber nur die Zeit anzeigen und bei der Datumseingabe das richtige, also nicht das Unixdatum eingeben... Ich versuche mich hier mit Dingen wie CONVERT und date_format aber ich glaube ich kapier das nicht. Habe inzwischen alles was ich im Internet gefunden habe durch... Ich versteh einfach nicht was ich falsch mach. Ich bekomme es ja inzwischen hin das er mir die formatierte Ausgabe liefert, aber immmer die aktuelle Zeit, warum übernimmt der das nicht aus starttime... Und wenn immer nunr vom letzten Datensatz... Wuaaaaaahh... Ich werde noch wuschig hier....

                        Kommentar


                        • #13
                          Nächstes Mal bitte einen vernünftigen Thread-Titel wählen, der das Problem beschreibt.

                          Und auch das Problem selber nachvollziehbar beschreiben – in deinem letzten Posting hier bzgl. der Eingabe eines Datums ist wieder viel Gefasel, aber absolut nichts konkretes.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Ok wahsaga,

                            sorry also:

                            bei meiner Datenbankabfrage bekomme ich alle Daten ausgelesen, möchte aber in der Ausgabe das Datum aus der Variablen starttime formatiert ausgeben, also nur die Uhrzeit.

                            Bei der Anforderung der Daten, soll der User das deutsche Datumsformat verwenden können, derzeit geht nur das Unixformat, als PHP Neuling bin ich derzeit überfordert.

                            Ich verwende zur Abfrage den Code oben von h3ll, darum poste ich hier jetzt nicht nochmal den Code.

                            Wäre für Hilfe sehr dankbar...

                            Kommentar


                            • #15
                              Ok, das mit dem formatierten Zeitausgabe habe ich gefunden. Wo mache ich jetzt den Fehler? Ich übernehme die Zeit von einem Dropdown. Korrekte Übergabe an PHP funktioniert soweit.

                              Was ist hier jetzt falsch?

                              PHP-Code:
                                  $time $_GET['from_time'];


                                         if (
                              $time == 23) {
                                             
                              $to_time'23:59';
                                             }
                                           else {
                                              
                              $to_time++;
                                          } 
                              Ich bekomme überhaupt keine Rückmeldung vom Formular, auch keine Fehlermeldung. geht einfach wieder zurück auf die eingabe...

                              Das oben ist das einzige was ich geändert habe.

                              Kommentar

                              Lädt...
                              X