tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
316
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cannon Cannon ist offline Mitglied
    Registriert seit
    Apr 2011
    Ort
    Sinsheim
    Beiträge
    19
    Guten Tag,

    ich bin grad dabei zu versuchen einen Kalender zu Programmieren, nun brauch ich mal etwas hilfe. Und zwa speicher ich die start und endzeit des Termines als timestamp in eine mysql datenbank nun möchte ich prüfen ob bereits ein Termin für den Zeitraum angelegt ist bevor ich ein neuen Termin anlege allerdings fällt mir die nötige Mysql Select abfrage nicht ein. Könnt ihr mir helfen?

    Noch ein kleines Beispiel:

    zb ist bereits ein Termin eingetragen von 18 - 20 Uhr nun möchte ich einen neuen Termin anlegen von 18:45 - 21 Uhr und der Mysql select befehlt soll eben erkennen das die 2 Termine in der Selben Zeit statfinden und dann eben einen fehler ausgeben die Uhrzeiten sind als Timestamp gespeichert mit starttermin und endetermin
    Geändert von Cannon (06.01.12 um 19:56 Uhr)
     

  2. #2
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Mal eine Theoretische Frage: kann ein Termin z.B. 30 Minuten lang gehen, und ein anderer nur 15 Minuten?
    Wenn ja, gibt es drei Möglichkeiten:

    1) Der Termin (15min) liegt genau in dem Termin (30min)
    2) Der Termin (15min) fängt in dem Termin (30min) an, hört aber danach auf
    3) Der Termin (15min) fängt vor dem Termin (30min) an, hört aber in dem Termin auf

    Entsprechend müsstest du drei Abfragen dazu gestalten:

    1)
    PHP-Code:
    SELECT *
       
    FROM kalender
       WHERE startzeit
    <='".$startzeit."'
       
    AND endzeit>='".$endzeit."' 
    2)
    PHP-Code:
    SELECT *
       
    FROM kalender
       WHERE startzeit
    >='".$startzeit."'
       
    AND endzeit>='".$endzeit."' 
    3)
    PHP-Code:
    SELECT *
       
    FROM kalender
       WHERE startzeit
    <='".$startzeit."'
       
    AND endzeit<='".$endzeit."' 
    irgendwie kann man die Abfragen sicher verbinden, mit UNION wenn ich mich nicht irre.

    €: Oder man macht es noch einfacher, wie mir gerade einfällt:
    PHP-Code:
    SELECT *
       
    FROM kalender
       WHERE 
    (startzeit<='".$startzeit."' AND endzeit<='".$endzeit."')
       OR (
    startzeit>='".$startzeit."' AND endzeit<='".$endzeit."')
       OR (
    startzeit>='".$startzeit."' AND endzeit>='".$endzeit."'
    Du kannst dann einfach die php-Funktion "mysql_num_rows" benutzen. Wenn die Funktion 0 zurückgibt, ist kein Termin in diesem Zeitraum geplant.

    Gruß
    Geändert von Lime (06.01.12 um 19:55 Uhr)
     

  3. #3
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Du könntest natürlich auch BETWEEN benutzen:

    Code mysql:
    1
    
    SELECT COUNT(*) FROM `kalender` WHERE '$startzeit' BETWEEN `startzeit` AND `endzeit` OR '$endzeit' BETWEEN `startzeit` AND `endzeit`

    Wenn da ein Wert > 0 zurück kommt, existiert bereits ein Termin für den Zeitraum.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  4. #4
    Cannon Cannon ist offline Mitglied
    Registriert seit
    Apr 2011
    Ort
    Sinsheim
    Beiträge
    19
    danke saftmeister werd es gleich testen
     

  5. #5
    Cannon Cannon ist offline Mitglied
    Registriert seit
    Apr 2011
    Ort
    Sinsheim
    Beiträge
    19
    scheint irgend wo ein fehler zu sein er gibt jedesmal eingetragen aus auch wenn in dieser zeit bereits ein termin eingetragen ist
    hier der code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    $select = mysql_query("SELECT id FROM Sendeplan WHERE start BETWEEN ".$_POST[start]." AND ".$_POST[ende]." OR ende BETWEEN ".$_POST[start]." AND ".$_POST[ende].";");
        if(@mysql_num_rows($select) == 0)
        {
            mysql_query("INSERT INTO Sendeplan (start, ende, rj, sendung) VALUES ('".$_POST[start]."', '".$_POST[ende]."', '".$_POST[rj]."', '".$_POST[sendung]."');");
            echo "eingetragen";
        }
        else
        {
            echo "vergeben";
        }
    und beim Beispiel von Lime sagt er immer vergeben
    Geändert von Cannon (06.01.12 um 21:20 Uhr)
     

  6. #6
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Ich glaube, du hast gerade das Statement falsch herum geschrieben, sicher bin ich mir aber nicht... wieder so ein Logik******

    PHP-Code:
    start BETWEEN ".$_POST[start]." AND ".$_POST[ende]." 
    es sollte glaub ich
    PHP-Code:
    ".$_POST[start]." BETWEEN start AND ende 
    heißen

    Du wandelst aber hoffentlich den $_POST[start]/$_POST[ende] erst in einen timestamp um...
     

  7. #7
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Zitat Zitat von Lime Beitrag anzeigen
    Ich glaube, du hast gerade das Statement falsch herum geschrieben, sicher bin ich mir aber nicht... wieder so ein Logik******

    PHP-Code:
    start BETWEEN ".$_POST[start]." AND ".$_POST[ende]." 
    es sollte glaub ich
    PHP-Code:
    ".$_POST[start]." BETWEEN start AND ende 
    heißen
    So wie er es geschrieben hat sollte das schon passen mMn.

    Versuch es mal bitte damit:
    PHP-Code:
    if ( isset(
        
    $_POST['start'],
        
    $_POST['ende'],
        
    $_POST['rj'],
        
    $_POST['sendung']
    ) ) {
        
    $start   mysql_real_escape_string$_POST['start']   );
        
    $ende    mysql_real_escape_string$_POST['ende']    );
        
    $rj      mysql_real_escape_string$_POST['rj']      );
        
    $sendung mysql_real_escape_string$_POST['sendung'] );

        
    $query mysql_query(
            
    "SELECT COUNT(id) FROM Sendeplan WHERE start BETWEEN ".
            
    "$start AND $ende OR ende BETWEEN $start AND $ende"
        
    ) or die ( mysql_error() );
        
    $query mysql_fetch_array$queryMYSQL_NUM );

        if( 
    $query[0] == ) {
            
    mysql_query(
                
    "INSERT INTO Sendeplan (start, ende, rj, sendung) ".
                
    "VALUES ($start$ende, '$rj', '$sendung')"
            
    ) or die ( mysql_error() );
            echo 
    'eingetragen';
        } else {
            echo 
    'vergeben';
        }

    Btw, sind die Felder `start` und `ende` vom Typ TIMESTAMP oder INT mit einem Unix-Timestamp?

    Gruß
     

  8. #8
    Cannon Cannon ist offline Mitglied
    Registriert seit
    Apr 2011
    Ort
    Sinsheim
    Beiträge
    19
    danke habs nun das erste ging doch nur hat javascript mir einen zu großen timestamp gegegeben hab ihn erst duch 1000 teilen müssen da der wert sonst zu groß wa für die Datenban danke nochmal
     

Ähnliche Themen

  1. MySQL-Abfrage in Kalender einbinden.
    Von Biber90 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 30.08.09, 18:25
  2. Antworten: 3
    Letzter Beitrag: 17.03.09, 16:37
  3. PHP Kalender mit MySQL Datenbank
    Von Silentdevil im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.10.08, 14:15
  4. Gibt es einen Kalender bei MS Access?
    Von nilshermann im Forum Office-Anwendungen
    Antworten: 2
    Letzter Beitrag: 04.07.07, 07:38
  5. Zugriff auf einen lokalen Outlook-Kalender via C
    Von Rene Albrecht im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 20.04.04, 09:43