Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP und Postgresql Commands

Einklappen

Neue Werbung 2019

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

  • PHP und Postgresql Commands

    Hallo
    ich habe ein kleines Programm geschrieben, das leider nicht funktioniert. Ich versuche einen Mittwoch-Kalender anzeigen zu lassen, der auch gegebenfalls eine Veranstaltung anzeigen soll.
    Ich habe dafür auch eine Tabelle in Postgesql erstellt, weiß im moment nicht weiter
    Wäre dankbar für Tipps


    db.php:

    PHP-Code:
    <?php



    // Connecting, selecting database
    $dbconn pg_connect("host=ma-landau dbname=postgres user=??? password=???")
        or die(
    'Could not connect: ' pg_last_error());

    // Performing SQL query
    $query 'SELECT * FROM kalender';
    $result pg_query($query) or die('Query failed: ' pg_last_error());

    }
    index.php:

    PHP-Code:

    <?php
    setlocale
    (LC_TIME"de_DE");
    require_once 
    "db.php";


    function 
    getWednesdays($y$m)
    {
        return new 
    DatePeriod(
            new 
    DateTime("first wednesday of $y-$m"),
            
    DateInterval::createFromDateString('next wednesday'),
            new 
    DateTime("last day of $y-$m")
        );
    }

    function 
    getVeranstaltung($tagWert){
        
    $dbconn pg_connect("dbname=postgres");
        
    $result=pg_exec($connection_id"SELECT * veranstaltung from kalender WHERER 'tag'=$tagWert");  

        return 
    $result->pg_fetch_assoc();
    }

    ?>

    <html>
      <head>
        <meta charset="utf-8">
        
        <title>Mittwoch-Kalender</title>
        <style>
          
        </style>
      </head>
      <body>

        <h1>Mittwoch-Kalender</h1>


        
        <form action="addtermin.php" method="post">
            <table style="width:100%" border="1" cellpadding="5">
                <tr>
                    <th>Termin</th>
                    <th>Veranstaltung</th>
                </tr>
        <?php
        
        
    for( $monat=1$monat<13$monat++ ){
            foreach (
    getMittwoch(date('Y'), $monat) as $mittwoch) {
                
    $tagWert $mittwoch->format("dmY");
                echo 
    "<tr>";
                echo 
    "<td>";
                echo 
    "<input type="radio" name="tag" value="$tagWert" />"$mittwoch->format("l, d.m.Y");
                echo 
    "</td>";
                echo 
    "<td>";
                echo 
    getVeranstaltung($tagWert)['veranstaltung'];
                echo 
    "</td>";
                echo 
    "</tr>";
            }
        }

        
        
    ?>
        </table>

        <br />

        <p>Zeit und Veranstaltung: <input type="text" name="veranstaltung" /></p>
        <input type="submit" value="absenden" />
    </form>

    addtermin.php:

    PHP-Code:

    <?php
    require_once "db.php";


    $veranstaltung $_POST['veranstaltung'];
    $tag $_POST['tag'];

    if( !empty(
    $tag) || !empty($veranstaltung) ){
        
    $dbconn pg_connect("dbname=postgres");
        
    $query='INSERT INTO `kalender` (tag, veranstaltung) VALUES ($tag, "$veranstaltung")';
        echo 
    "<p>Die angegebenen Änderungen wurden übernommen. Vielen Dank.</p><br>";
        echo 
    "<a href='index.php'>Zurück</a>";
    } else {
        echo 
    "<p>Es wurde entweder kein Tag oder kein Termingrund eingetragen! <br>";
        echo 
    "Keine Änderungen wurden übernommen.</p><br>";
        echo 
    "<a href='index.php'>Zurück</a>";
    }

    ?>

  • #2
    das leider nicht funktioniert.
    Was sollte passieren und was passiert stattdessen?
    Bekommst du Fehlermeldungen?
    Falsches Ergebnis?

    So auf den ersten Blick: Du musst dir mal ansehen wie man in PHP mit Strings arbeitet.
    PHP-Code:
    $query='INSERT INTO `kalender` (tag, veranstaltung) VALUES ($tag, "$veranstaltung")'
    Wenn du diese Query absenden würdest - was du nirgendwo tust - würde
    Code:
    INSERT INTO `kalender` (tag, veranstaltung) VALUES ($tag, "$veranstaltung")
    so zur Datenbank gesendet werden
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Hier bist Du, was PHP betrifft, auf alle Fälle besser als im anderen Forum. Bleibt für mich die Frage, warum Du nicht gleich erst einmal das, was ich da schon sagte, behoben hast. Jetzt sehe ich auch die Tabelle in PG und frage mich, warum Du die beiden Felder als Serial definiert hast? Das is, vorsichtig formuliert, ungewöhnlich. Aber vielleicht hast Du ja einen spezifischen Grund dafür, den ich nur nicht verstehe.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Hallo
        ich habe nichts gemacht mit Sinn, es ist nicht so , dass ich selbst das richtig verstanden habe, sondern eher zusammen gewurschelt. Ich weiß nicht, was du mit Serial meinst.
        Das Programm soll alle Mittwoche in diesem Jahr anzeigen und es soll die Möglichkeit bestehen, das einer ausgewählt wird und dort ein termin eingetragen wird, welcher dann unter Veranstaltung augelistet werden sollte.


        Kommentar


        • #5
          Zitat von kuddel Beitrag anzeigen
          Hallo
          ich habe nichts gemacht mit Sinn,
          Ok. Glaube ich Dir jetzt sogar mal.

          es ist nicht so , dass ich selbst das richtig verstanden habe, sondern eher zusammen gewurschelt.
          Glaube ich Dir auch. Bin heute gut gelaunt.

          Ich weiß nicht, was du mit Serial meinst.
          Das ist der Datentyp, den Du verwendest hast. Doku-lesen ist ja heutzutage sowas von altmodisch, gell? Sonst würdest Du wissen:

          The data types smallserial, serial and bigserial are not true types, but merely a notational convenience for creating unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases).
          Aber weiter:

          Das Programm soll alle Mittwoche in diesem Jahr anzeigen und es soll die Möglichkeit bestehen, das einer ausgewählt wird und dort ein termin eingetragen wird, welcher dann unter Veranstaltung augelistet werden sollte.

          Code:
          test=*# select x::date as "Mittwoche dieses Jahr" from generate_series('2016-01-01'::date, '2016-12-31'::date, '1day'::interval) x where extract(dow from x) = 3;
           Mittwoche dieses Jahr
          -----------------------
           2016-01-06
           2016-01-13
           2016-01-20
           2016-01-27
           2016-02-03
           2016-02-10
           2016-02-17
           2016-02-24
           2016-03-02
           2016-03-09
           2016-03-16
           2016-03-23
           2016-03-30
           2016-04-06
           2016-04-13
           2016-04-20
           2016-04-27
           2016-05-04
           2016-05-11
           2016-05-18
           2016-05-25
           2016-06-01
           2016-06-08
           2016-06-15
           2016-06-22
           2016-06-29
           2016-07-06
           2016-07-13
           2016-07-20
           2016-07-27
           2016-08-03
           2016-08-10
           2016-08-17
           2016-08-24
           2016-08-31
           2016-09-07
           2016-09-14
           2016-09-21
           2016-09-28
           2016-10-05
           2016-10-12
           2016-10-19
           2016-10-26
           2016-11-02
           2016-11-09
           2016-11-16
           2016-11-23
           2016-11-30
           2016-12-07
           2016-12-14
           2016-12-21
           2016-12-28
          (52 Zeilen)
          
          test=*#
          Bitte.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Hallo
            Danke zunächst für die Arbeit, ich weiß das zu schätzen.
            Das mit dem Datentypen habe ich verstanden.
            Aber weiß nicht , was ich mit deiner obigen Liste anfangen soll.
            Ich wollte halt eine zweispaltige Tabelle haben, die in der linken Spalte die Mittwoche von heute bis Ende des Jahres zeigt. Und rechts gegebenfalls Termine.
            Links wollte ich neben den Mittwochen den Radio Button haben , sodass man einen anklicken kann und dann im Eingabefeld noch einen Termin hinzufügen , indem man die box ausfüllt und Speicher Button klickt. So hatte ich mir das vorgestellt.

            Kommentar


            • #7
              na, die von dir geforderte Ausgabe kann ja PHP übernehmen ...

              Andreas hat dir nur eine Abfrage präsentiert, die alle Mittwoche erzeugt .. die müssten natürlich SO erstmal in eine vernünftige Tabelle ..
              etwa mit den Spalten
              ID -> zur identifikation .. hier KÖNNTE serial oder sowas zum Einsatz kommen ..
              Datum -> eben ein ECHTER Datum Type .. date sollte Postgre auch können ..
              VeranstaltungID -> die eigentliche Veranstaltung würde ich in einer weiteren Tabelle ablegen, mit ein paar zusätzlichen Daten (etwa Wo, Was, Wieviele Plätze, Wo gibt es Karten usw ..)

              Dadurch, dass nicht zwingend JEDEN Mittwoch eine Veranstaltung ist, würde ich jetzt die Abfrage von Andreas modifizieren - nämlich, dass für jedes erzeugte Datum geschaut wird, ob ein Eintrag in dieser Tabelle existiert .. dann holt man sich per Join noch die zugehörigen Daten aus der "anderen" Tabelle und kann mit PHP eine "schöne" HTML-Tabelle ausgeben .. drumherum ein Formular - in der Tabelle die Radiobuttons mit ihrer ID als value ..

              Code:
              SELECT  
              Veranstaltungen.VeranstaltungID, VeranstaltungsInfo.Was, VeranstaltungsInfo.Wo,  x::date AS "Mittwoche dieses Jahr"  
              FROM
              generate_series(now(), '2016-12-31'::date, '1day'::interval) x  
              LEFT JOIN Veranstaltungen ON x=Veranstaltungen.Datum
              LEFT JOIN VeranstaltungsInfo ON VeranstaltungsInfo.ID=Veranstaltungen.VeranstaltungID  
              WHERE
              extract(dow from x) = 3 ;
              mal so als Vorschlag falls du das mit 2 Tabellen abbildest, wie ich hier beschrieben habe ... allerdings ungetestet ^^

              Diese Abfrage holt erst mal alle Mittwoche ab "heute" , schaut dann ob ein Eintrag in der Veranstaltungstabelle existiert - und holt dann noch die eigentlichen Daten zur Veranstaltung (Was und Wo... als Beispiel) ...
              Falls dort kein Eintrag existiert, sind die betreffenden Felder halt NULL ... nur das Datum wird immer noch geliefert

              Diese Abfrage würde ich jetzt für den praktischen Einsatz noch so modifizieren, dass PHP das End-Datum des aktuellen Kalenderjahres selbst dort einträgt ... damit wird das SQL automatisch "zukunftsfähig" und hört nicht am Jahresende schlagartig auf zu arbeiten
              "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

              Kommentar

              Lädt...
              X