phpsuchender: POST

Hallo zusammen,

ich steh irgendwie auf dem Schlauch, außerdem bin in nicht gerade ein PHP-Spezialist, vielleicht könnt ihr mir ja etwas helfen.

Ich soll eine Auswahlbox erstellen, in der man aussuchen kann, welches Jahr man sehen möchte. Es handelt sich um Projekte, die im Schnitt über mehrere Jahre gehen, d. h. wähle ich 2008 und es gibt Projekte, die zwar schon vor 2008 begonnen haben, sollen auch angezeigt werden, weil diese ja noch laufen.

So jetzt hat mein Kollege meint, man könnte das in die SELECT-Abfrage bei WHERE mit einer $Variablen abfragen, nur irgendwie kommt dabei nichts raus.

  
  
  
  
  
<?php  
$dbconn = pg_connect("host= dbname= user= password=") or die('Verbindungsaufbau fehlgeschlagen: ' . pg_las  
t_error());  
$query = "select min(date_part('year', kstbegin)) as projyearmin, max(date_part('year', kstende))  
          as projyearmax from kostenstelle  
           ";  
$result = pg_query($dbconn, $query) or die('Abfrage fehlgeschlagen: ' . pg_last_error());  
  
$bla = $_POST['jahr'];  
  
        if (isset($bla))  
        {  
        $datefilter = "kstbegin >= $bla-01-01 AND kstende <= $bla-12-31";  
        }  
        else  
        {  
        $datefilter = "";  
        }  
        echo $datefilter;  
echo "  
         <html>\n  
         <head>\n  
         <title>kostenstelleliste</title>\n  
         <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>\n  
         <link rel='stylesheet' type='text/css' href='lars.css' />  
         <script language='JavaScript' src='lars.js'></script>  
  
        <body>  
        <center>  
        <form action=\"  
        ";  
        echo $_SERVER['PHP_SELF'];  
        echo "  
        \" method=\"post\">  
  
        <table>  
                 <tr>  
                 <td>Jahr:</td>  
                 <td>  
        <select size=\"1\" name=\"jahr\" class=\"dropdown\">  
        <option value=\"*\"  selected>*</option>  
         ";  
  
        while ($row = pg_fetch_assoc($result)) {  
                $min = $row['projyearmin'];  
                $max = $row['projyearmax'];  
                }  
        for ($i = $min; $i <= $max; $i++)  
        {  
       echo "<option>$i</option>";  
        }  
  
       echo "   </select>  
                <td>  
                <div id=\"bottom\">  
                <input type=\"submit\" name=\"Suchen\" value=\"Suchen\" />  
                </td>  
                </tr>  
                </table>  
                </form>  
                </center>  
                ";  
