[PHP] mehrere Abfragen & Darstellung

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Soji, 25. Mai 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 25. Mai 2010
    mehrere Abfragen & Darstellung

    heyho,

    ich sitz gerade an folgendem Problem:

    Ich habe eine Übersicht in der die Räume 1-5 listenartig dargestellt werden und falls vorhanden auch ein Termin daneben mit "Veranstaltungsname + Uhrzeit Von->Bis + Leiter"
    Nun ist es aber so das in einem Raum mehrere Termine hintereinander sind, jedoch zeige ich immer nur den nächsten Termin, wenn die Zeit um ist von dem Termin -> der nächste Termin.

    Es sollen am Ende alle Termine (max. 3-4 pro Raum/pro Tag) dargestellt werden, oder zumindestens noch der darauf folgende.

    PHP:
    <? php


    function  Prueferheute ( $raum ) {

        
    $hdatum  date ( "d.m.Y" time ());
        
    $huhrzeit  date ( "H:i" time ());

        include(
    'admin/include/include.php' );
        
    $abfrage  "SELECT * FROM veranstaltungen WHERE raum = ' $raum ' AND termin = ' $hdatum '" ;
        
    $ergebnis  mysql_query ( $abfrage );

        if(
    $ergebnis

        {

            while(
    $datensatz  mysql_fetch_array ( $ergebnis ))

            {

                if(
    $datensatz  ==  '' )

                {

                    echo 
    "" ;

                }
            
                else

                {

        
                    if(
    $huhrzeit  <=  $uhrzeit_von  &&  $uhrzeit_bis  >=  $huhrzeit )

                    {

                        
    ?>
        
                            <strong><?php  echo  $datensatz [ "veranstaltung" ];  ?></strong><br>
                            <small><?php  echo  $datensatz [ "v_leiter" ];  ?><?php  echo  $datensatz [ "uhrzeit_von" ] .  " - "  $datensatz [ "uhrzeit_bis" ?></small>
                        <?php
        
                            
    break;

                    }            

                }        

            }

        }

        else
        {
            echo 
    "<p>Datenbank Fehler!!!" ;
        }
    }
    Anstatt dieser einen Veranstaltung, sollen alle Veranstaltungen erscheinen die in dem Raum, an dem Tag sind.

    PHP:
    <tr>
                                            <td>1a</td>
                                            <td><?php  echo  Prueferheute ( "1a" );  ?></td>
                                            <td>1a</td>
                                            <td><?php  echo  Pruefermorgen ( "1a" );  ?></td>
                                        </tr>
    so werden die in der Übersicht aufgerufen, wobei 1a - den entsprechenden Raum mitgibt um den es sich dreht.

    Tabellenstruktur:
    PHP:
    CREATE TABLE  IF  NOT EXISTS  ` veranstaltungen ` (
      `
    id int ( 11 NOT NULL AUTO_INCREMENT ,
      `
    veranstaltung text NOT NULL ,
      `
    termin varchar ( 20 NOT NULL ,
      `
    raum varchar ( 2 NOT NULL ,
      `
    v_leiter text NOT NULL ,
      `
    uhrzeit_von varchar ( 10 NOT NULL ,
      `
    uhrzeit_bis varchar ( 10 NOT NULL ,
      `
    datum int ( 30 NOT NULL ,
      
    PRIMARY KEY  (` id `)
    ENGINE = MyISAM  DEFAULT  CHARSET = latin1 AUTO_INCREMENT = ;
    Hab bereits mit verschiedensten Lösungsansätzen rum"gewerkelt" aber irgendwie krieg ich da keine vernünftige Abfrage hin, bzw. ich krieg die Daten net aus der Abfrage vernünftig raus.

    Falls ihr noch mehr Info's bzw. Code braucht - schreibt
    Ich hoffe ihr wisst da etwas weiter als ich.

    so far,
    Soji
     
  2. 25. Mai 2010
    AW: mehrere Abfragen & Darstellung

    würdest du dein termin mit nem timestamp->time() sichern, würde die abfrage sehr viel leichter werden.
    PHP:
    $abfrage  "SELECT * FROM veranstaltungen WHERE raum = ' $raum ' AND termin >= '" . time (). "'" ;
    PHP: time - Manual
     
  3. 25. Mai 2010
    AW: mehrere Abfragen & Darstellung

    in der DB ist "datum" nen timestamp - jedoch vom eintragen in die db und nicht entsprechend für den termin (ist ja sicher gefordert)
     
  4. 25. Mai 2010
    AW: mehrere Abfragen & Darstellung

    Das Datum und Uhrzeiten getrennt sind, finde ich Persönlich sehr hinderlich, wenn ein Termin mal von 23:00 bis 01:00 Uhr geht!

    Besser wäre wenn du 2 Felder anlegst `datum-von`, `datum-bis` und die Felder auf Timestamp setzt!
    Guck dir mal die Funktionen an: FROM_UNIXTIME und UNIX_TIMESTAMP


    Das sollte dir den Aktuellen und den Nächsten Termin für einen Bestimmten Raum ausgeben!
    PHP:
    $abfrage  "SELECT * FROM `veranstaltungen` WHERE `raum` = ' $raum ' AND `datum-von` >= '"  $_SERVER [ 'REQUEST_TIME' ] .  "' AND `datum-bis` <= '"  $_SERVER [ 'REQUEST_TIME' ] .  "' AND `datum-bis` > '"  $_SERVER [ 'REQUEST_TIME' ] .  " ORDER BY `datum-von` ASC LIMIT 2" ;
     
  5. 25. Mai 2010
    AW: mehrere Abfragen & Darstellung

    ok, dann ist meine beschreibung noch nicht genau genug gewesen:

    Es handelt sich dabei um ein Weiterbildungszentrum und die Termine würden ca. 7Uhr - 18Uhr sein, daher die Trennung von Datum/Uhrzeit da es so -imho- übersichtlicher ist.

    Desweiteren ist das Skript soweit fertig und funktioniert - es soll dieser Punkt noch überarbeitet werden.

    "Leider" bin ich kein Programmierer und schau sobald ihr mir nicht geläufige Schlagwörter bietet nach - aber trotzdem verstehe ich nicht immer alles, wenn es also einfachere Formulierungen gibt, dann spart nicht daran bitte
     
  6. 26. Mai 2010
    AW: mehrere Abfragen & Darstellung

    Ist ungetestet, hoffe das ist das, was du gemeint hast.

    Voraussetzung ist, dass uhrzeit_von und uhrzeit_bis als Timestamp vorliegen (ist wirklich empfehlenswerter), da dann mit ORDER BY einfach sortiert werden kann von morgens bis abends.

    Mit der Funktion kannst du Termine von heute oder morgen abrufen, einfach indem du einen anderen Parameter als $datum übergibst.

    PHP:
    <? php
    function  getRaumbelegung ( $raum $datum = date ( "d.m.Y" )) {
        include(
    'admin/include/include.php' );
        
        
    $rueckgabe  = array();
        
        
    $abfrage  "SELECT * FROM veranstaltungen WHERE raum='" . $raum . "' AND termin='" . $datum . "' ORDER BY uhrzeit_von ASC" ;
        
    $ergebnis  mysql_query ( $abfrage );
        
        if (
    $ergebnis ) {
            while (
    $row  mysql_fetch_array ( $ergebnis )) {
              
    $rueckgabe [] =  $row ;
            }
        }
        
        return 
    $rueckgabe ;
    }

    $raeume  = array( "1a" "1b" "3f" );

    print 
    "<table>\n" ;
    for (
    $i = 0 $i < count ( $raeume );  $i ++) {
        print 
    "<tr>\n" ;
        print 
    "  <td>" . $raeume [ $i ]. "</td>\n" ;
        print 
    "  <td>\n" ;
        foreach (
    getRaumbelegung ( $raeume [ $i ]) as  $key => $value ) {
            print 
    "    " . date ( "H:i" $key [ 'uhrzeit_von' ]). " - " . date ( "H:i" $key [ 'uhrzeit_bis' ]). " Uhr - " . $key [ 'veranstaltung' ]. " (" . $key [ 'v_leiter' ]. ")<br />\n" ;
        }
        print 
    "  </td>\n" ;
        print 
    "</tr>\n" ;
    }
    print 
    "</table>" ;
    ?>
    Für den Folgetag kannst du
    PHP:
    foreach ( getRaumbelegung ( $raeume [ $i ],  date ( "d.m.Y" strtotime ( "tomorrow" )) as  $key => $value ) {
    benutzen. Ist zwar keine elegante Lösung, aber eine, die funktionieren sollte ^^''
     
  7. 26. Mai 2010
    AW: mehrere Abfragen & Darstellung

    danke an powernator,
    die möglichkeit mit den timestamps schau ich mir grad nochmal genau an. worauf ich jetzt gestoßen bin und es ist mir fast schon peinlich:

    ich schaffe es nicht über ein formular ein textfeld in die db zu speichern.

    Es soll auf der startseite noch eine art hinweisbox geben die nur erscheint wenn es einen text gibt.
    Das ganze darstellen und soweiter klappt wunderbar, wenn ich daten manuell in die datenbank pflege wirds angezeigt, wenn nix vorhanden ist eben nicht (genau wie gewünscht also)

    nur die eingabe über ein formular in die db klappt nicht.

    Die DB:
    PHP:
    CREATE TABLE  IF  NOT EXISTS  ` info ` (
      `
    id int ( 11 NOT NULL ,
      `
    text varchar ( 200 NOT NULL
    ENGINE = MyISAM  DEFAULT  CHARSET = latin1 ;
    Der Code der nicht ganz klappt.

    - es soll nur einen eintrag in der db geben der immer überschrieben wird. (ticker wird nur für kurze, nicht wichtige nachrichten genutzt ala "XY bitte bei ZX melden")
    - Formatierung wird noch angepasst, aber das eintragen(überschreiben) in der DB sollte schon klappen ;(
    PHP:
    <? php 
    session_start
    ();  //Überprüfen ob der Admin auch eingeloggt ist
    if(!isset( $_SESSION [ 'admin' ])) {
        
    header ( 'Location: index.php' );
    }

    include(
    'include/include.php' );  //Verbindung mit der Datenbank herstellen

    $text  $_POST [ "text" ];
    $datum  time ();
    ?>

    <html>

        <head>

            <!-- Title der Seite -->
            <title>WBZ Verwaltung - Ticker &auml;ndern</title>

            <!-- Cascading Style Sheets extern einbinden -->
            <link rel="stylesheet" type="text/css" href="../css/main.css">
            <script language="javascript" src="calendar.js"></script>
        </head>

        <body>

            <!-- Gesamte Seite basierte auf dieser tabelle -->
            <table border="0" align="center" width="800">

                <tr>

                    <!-- Obere Navigation beginnt ab hier -->
                    <td align="center">

                        <div id="navi">

                        <?php  include( 'include/navi.php' );  ?>

                        </div>

                    </td>
                    <!-- /Obere Navigation endet ab hier -->

                </tr>

                <tr>

                    <!-- Dynamischer Inhalt beginnt ab hier -->
                    <td align="center">

                        <div id="inhalt">

                        <?php
                        
    if(isset( $text ))

                        {
                            
    $abfrage  "UPDATE info SET text='" . $ticker . "' WHERE id='1'" ;
                            
    $ergebnis  mysql_query ( $abfrage );

                                    if(
    $ergebnis )

                                    {
                                
                                    
    ?>

                                        <p align="center">Der Ticker wurde erfolgreich ge&auml;ndert.</p>

                                        <p align="center"><img src="bilder/loading.gif"></p>

                                        <script type="text/javascript">

                                        <!--

                                        setTimeout("location.href='veranstaltungen_ansehen.php'",1500);

                                        //-->
                                        </script>

                                    <?php
                                
                                    
    }

                                    else
                                    {

                                        
    ?>

                                        <p id="link" align="left" valign="top"><a href="javascript:history.back();"><img src="bilder/zurueck.png" border="0"></a></p>
            
                                        <p align="center">Der Ticker wurde <strong>nicht </strong>erfolgreich ge&auml;ndert.</p>


                                        <?php
                                    
    }
                        }
                        else 

                        {

                        
    ?>

                            <p align="center"><strong>Ticker &auml;ndern</strong></p>

                            <form name="form" action="<?php $_SERVER [ "PHP_SELF" ];  ?>" method="post">

                                <table id="form_tabelle" border="0" width="90%" cellpadding="5">

                                    <tr>

                                            <td>Ticker:</td>
                                            <td><input type="text" name="ticker" size="100"></td>

                                    </tr>
                                    <tr>

                                            <td colspan="2" align="right"><input type="submit" value="Hinzuf&uuml;gen"></td>

                                    </tr>


                                </table>

                            </form>
                            
                        <?php

                        
    }

                        
    ?>

                        </div>

                    </td>
                    <!-- /Dynamischer Inhalt endet ab hier -->

                </tr>

            </table>
            <!-- /Gesamte Seite endet hier -->

        </body>

    </html>
    ...der grundgerüst selber wurde mir gecoded, jetzt bin ich jedoch selber am rumfrickeln - daher nicht wundern falls etwas darin "gut gelöst" aussieht -> ich wars wahrscheinlich nicht =D

    /e - wer lust hat kann mir auch gerne in icq zwischendurch bei fragen zur seite stehen - 282601848
    wäre hin und wieder nützlich =)
     
  8. 26. Mai 2010
    AW: mehrere Abfragen & Darstellung

    so
    PHP:
    $abfrage  "UPDATE info SET text='" . $ticker . "' WHERE id=1" ;
    id ist vom typ int, daher ohne ' oder "
    was auch immer hilft, ist mysql_error()
     
  9. 26. Mai 2010
    AW: mehrere Abfragen & Darstellung

    PHP:
    $abfrage  "UPDATE info SET text='" . $ticker . "' WHERE id=1" ;
                            
    $ergebnis  mysql_query ( $abfrage );
                            
                            echo 
    mysql_error ();
    die hochkommata waren leider nicht der fehler.
    mysql_error() habe ich so in eingebunden, da es ja die fehlermeldung der letzten mysql-funktion ausgibt (müsste in diesem fall ja mysql_query sein) oder müsste ich das noch anders einbinden.
    Gibt aufjedenfall nichts aus.

    Ok, falls einer Zeit&Lust hat könnte er das auch neu schreiben, das dürfte weniger Aufwand sein als mein code da oben komplett auf Fehler zu untersuchen:

    Was ich bräuchte:
    ein formular welches eigl. nur einen text wie "XY bitte XZ anrufen" in die DB speichert bzw. den alten Eintrag mit ID1 überschreibt.
    eine möglichkeit das textfeld in der db wieder zu löschen (text = NULL) damit es so auch wieder ausgeblendet wird durch
    PHP:
    if ( $ticker  !=  NULL )
    wobei $ticker den text enthält.

    am liebsten wäre mir wie oben bereits gezeigt ein formular feld mit submit ganz normal und daneben vlt. noch nen button mit dem man den ticker wieder auf null setzt

    Das ganze passe ich dann selber ans Layout etc. an, aber die funktionen bzw. der code dafür wäre ganz lieb =)
     
  10. 27. Mai 2010
    AW: mehrere Abfragen & Darstellung

    mach dir mal eine dummy datei und teste dein update.
    wenn's läuft hast du ja eigentlich schon dein form dazu, sonst liegt das problem wo anders.

    noch was weil ich das gerade seh CHARSET=latin1

    mach CHARSET=utf8

    dann wirst du mit sprachen weniger probleme bekommen, ist nur eine anregung.
     
  11. 27. Mai 2010
    AW: mehrere Abfragen & Darstellung

    ok, werd ich nachher auf der arbeit mal testen.

    gibt es zu der thematik (formulare & abfragen) eigene tutorials/lektüre die ich mir mal anschauen könnte? So langsam packt mich das ganze auch vom ehrgeiz her und ich find zu den einzelthemen zwar tutorials - aber bisher keins in dem beides miteinander gezeigt wird.
     
  12. 27. Mai 2010
    AW: mehrere Abfragen & Darstellung

    Schau dir mal das Quakenet php Tut an, bietet die elementarsten Sachen an Abfragen, Formularen etc.

    Quakenet/#php Tutorial - de - Einleitung

    oder halt selfphp

    SELFHTML: PHP
     
  13. 27. Mai 2010
    AW: mehrere Abfragen & Darstellung

    @neolein
    thx - aber mit denen arbeite ich schon


    so, ich denke ich hab das problem etwas lokalisieren können in der formular sache.
    Das schreiben in die DB klappt wenn ich den Code dafür außerhalb des IF habe, wenn ich jedoch den Code normal innerhalb des IF habe wird er wohl nie aufgerufen.
    Nach vielen Quellen und Tutorials scheine ich es zwar richtig gemacht zu haben, aber irgendwie wohl doch nicht.

    PHP:
    <? php 
    session_start
    ();  //Überprüfen ob der Admin auch eingeloggt ist
    if(!isset( $_SESSION [ 'admin' ])) {
        
    header ( 'Location: index.php' );
    }

    include(
    'include/include.php' );  //Verbindung mit der Datenbank herstellen

    $text  $_POST [ "text" ];
    $datum  time ();
    ?>

    <html>

        <head>

            <!-- Title der Seite -->
            <title>WBZ Verwaltung - Ticker &auml;ndern</title>

            <!-- Cascading Style Sheets extern einbinden -->
            <link rel="stylesheet" type="text/css" href="../css/main.css">
            <script language="javascript" src="calendar.js"></script>
        </head>

        <body class="admin">
            <center><img src="bilder/wbz_logo_v2.png" border="0" width="640" height="100"></center>
            <!-- Gesamte Seite basierte auf dieser tabelle -->
            <table border="0" align="center" width="800">

                <tr>

                    <!-- Obere Navigation beginnt ab hier -->
                    <td align="center">

                        <div id="navi">

                        <?php  include( 'include/navi.php' );  ?>

                        </div>

                    </td>
                    <!-- /Obere Navigation endet ab hier -->

                </tr>

                <tr>

                    <!-- Dynamischer Inhalt beginnt ab hier -->
                    <td align="center">

                        <div id="inhalt">

                        <?php                    
                        
    if( $send )
                        {
                            
    $abfrage  "UPDATE info SET text='" . $ticker . "'" ;
                            
    $ergebnis  mysql_query ( $abfrage );
                            
                            echo 
    mysql_error ();

                                    if(isset(
    $ergebnis ))

                                    {
                                
                                    
    ?>

                                        <p align="center">Der Ticker wurde erfolgreich ge&auml;ndert.</p>

                                        <p align="center"><img src="bilder/loading.gif"></p>

                                        <script type="text/javascript">

                                        <!--

                                        setTimeout("location.href='ticker_aendern.php'",1500);

                                        //-->
                                        </script>

                                    <?php
                                
                                    
    }

                                    else
                                    {

                                        
    ?>

                                        <p id="link" align="left" valign="top"><a href="javascript:history.back();"><img src="bilder/zurueck.png" border="0"></a></p>
            
                                        <p align="center">Der Ticker wurde <strong>nicht </strong>erfolgreich ge&auml;ndert.</p>


                                        <?php
                                    
    }
                        }
                        else 

                        {
                            
    $abfrage  "SELECT text FROM info" ;
                            
    $ergebnis  mysql_query ( $abfrage );
            
                            
    $datensatz  mysql_fetch_array ( $ergebnis );

                            
    $tickerid  $datensatz [ "id" ];
                            
    $orig_ticker  $datensatz [ "text" ];

                        
    ?>

                            <p align="center"><strong>Ticker &auml;ndern</strong></p>

                            <form name="form" action="<?php $_SERVER [ "PHP_SELF" ];  ?>" method="post">

                                <table id="form_tabelle" border="0" width="90%" cellpadding="5">

                                    <tr>

                                            <td>Ticker:</td>
                                    </tr>
                                    <tr>
                                            <td><center><textarea cols="90" rows="5" type="text" name="ticker" ><?php  echo  $orig_ticker ?></textarea></center></td>
                                    </tr>
                                    <tr>

                                            <td colspan="2" align="right"><input type="submit" name="send" value="&Auml;ndern"></td>

                                    </tr>

                                </table>
                                <table>
                                    <tr>
                                        <td>
                                            <div id="index_ticker_div">
                                                <p id="desc_ticker_desc"><img src="bilder/wand32.png" style="margin-left: 20px;" width="32" height="32">&nbsp;<strong>Formatierung</strong></p>
                                                <p id="desc_ticker"><strong>Fett:</strong><br> Den Fett zu schreibenden Text in folgenden Code einbetten <br>&lt;strong&gt;...Text...&lt;/strong&gt;</p>
                                                <p id="desc_ticker"><strong>Zeilenumbruch:</strong><br> Um einen Zeilenumbruch zu erzeugen, den folgenden Code verwenden <br> &lt;br&gt;</p>
                                                <br>
                                                <p id="desc_ticker_desc" style=><img src="bilder/warning32.png" style="margin-left: 20px;" width="32" height="32">&nbsp;<strong>Hinweise</strong></p>
                                                <p id="desc_ticker"><strong>Darstellung:<br></strong>Der im Textfeld dargestellte Text wird -abgesehen von &lt;...&gt; Tags- so auch auf dem Tageswegweiser dargestellt.</p>
                                                <p id="desc_ticker"><strong>Löschen / Deaktivieren:<br></strong>Zum L&ouml;schen und deaktivieren des Tickers den Inhalt des Textfeldes löschen und mit "&Auml;ndern" best&auml;tigen.</p>
                                            </div>
                                        </td>
                                    </tr>
                                </table>
                            </form>
                            
                        <?php

                        
    }

                        
    ?>

                        </div>

                    </td>
                    <!-- /Dynamischer Inhalt endet ab hier -->

                </tr>

            </table>
            <!-- /Gesamte Seite endet hier -->

        </body>

    </html>
    Beim ersten Aufruf gibt es die Variable $send noch nicht, beim Drücken des Ändern Buttons soll diese jedoch erzeugt werden und damit dann die IF Bedingung eigl. erfüllen. Das Button Attribut
    PHP:
    < input type = "submit"  name = "send"  value = "&Auml;ndern"
    name wird ja wenn ich es nun richtig verstanden hab nach dem drücken eine Variable und kann daher für die IF Bedingung genutzt werden.
    Warum sie zur Variable wird hab ich noch nicht ganz durchschaut, versuchs mir aber grad zu Gemüte zu führen, das ist aufjedenfall das was ich so jetzt verstanden hab durch die Tutorials/Manuals/etc.

    Wenn einer von euch mal drüber schauen könnte, vlt. findet ihr ja den Fehler - ich bin nur noch am rätseln und probiere mittlerweile fast nur noch Try&Error mäßig alles mögliche durch, bisher ohne Erfolg.
     
  14. 27. Mai 2010
    AW: mehrere Abfragen & Darstellung

    Ich bin mir zwar nicht 100%ig sicher, aber ich meine mit if($send) isses nicht getan, du arbeitest doch vorher und nachher auch mit isset(), wieso da nicht? also ich würde es mit if(isset($send)) machen oder if ($send == true).

    Probiers mal aus.
     
  15. 27. Mai 2010
    AW: mehrere Abfragen & Darstellung

    habe es bereits mit if(isset($send)) ausprobiert, wird trotzdem übersprungen - 2. sachen teste ich gleich mal eben

    /done - big thx an Neo =)
     
  16. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.