Ankündigung

Einklappen
Keine Ankündigung bisher.

Datetime und Überschneidungen in PHP

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

  • Datetime und Überschneidungen in PHP

    Hallo liebe mitglieder,

    ich habe da ein kleines Problem, und hoffe ihr könnt mir behilflich sein.


    Undzwar, möchte ich gerne eine Datenbank einrichten um Termine zu Speichern, dabei soll die Seite überprüfen ob bereits an dem Datum und Uhrzeit bereits ein Termin besteht.

    Bisher habe ich die Datenbank erstellt und ein Anfangs und End Wert eingebeben, diese als "Datetime".
    mein PHP code sieht so aus :
    Code:
    <?php
    
    //Sessiondan Tarihleri al
    session_start();
    $starn = $_SESSION['datum'];
    $endn = $_SESSION['datum2'];
    $db = new mysqli('localhost','rese_','berkan13','rese_');
    
    
    echo $starn . "\n</br>" ;
    echo $endn . "\n</br>";
    
    
    
     // Auf Termin-Überschneidung prüfen
    $ueberschneidung_query = mysqli_query($db, "SELECT * FROM T2 WHERE
     beginn > '" . $startn . "' AND beginn < '" . $endn . "'
    OR ende > '" . $startn . "' AND beginn < '" . $endn . "'
    OR '" . $startn . "' > beginn AND '" . $startn . "' < ende
    OR '" . $endn . "' > beginn AND '" . $startn . "' < ende ");
    
    
    
     // Nachschauen, ob das SQL-Statement ein Ergebnis geliefert hat
     $ueberschneidung_num_rows = mysqli_num_rows($ueberschneidung_query);
    
    
      // Wenn es mindestens eine Überschneidung gibt, dann ...
      if ($ueberschneidung_num_rows > 0) {
    
        // GIB EINEN FEHLER AUS!
    
      echo "vorhanden" . "\n</br>";
     } else {   // Wenn es keine Überschneidung gibt, dann ...
    
        // SCHREIB DEN NEUEN DATENSATZ IN DIE DB!
    echo "nicht vorhanden" . "\n</br>";
     }  
    
    ?>
    Leider nur hab ich gemerkt, das wenn ich zum beispiel das Jahr wechsel oder auch monat, gibt es falsche werte zurück, also bei nicht vorhandenem termin bekomme ich vorhanden zurück.

    Hat jemand eine Idee, wie man es lösen könnte.

    Liebe grüße


  • #2
    Zeig die fertig geparste Query. https://php-de.github.io/jumpto/sql/...query-ausgeben

    Da sieht man dann auch ob du das richtige Format genutzt hast etc etc..
    PHP-Code:
      $starn $_SESSION['datum'];
    $endn $_SESSION['datum2']; 


    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Bei einem Datenbankproblem ist der PHP-Code in erster Linie uninteressant und eher hinderlich.

      Poste bitte Tabellenstruktur und Beispieldaten sowie die Abfrage mit erwartetem und tatsächlichen Ergebnis als SQL-Code oder erstelle ein Beispiel auf SQLFiddle.

      Kommentar


      • #4
        Zitat von deluxe13 Beitrag anzeigen
        Hallo liebe mitglieder,

        ich habe da ein kleines Problem, und hoffe ihr könnt mir behilflich sein.


        Undzwar, möchte ich gerne eine Datenbank einrichten um Termine zu Speichern, dabei soll die Seite überprüfen ob bereits an dem Datum und Uhrzeit bereits ein Termin besteht.

        Das kannst Du via EXCLUSION CONSTRAINT bereits bei der Definition der Tabelle verhindern. Falls Du PostgreSQL hast.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Das ist die erste Seite wo man das Datum Festlegt :
          Code:
          <form method="post" action="02.php"><font face="verdana" size="2"><table>
          <tr><td>Gün:</td><td><input type="date" name="1"><br></td></tr>
          <tr><td>Saat:</td><td><select name="2">
            <option value="12">12</option>
            <option value="13">13</option>
            <option value="14">14</option>
            <option value="15">15</option>
            <option value="16">16</option>
            <option value="17">17</option>
            <option value="18">18</option>
            <option value="19">19</option>
            <option value="20">20</option>
            <option value="21">21</option>
            <option value="22">22</option>
            <option value="23">23</option>
          </select>
          <select name="3">
            <option value="00">00</option>
            <option value="15">15</option>
            <option value="30">30</option>
            <option value="45">45</option>
          </select>
          
          <br></td></tr>
          <tr><td colspan="2" align="right"><input type="submit" name="Button" value="Login">
          </td></tr></table></font>
          </form>



          Das die Post Seite
          Code:
          <?php
          session_start();    
          $value = ($_POST['1']." ".$_POST['2'].":".$_POST['3'].":00");
          $value2 = ($_POST['1']." ".($_POST['2']+3).":".$_POST['3'].":00");
          $_SESSION['datum'] = "$value";
          $_SESSION['datum2'] = "$value2";
          
          
          header("Location: http:---------------------");
          
          
          ?>

          Das meine Datenbank

          image-2018-09-13.png
          image-2018-09-13 (1).png


          Die Abfrage ist oben.
          Wenn ich die Saisson daten per Echo ausgebe, sind diese richtig im gleichen format wie Datetime.


          Mit dieser Datanbank bekomme ich folgende ausgabe :

          "2019-12-30 14:45:00
          2019-12-30 17:45:00
          vorhanden "

          obwohl zu diesem Datum kein Termin steht...

          Kommentar


          • #6
            Zitat von akretschmer Beitrag anzeigen


            Das kannst Du via EXCLUSION CONSTRAINT bereits bei der Definition der Tabelle verhindern. Falls Du PostgreSQL hast.
            Möchte gerne MySql verwenden.

            Kommentar


            • #7
              Du sollst nicht noch mehr HTML- und PHP-Code posten, sondern nur SQL-Code. Und bitte bitte keine Screenshots.

              Kommentar


              • #8
                Code:
                SELECT * FROM T2 WHERE  beginn > '" . $startn . "' AND beginn < '" . $endn . "' ...
                Ich meinte diese Abfrage von PHP geparst, ohne PHP Variablen.
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Zitat von hellbringer Beitrag anzeigen
                  Du sollst nicht noch mehr HTML- und PHP-Code posten, sondern nur SQL-Code. Und bitte bitte keine Screenshots.
                  SELECT * FROM T2 WHERE beginn > '" . $startn . "' AND beginn < '" . $endn . "' OR ende > '" . $startn . "' AND beginn < '" . $endn . "' OR '" . $startn . "' > beginn AND '" . $startn . "' < ende OR '" . $endn . "' > beginn AND '" . $startn . "' < ende "); Oder was meint ihr?

                  Kommentar


                  • #10
                    Zitat von hausl Beitrag anzeigen
                    Ich meinte diese Abfrage von PHP geparst, ohne PHP Variablen.
                    Sag, trollst du?

                    Im einfachsten Fall mal so:
                    PHP-Code:
                    $sql "SELECT * FROM T2 WHERE beginn > '" $startn "' AND beginn < '" $endn "' OR ende > '" $startn "' AND beginn < '" $endn "' OR '" $startn "' > beginn AND '" $startn "' < ende OR '" $endn "' > beginn AND '" $startn "' < ende ";
                    echo 
                    $sql;  #### Die Ausgabe hier ist die von PHP geparste SQL-Query, darum gehts!
                    $ueberschneidung_query mysqli_query($db$sql); 
                    Und SELECT * solltest du auch nicht verwenden, sondern immer alle Felder aufzählen, die du im Ergebnis dann auch wirklich haben willst.

                    LG
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Nein ich trolle nicht, ich bin erst neu am lernen und 13. Ich hab nur nicht verstanden was genau ihr meint. Sorry.

                      Kommentar


                      • #12
                        Zitat von deluxe13 Beitrag anzeigen
                        Nein ich trolle nicht, ich bin erst neu am lernen und 13. Ich hab nur nicht verstanden was genau ihr meint. Sorry.
                        Lass erstmal PHP komplett weg und arbeite nur über SQL mit der Datenbank! Man muss nicht zwei Baustellen gleichzeitig aufreißen, konzentriere dich erstmal auf eine.

                        Erstelle ein Beispiel auf SQL Fiddle und verlinke es ins Forum:

                        http://sqlfiddle.com/

                        Kommentar


                        • #13
                          Mhh, bekomme hier schon den fehler denke ich, SQL gibt schon falsche Ausgaben raus..


                          PHP-Code:
                          SELECT FROM T2 WHERE beginn "'2018-09-12 14:15:00'" AND beginn "'2018-09-12 17:15:00'" OR ende "'2018-09-12 14:15:00'" AND beginn "'2018-09-12 17:15:00'" OR "'2018-09-12 14:15:00'" beginn AND "'2018-09-12 14:15:00'" ende OR "'2018-09-12 17:15:00'" beginn AND "'2018-09-12 14:15:00'" ende 
                          Mit diesem Code bekomme ich die Meldung das keine Einträge vorhanden ist. Obwohl zeit schonmal belegt.
                          Code:
                          
                          SELECT * FROM `T2`
                          
                          
                          id    name    beginn    ende    
                          1   -----    2018-09-12 15:00:00    2018-09-12 22:00:00    
                          2    test 2     2018-10-12 15:00:00    2018-10-12 18:00:00    
                          3    tetstst stst    2018-09-15 15:00:00    2018-09-15 16:00:00
                          Sqlfiddle.com ist im moment leider nicht erreichbar.

                          Kommentar


                          • #14
                            Code:
                            "'2018-09-12 14:15:00'" 
                            Hast du wirklich doppelte und einfache Quotes? Korrigier das mal.

                            EDIT:

                            Und bei so vielen Bedingungen würde ich Klammern setzten und mal sauber formatieren.
                            a la:
                            Code:
                            SELECT id, name, beginn, ende
                            
                            FROM T2
                            
                            WHERE
                                (beginn > '2018-09-12 14:15:00' AND beginn < '2018-09-12 17:15:00')
                              OR
                                (ende > '2018-09-12 14:15:00' AND beginn < '2018-09-12 17:15:00')
                              OR
                                ('2018-09-12 14:15:00' > beginn AND '2018-09-12 14:15:00' < ende)
                              OR
                                ('2018-09-12 17:15:00' > beginn AND '2018-09-12 14:15:00' < ende)
                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              Du soltest die Testdaten als SQL-Code posten. Oder erstelle ein Beispiel auf SQL Fiddle (was ich jetzt schon zum dritten mal vorschlage).

                              Kommentar

                              Lädt...
                              X