tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
268
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Skribi Skribi ist offline Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    10
    Hallo zusammen,

    ich bin PHP Anfänger und setze mich zur Zeit mit einzelnen Scripten auseinander, um etwas dazuzulernen. Leider reicht mein Grundwissen häufig nicht, um diese Scripte meinen Bedürfnissen anzupassen.

    Bei folgendem Script wird für jede Reihe in der Datenbank deren Datum NICHT in der Zukunft liegt, ein leeres Ergebnis zurückgegeben. Gibt es nun keine Events in der Zukunft, möchte ich dies auf einer Website per echo "No upcoming events" kenntlich machen.

    Der Code sieht zur Zeit wie folgt aus:

    PHP-Code:
    $query  "SELECT * FROM events ORDER BY date, time";
                    
    $result mysql_query($query);

                    while(
    $row mysql_fetch_assoc($result))
                    {
                    if (
    $row['date'] >= date('Y-m-d'))
                    {
                    
    displayEvents($row);
                    echo 
    "</tr><tr><td colspan='7' height='0px'></td></tr>";
                    }
                                    
                    elseif (
    $row['date'] >= date('Y-m-d') == '')
                    {
                        echo 
    "Currently, there are no upcoming events.";
                        echo 
    "</tr><tr><td colspan='7' height='0px'></td></tr>";
                    }
                    } 
    Natürlich wird nun für jede Reihe der auszugebene Text wiedergegeben, d.h. ich habe "Currently, there are no upcoming events." ungefähr x-mal hinereinander stehen. Damit schieße ich völlig übers Ziel hinaus, da es ja einmal absolut ausreichen würde.

    Ich habe bereits mit mysql_row_count herumgespielt, leider ohne Erfolg. Daher wäre es super, wenn mir jemand einen Tip in Richtung richtige Lösung geben würde.

    Vielen Dank für Eure Hilfe.

    Skribi
     

  2. #2
    Avatar von m0dpad
    m0dpad m0dpad ist offline Mitglied Gold
    Registriert seit
    Mar 2011
    Beiträge
    122
    Hallo,
    sowas machst du am besten direkt in die Datenbankabfrage.
    PHP-Code:
    $date date('Y-m-d'); 
    $sql 'SELECT COUNT(*) FROM events WHERE date >= '.$date;
    $result mysql_query($sql);
    $count mysql_result($result,0);
    if(
    $count == 0) :
           echo 
    'No upcoming events.';
    endif; 
     
    Ideen oder Vorschläge für Video Tutorials ? Einfach Feedback geben!
    Mein Blog für Video Tutorials, vor allem PHP.

  3. #3
    Skribi Skribi ist offline Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    10
    Danke, das funktioniert - zumindest fast.

    Leider geht es nur wenn ich den zweiten Paramter aus folgender Line weglasse:

    PHP-Code:
    $count mysql_result($result,0); 
    Da mysql_result aber 2 Paramter verlangt, wird vor der Ausgabe der entsprechende Fehler angezeigt. Dabei bin ich mir auch ziemlich sicher, dass die Null schon stimmt...

    Ich fürchte, dass ich da gerade irgendetwas Fundamentales nicht beachte...
     

  4. #4
    Avatar von m0dpad
    m0dpad m0dpad ist offline Mitglied Gold
    Registriert seit
    Mar 2011
    Beiträge
    122
    Was passiert denn, wenn du
    PHP-Code:
    $count mysql_result($result,0); 
    verwendest?
     
    Ideen oder Vorschläge für Video Tutorials ? Einfach Feedback geben!
    Mein Blog für Video Tutorials, vor allem PHP.

  5. #5
    Skribi Skribi ist offline Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    10
    Zitat Zitat von m0dpad Beitrag anzeigen
    Was passiert denn, wenn du
    PHP-Code:
    $count mysql_result($result,0); 
    verwendest?
    Dann ist meine Seite leer, wird nichts angezeigt...
     

  6. #6
    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.520
    Dann schreib mal testweise in die ersten zwei Zeilen in deinem Script

    Code php:
    1
    2
    
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', 1);

    Außerdem verwende mysql_error() wo es geht:

    Code php:
    1
    
    $count = mysql_result($result, 0) || die(mysql_error());
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Skribi Skribi ist offline Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    10
    Ok, habe ich gemacht.

    Dies hatte für jede Reihe der Abfrage folgenden Error zur Folge:

    Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in [...]
    Ich habe dies korrigiert, indem ich in meinem Script

    date_default_timezone_set('Europe/Berlin');
    gesetzt habe.

    Nun sind alle Fehler weg und ich bin wieder bei meiner leeren Seite... :-/


    Falls es hilft, kann ich Euch gerne einen Link zu der Seite, auf der ich das Script nutze, schicken.
     

  8. #8
    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.520
    Gibst du dieses $count mit echo irgendwo aus?

    Du willst ja anzeigen, das keine Einträge da sind, wenn dir der Query 0 als Wert zurück gibt. Hast du eine Prüfung dafür eingebaut?

    Ansonsten mach es mal so:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    
    if( ($num_events = mysql_result($result, 0)) == 0 )
    {
      echo "Currently, there are no upcoming events.";
    }
    else
    {
      echo "We $num_events upcoming events so far.";
    }
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  9. #9
    Skribi Skribi ist offline Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    10
    Jetzt hab' ich es...

    Der Fehler war eine der Marke "Grausam", betraf die Logik hinter der DB Abfrage bzw. der gestellten Bedingungen. Beim oben gemachten Lösungsansatz hatte ich auf einmal den Output "14", was der Anzahl aller DB Einträge (die zur Zeit in der Vergangenheit liegen) entspricht.

    Somit habe ich die Abfrage völlig neu geschrieben. Ist evtl. etwas umständlich geworden, aber funktioniert: Eine Abfrage gibt mir nun die Gesamtanzahl an Einträgen aus, eine weitere die Anzahl der Einträge/Events in der Vergangenheit. Zu guter letzt wird dann letzteres von erstem subtrahiert. Ist dieses Ergebnis = 0, so wird der gewünschte Text "No upcoming events [...]" angezeigt.

    PHP-Code:
    date_default_timezone_set('Europe/Berlin');

                    
    $query  "SELECT * FROM events ORDER BY date, time";
                    
    $result mysql_query($query);

                    while(
    $row mysql_fetch_assoc($result))
                    {
                    if (
    $row['date'] >= date('Y-m-d')) 
                    {
                    
    displayEvents($row);
                    echo 
    "</tr><tr><td colspan='7' height='0'></td></tr>";
                    }
                    }
                    
    $date date('Y-m-d'); 
                    
    $sql 'SELECT COUNT(*) FROM events WHERE date >= '.$date;
                    
    $query1 mysql_query($sql);
                    
    $totalentries 'SELECT COUNT(*) FROM events';
                    
    $query2 mysql_query($totalentries);

                    if((
    mysql_result($query20) - mysql_result($query10)) == 0
                    {
                      echo 
    "<b>Currently, there are no upcoming events.</b><br />The list will be updated as soon as possible.<br /><br />If you know about events in the near future that should be listed, don't hesitate to contact us. ";
                    echo 
    "</tr><tr><td colspan='7' height='0'></td></tr>";
                    }
                    else
                    {
                      echo 
    "There are $sql upcoming events in this list.";
                    echo 
    "</tr><tr><td colspan='7' height='0'></td></tr>";
                    } 
    Ich bedanke mich bei allen für die Hilfe und vor allem Geduld und hoffe, mit meiner Lösung in Zukunft auch anderen Newbies etwas helfen zu können. Das Thema kann geschlossen werden...
     

  10. #10
    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.520
    Du kannst das Thema selbst schließen (Erledigt-Haken).

    Außerdem kann man sich einen Query sparen. Du liest ja ohnehin schon alle aus. Du müsstest in deiner ersten while-Loop nur alle Termine mit zählen, die in der Zukunft (also größer als heute-Bedingung) liegen.

    Falls du Interesse hast, zu erfahren, wie das geht, kann man ja daran optimieren. Wenn nicht, ists auch ok
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  11. #11
    Skribi Skribi ist offline Mitglied
    Registriert seit
    Apr 2011
    Beiträge
    10
    Ok, danke. Sehr nette Leute hier im Forum, muss ich schon sagen.

    Was weitere Optimierung angeht, werde ich das im Hinterkopf behalten. Allerdings will ich heute erstmal das schöne Wetter genießen, bevor es wieder an HTML, CSS, PHP, und SQL geht...in meinem Projekt warten glaube ich noch ganz andere Probleme auf mich, die gelöst werden wollen. Von daher werdet Ihr schon früh genug wieder von mir hören.
     

Ähnliche Themen

  1. Neue SQL Abfrage mit Ergebnissen
    Von neus im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 11.08.08, 11:23
  2. Antworten: 5
    Letzter Beitrag: 21.04.07, 14:21
  3. prozentrechnung mir 3 ergebnissen
    Von M-GT im Forum PHP
    Antworten: 8
    Letzter Beitrag: 09.09.05, 18:48
  4. Mehrere Ergebnissen jeweils 1 Var.
    Von Nilman im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 05.03.05, 13:40
  5. Listbox mit mehreren Ergebnissen
    Von joky_joky im Forum PHP
    Antworten: 4
    Letzter Beitrag: 08.06.04, 11:30

Stichworte