//INTERNE PROJEKTE  
$query =  
"  
SELECT  kostenstelle_id, bezeichnung, kstbegin, kstende, projektleiter,  
        ret_mit_names(kostenstelle_id,curDate()) as mitarbeiter  
        FROM    (SELECT kostenstelle_id, bezeichnung, kstbegin, kstende, projektleiter  
        FROM kostenstelle  
        WHERE fs_firma=1  
        AND $datefilter  
        AND kostenstelle_id > 100049)  
  
  
        LEFT OUTER JOIN (SELECT a.fs_kostenstelle, COUNT(distinct fs_mitarbeiter) as mitsIntern  
        FROM    (SELECT mitarbeiter_id FROM mitarbeiter  
        WHERE fs_firma=1  
        AND eintritt<=current_date  
        AND ((austrITT Is null) OR (austritt > curDate()))  
        AND fs_mitarbeiterstatus = 1) im  
  

In dem $query wird dann diese $VARIABLE als datefilter aufgerufen.

Jetzt wird mir überhaupt nichts mehr, außer die Überschrift angezeigt.

Kann mir jemand helfen, ich verzweifle gerade

  1. Hallo,

    Kann mir jemand helfen, ich verzweifle gerade

    Kann ich mir vorstellen - Dein Code ist - sagen wir es mal vorsichtig - unübersichtlich und schlecht strukturiert.

    Was z.B. ist das:

      
            <center>  
            <form action=\"  
            ";  
            echo $_SERVER['PHP_SELF'];  
            echo "  
            \" method=\"post\">  
      
    ...
    

    für ein Konstrukt?

    Ich schlage vor, dass Du Dir eine übersichtlichere Programmierweise aneignest und vor allem das error_reporting von PHP einschaltest.

    In diesem Sinne..

    MfG
    cross

  2. Das ist ein bisschen viel Code zum mal eben anschauen ;-)
    Generell würd ich sagen, irgendwas in der Art
    WHERE Start < gewähltesDatum AND Ende > gewähltesDatum

  3. Hallo zusammen,

    ich steh irgendwie auf dem Schlauch, außerdem bin in nicht gerade ein PHP-Spezialist, vielleicht könnt ihr mir ja etwas helfen.

    Ich soll eine Auswahlbox erstellen, in der man aussuchen kann, welches Jahr man sehen möchte. Es handelt sich um Projekte, die im Schnitt über mehrere Jahre gehen, d. h. wähle ich 2008 und es gibt Projekte, die zwar schon vor 2008 begonnen haben, sollen auch angezeigt werden, weil diese ja noch laufen.

    So jetzt hat mein Kollege meint, man könnte das in die SELECT-Abfrage bei WHERE mit einer $Variablen abfragen, nur irgendwie kommt dabei nichts raus.

    Lies dir die Tipps für Fragende mal durch.

    Um eine Lösung zu finden bzw. dir beim Ansatz zu helfen benötigen wir teile deiner DB-Struktur (wie du die Projekte speicherst, vllt. Startdatum, Enddatum??)

    mfg

  4. Hi phpsuchender,

    $bla = $_POST['jahr'];

    if (isset($bla)) {

      
    Zuerst die Variable $bla zu setzen und direkt im Anschluss zu prüfen, ob diese existiert ist sinnlos. An dieser Stelle wird isset($bla) stets true ergeben, PHP also im IF-Block weiter arbeiten.  
      
    Du möchtest höchstwahrscheinlich prüfen, ob der Wert $\_POST['jahr'] existiert, also isset($\_POST['jahr']) schreiben. Auf die Variable $bla kannst du gänzlich verzichten.  
      
      
    
    > `        $datefilter = "kstbegin >= $bla-01-01 AND kstende <= $bla-12-31";`{:.language-php}  
      
    Nein! Auf keinen Fall! Du baust hier in dein Scripte gerade eine Sicherheitslücke ein, indem du dein Script anfällig für [SQL-Injections](http://de.wikipedia.org/wiki/SQL-Injection) machst. Was das ist, hatte ich übrigens grade erst [hier](https://forum.selfhtml.org/?t=184397&m=1222570) erklärt.  
      
      
    Viele Grüße,  
      ~ Dennis.
    
    -- 
    Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)
    
    1. echo $begrüßung;

      » ~~~php

      $bla = $_POST['jahr'];

      »         if (isset($bla)) {

      
      >   
      > Zuerst die Variable $bla zu setzen und direkt im Anschluss zu prüfen, ob diese existiert ist sinnlos. An dieser Stelle wird isset($bla) stets true ergeben, PHP also im IF-Block weiter arbeiten.  
        
      Das sollte man mit logischem Verstand annehmen, ist aber nicht so. isset() liefert nämlich auch dann false, wenn der Wert der Variablen null ist. Und das Resultat eines Lesezugriffs auf eine nicht vorhandene Variable ist null (plus eine Meldung vom Typ Notice, die PHP in der Default-Einstellung von error\_reporting nur unhörbar vor sich hin jammert).  
        
        
      echo "$verabschiedung $name";