kostenloser Webspace werbefrei: lima-city


Zu viele Eingabevariablen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Hallo, liebe Gemeinde.
    Für mich eröffnet sich wieder ein kleines Problem:
    Ich arbeite an einem "tag/re">ref="/tag/dienstplan">Dienstplan" den ich über PHP erstellt hab, und wo es mehr als ein Paar Post braucht um die benötigten Daten zu speichern. Im ganzen also Mitarbeiter*Datum*Arbeitszeit Postfelder.
    Fragt nicht wie ich das hinbekommen hab, jedenfalls funktioniert es erst mal, abér nur so lange es nicht zu viele Mitarbeiter werden. ab 8- -- dann reichen offensichtlich die Postfelder nicht mehr, es kommt:

    Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0

    Ich habe in der php.ini den entsprechenden Eintrag gesucht und geändert. Hilft nix, er meldet das immer wieder. Was kann ich tun??:wall:

    Danke für eure Hilfe,
    mit den freundlichsten Grüßen, Frank
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,

    ich kenne selbst das Problem mit dem Dienstplan.
    Eine Möglichkeit um die Postübergaben zu minimieren, ist es mit Arrays zu arbeiten.
    Hier ein nützlicher Link dazu: http://stackoverflow.com/questions/9073690/post-an-array-from-an-html-form-without-javascript

    MFG Micha
  4. Hallo Frank,

    "Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0"

    Wo hast Du gehostet? Vorausgesetzt du kannst die php.ini editieren, kannst Du natürlich auch einfach den Parameter etwas höher stellen damit es läuft.

    Den Vorschlag von Michael mit den Arrays finde ich gut, ich befürchte aber wenn Du bei Deinem Konzept der vielen Felder bleibst, dann wirst Du auch bei den Array irgendwann an die Grenzen kommen

    Langfristig solltest du mal Dein Konzept überprüfen ob wirklich mehr als 1000 Felder gleichzeitig editiert werden müssen. Vielleicht kannst Du uns ja mal Deine Struktur zeigen....

    Gruss Dunkeltuten
    :spammer:
  5. Hallo Frank,

    Eventuell wäre es sinnvoll, wenn du dein Programm mit AJAX erweiterst.
    Ich glaub kaum, dass ein Mitarbeiter über 1000 Felder auf einmal editiert und anschließend absendet.
    Du könntest dann zum Beispiel immer nur ein Feld, nachdem es editiert wurde, absenden - und hast das Problem mit max_input_vars nicht mehr.


    Easy-fix (für kurze Zeit würde auch das funktionieren):
    In der PHP-Konfiguration gibt es eine Einstellung "map_input_vars" die vorgibt wie viele Eingaben du auf einmal Absenden kannst.

    Bei manchen Hostern kannst du diese Option in einer .htaccess Datei selbst editieren. https://www.a2hosting.com/kb/developer-corner/php/using-php-directives-in-custom-htaccess-files/setting-the-max-input-vars-directive-in-an-htaccess-file

    Bei anderen Hostern musst du den Hoster kontaktieren und um eine Erhöhung in der php.ini bitten.

    Beitrag zuletzt geändert: 17.8.2016 9:35:38 von javaphp
  6. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Hallo liebe Gemeinde, erst mal herzlichsten Dank für eure Hilfen.

    Sinngemäß ist es eine Tabelle mit waagerecht Namen und senkrecht Datum Monat. Also braucht es die max 31Tage mal xMitarbeiter in dessen Feldern die Arbeitszeit, Datum und die MitarbeiterID eingetragen wird. Hab das jetzt auf 3 Einträge(2davon laufen über hidden, könnte ich noch koppeln.) pro feld reduziert. So passt es für mind. 10 Mitarbeiter. Hab nun auch schon rausgefunden, dass es nur schwerlich machbar ist die 1000 zu verändern. Da das alles nur Hobby ist werd ich mit der Einschränkung leben können/müssen. Auf Arrys bin ich schon ausgewichen. Bin aber auch bei weitem noch nicht so fit damit um alle Möglichkeiten damit auszuschöpfen.

    Für die, die es interessiert mal unten den Code.
    Zur Ansicht, gibt es hier einen Screen-Shot anzuzeigen?

    Ich danke euch für eure Hilfe, allen noch eine schöne Woche,
    mit den freundlichsten Grüßen, Frank

    ?>
    <h1 align="center" style="background: #008000;">Gruppenleiterbereich-Dienstplanung</h1>
    <p align="center">
    <table border="0" style="float:center;" bgcolor="#C5C586" cellpadding="2" cellspacing="3" summary="" width="100%" style="font-size:100%">
        <tr>
            <td  align="center" valign="middle" style="width: 20%;"><a href="../zhdStartb.php">Startseite</a></td>
            <td align="center" valign="middle" style="width: 20%;"><a href="gl-dienstplanung.php">Dienstplanung - Start</a>
            <td align="center" valign="middle" style="width: 20%;"><a href="gl-dienstplanung.php">Dienstplanung - Neuer Monat</a>
            <td align="center" valign="middle" style="width: 20%;"><a href="gl-dienstplanung_bearbeiten.php">Dienstplanung - Bearbeiten </a>
        </tr>
    </table>
    </p>
    <?php
    // ende kopf------------------------------------------------------
    // Gruppenleiter in Kopftabelle eintragen--------------------------------------------------
    
    
    //Beginn der Tabellenabfrage für Mitglieder  Uberschrift
    $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
    mysqli_select_db($con,$_db_datenbank) ;
    $sql = "SELECT * FROM zhd_mitarbeiter" ;
    $res = mysqli_query( $con, $sql )OR die("Error: $res <br>".mysql_error());
    $num = mysqli_num_rows($res);
    if ($num >0)
    {
    //echo "<font size='5'>Hallo,".$vname."  ".$nname.", es gibt Eintr&auml;ge :". $num."<br /><br /></font>" ;
         // Überschrift
                       // Tabellenbeginn Einrichtung
         echo "<table border='3' cellpadding='3' style='font-size: 15px;' width='100%'>";
    
         echo "     <tr bgcolor='#11ff33' >
                    <td >Id</td>
                    <td >Vorname</td>
                    <td >Familienname</td>
                    <td >A.gruppe</td>
                    <td >P.:nummer</td>
                    <td >Telefon</td>
                    <td >E-Mail</td>
                    <td >Stammeinrichtung</td>
                    </tr>";
    
     while ($zeile = mysqli_fetch_array( $res))
    {
    if($_SESSION['pnummer']==$zeile['pnummer'])
      {
        echo "<tr bgcolor='#cccccc'>
                    <td>".$zeile['id']."</td>
                    <td>".$zeile['vname']."</td>
                    <td>".$zeile['nname']."</td>
                    <td bgcolor='#FF00FF'>".$_SESSION['gruppe']."</td>
                    <td>".$zeile['pnummer']."</td>
                    <td>".$zeile['telefon']."</td>
                    <td>".$zeile['email']."</td>
                    <td>".$zeile['stamm1']."</td>
                    </tr> ";
                    $stamm1= $zeile['stamm1'];
                    $stamm2= $zeile['stamm2'];
                    $stamm3= $zeile['stamm3'];
                    $stamm4= $zeile['stamm4'];
                    $ag=  $zeile['gruppe'];
                    $funk=$zeile['funktion'];
    
         } //klammer von if name name
        } //Klammer von while
       echo "</table>"  ;
        }  //Klammer nach if $num
    mysqli_free_result( $res );
    mysqli_close($con);
    // Ende Gruppenleiter in Kopftabelle eintragen--------------------------------------------------
    //Mitarbeiter ins Arry eintragen-------------------------------------------
    
    $gruppe=$_SESSION['gruppe'];
    $bereich=$_SESSION['bereich'];
    //Beginn der Tabellenabfrage für Mitglieder  Uberschrift
    $mitarbeiter=array();
    $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
    mysqli_select_db($con,$_db_datenbank) ;
    $sql = "SELECT * FROM zhd_mitarbeiter WHERE bereich = '$bereich' AND gruppe ='$gruppe'" ;
    
    $res = mysqli_query( $con, $sql )OR die("Error: $res <br>".mysql_error());
    $num = mysqli_num_rows($res);
     //Mitarbeiterarry geht hier los
    
    $ma=0;
    $mitarbeiter= array()  ;
    $mitarbeiterID= array()  ;
    
    if ($num >0){while ($zeile = mysqli_fetch_array( $res))
    {$ma++;
    $mitarbeiter[$ma]=$zeile['nname'];
    $mitarbeiterID[$ma]=$zeile['id'];
    
    } //Klammer von while
    }  //Klammer nach if $num
    mysqli_free_result( $res );
    mysqli_close($con);
    //Ende Mitarbeiter ins Arry eintragen-------------------------------------------
    //Auswahl des Monats und Jahres.
    ?>
    <form  action="gl-dienstplanung_bearbeiten.php" method="post">
    <table align="center" style="font-size: 100%; align:   " border='3' cellpadding='3'  width='20%'>
    <tr bgcolor='#0eeeee'>
    <?php
    $damo= "monat";
    $dm= date('m');
     echo "
      <td align='center'> Monat: <select   name='$damo' size='1'>;
                        <option><li>$dm</li></option>
                            <option><li>01</li></option>
                            <option><li>02</li></option>
                            <option><li>03</li></option>
                            <option><li>04</li></option>
                            <option><li>05</li></option>
                            <option><li>06</li></option>
                            <option><li>07</li></option>
                            <option><li>08</li></option>
                            <option><li>09</li></option>
                            <option><li>10</li></option>
                            <option><li>11</li></option>
                            <option><li>12</li></option>
                            </select></td> ";
    $dy= date('Y');
    $daja= "jahr";
    echo"
    <td align='center' >Jahr :  <select   name='$daja' size='1'>
                            <option><li>$dy </li></option>
                            <option><li>2016</li></option>
                            <option><li>2017</li></option>
                            <option><li>2018</li></option>
    
                            </select></td>
    
    </tr>
    <tr  char=''></tr>
    </table>"
    ?>
    <p align="center">
    <input style="font-size: 20px;" type="submit" name ="" value="Bearbeiten starten" />
    </p>
    </form>
    
    <?php                              // hier geht es funktionierend los
    if(isset($_POST['monat']))
    {
    
      $datumm=$_POST['monat'];
      $datumj=$_POST['jahr'];
     $d1=1;
     $d2=2;
     $d3=$d1.'-'.$d2;
    
    // Abfrage, ob Monat schon vorhanden!!!
    $testdat= $datumm.'.'.$datumj;
    $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
    mysqli_select_db($con,$_db_datenbank) ;
    $sql = "SELECT * FROM dienstplan WHERE bereich = '$bereich' AND gruppe ='$gruppe' AND SUBSTRING(Datum,-7)=$testdat" ;
    
    $res = mysqli_query( $con, $sql )OR die("Error: $res <br>".mysql_error());
    $num = mysqli_num_rows($res);
        mysqli_query($con,$sql );
        mysqli_close($con);
     //Mitarbeiterarry geht hier los
    $dg=0 ;
    
    
    if ($num <1)
        {
           //Klammer von while
                     echo 'Schei&szlig;e noch nicht da';
        }
    if ($num >0)
    {
    //Arry festlegen für den Namens-namen zum versenden der einzelnen Arbeitszeiten-------------------------
    $datumj= $_POST['jahr'];
    $datumm= $_POST['monat'];
    $NAMEDATUM_0 = array();
    $NAMEDATUM_1 = array();
    $NAME_AZ = array();
    $NAME_ID = array();
    $NAME_0 = array();
    $NAME_BER = array();
    $NAME_GRU = array();
     $wochentage = array('So','Mo','Di','Mi','Do','Fr','Sa');
     for ($tag=1; checkdate ($datumm,$tag,$datumj); $tag++)
    
        {
         //Schleife zum Festlegen der Arry Namen-Namens
           $NAMEDATUM_0[$tag] = $tag;
        //Schleife zum Festlegen der Arry Namen-Namens
    
        //Festlegen des Datums zum Eintragen an den Tabellenanfang
        $datumarry[$tag] = date('d.m.Y',strtotime ($tag.'.'.$datumm.'.'.$datumj));
         //Ende Festlegen des Datums zum Eintragen an den Tabellenanfang
    
        //Festlegen des Wochentages  !! Das muss mit in die Tabelle genochmmen werden, nicht vergessen!!
           $d=strtotime($tag.".".$datumm.".".$datumj);
           $dz=date('w',$d);
    
        }
    //Ende des Arry festlegen für den Namens-namen zum versenden der einzelnen Arbeitszeiten-------------------------
    
    //Bestehende Arrys : $NAMEDATUM_0[$tag] : $wochentage[wt] : $mitarbeiter[$ma] : $datumarry[$tag]  ===============================
    
    ?>
    
    <form action="gl-dienstplanung_bearbeiten.php" method="post">
    
    <table align="center" style="font-size: smaller; align:  " border='3' cellpadding='3' width="100%" >
    <tr align='center' bgcolor='#00ffff'>
    <td align='center' width='5%'> Datum </td>
    <td width='2%' >W.Tag</td>
    
    <?php
    // Namen  Tabellenkopf eintragen
    for ($z=1;$z<=$ma;$z++)
    {
        echo "<td width='10%'>$mitarbeiter[$z]</td>" ;
    }
    ?>
    </tr>
    <?php
    
    
    $wochentage = array('So','Mo','Di','Mi','Do','Fr','Sa');
    
        $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
        mysqli_select_db($con,$_db_datenbank) ;
    // Hier geht die Tabelle los mit dem Datum
    for ($zt=1;$zt<$tag;$zt++)
    {
    $d=strtotime($zt.".".$datumm.".".$datumj);
    $dz=date('w',$d);
    if(($dz==0)or($dz==6))
    
    //wochentage festlegen
    {echo "<tr align='center' bgcolor='#FFBFB2'>";}
    else
    {echo "<tr align='center'>";}
    echo"<td>$datumarry[$zt]</td><td>$wochentage[$dz]</td>";
    for ($zma=1;$zma<=$ma;$zma++)
    {
    //name für Post ist das hier unten  aus dem Mitarbeiter und den einfachen datum
    
    echo "<td>" ;
    //Ab hier kommen die ganzen Post rein. Das sind die Eintragezellen!!!----------------------------
    // Alles andere ist das Beiwerk------------------------------------------------------------------
    ?>
    
     <?php
      $NAMEDATUM_1[$zt] = $NAMEDATUM_0[$zt].'-'.$zma;
      $NAME_AZ[$zt]     = 'AZ'.$NAMEDATUM_1[$zt] ;    // zum Beispiel: AZ15-1   : Arbeitszeit name am 15 bei der 1. Person
      $NAME_ID[$zt]     = 'ID'.$NAMEDATUM_1[$zt];
      $NAME_BER[$zt]     = 'BER' .$NAMEDATUM_1[$zt];
      $NAME_GRU[$zt]     = 'GRU' .$NAMEDATUM_1[$zt];
     // echo   $NAMEDATUM_1[$zt].'<br>'.$NAME_AZ[$zt].'<br>'.$NAME_ID[$zt];
        $Datum=$datumarry[$zt];
        $Idma= $mitarbeiterID[$zma];
    
        $sql = "SELECT * FROM dienstplan WHERE bereich = '$bereich' AND gruppe ='$gruppe' AND Datum='$Datum' AND idma='$Idma'" ;
        $res = mysqli_query( $con, $sql )OR die("Error: $res <br>".mysql_error());
        $num = mysqli_num_rows($res);
        mysqli_query($con,$sql );
        while ($zeile = mysqli_fetch_array( $res))
    
    {
    $arbeitszeit= $zeile['arbeitszeit'];
    }
    
    
    
      ?>
    
    <input type="hidden"    name="<?php echo $NAMEDATUM_1[$zt]; ?>" align="middle" style ='text-align:center;' value="<?php echo $datumarry[$zt];?>"  />
    <input type="text" size="10"     name="<?php echo $NAME_AZ[$zt]; ?>" align="middle" style ='text-align:center;' value= "<?php echo $arbeitszeit; ?>"  />
    <input type="hidden"    name="<?php echo $NAME_ID[$zt]; ?>"  value="<?php echo $mitarbeiterID[$zma];?>"  />
    
     <?php
    echo "</td> ";}
    // Hier ist Schluss mit den Zelleneintragungen, also alles nur in diesem Bereich------------------
    //------------------------------------------------------------------------------------------------
    echo "</tr>";
    
    } // hier endet das Eintragen der Tabelle Datumsliste
    ?>
    
    </table>
    
    <?php
    $endzt="endzt";
    $damo="monat1";
    $daja="jahr1";
     ?>
    <input type="hidden"   name="endzt" align="middle" value="<?php echo $zt; ?>"  />
    <input type="hidden"   name="damo" align="middle" value="<?php echo $datumm; ?>"  />
    <input type="hidden"   name="daja" align="middle" value="<?php echo $datumj; ?>"  />
    <p align="center">
    Nun mal schauen<br />
    <input  type="checkbox" name ="fertig2"  />
    <input style="font-size: 20px;" type="submit" name ="fertig1" value="eintragen" />  </p>
    </form>
    <?php
     }
    }
    //Einschreiben in die Datenbank
    //Schleife für eintragen in das Mitarbeiterarry
    if(isset($_POST['fertig2']))
    {
    
        $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
        mysqli_select_db($con,$_db_datenbank) ;
    
        for ($zt=1;$zt<$_POST['endzt'];$zt++)
        {
       $dat = date('d.m.Y',strtotime ($zt.'.'.$_POST['damo'].'.'.$_POST['daja']));
        echo $dat.'<br />';
                for ($zma=1;$zma<=$ma;$zma++)
                {
                    $DATname= 'AZ'.$zt.'-'.$zma;
                    $AZname= 'AZ'.$zt.'-'.$zma;
                    $IDname= 'ID'.$zt.'-'.$zma;
    
    
                    $AZ=$_POST[$AZname];
                    $ID= $_POST[$IDname];
    
    
    $sql = "UPDATE dienstplan SET arbeitszeit ='$AZ' WHERE Datum = '$dat' AND idma ='$ID'" ;
    
             mysqli_query($con,$sql );
    
                 }
        }
          mysqli_query($con,$sql );
         mysqli_close($con);
        }
         //hier endet das funktionierende
    ?>
  7. Das hier solltest du noch ausbessern:

    $datumm=$_POST['monat'];
    //...
    $testdat= $datumm.'.'.$datumj;
    //...
    $sql = "SELECT * FROM dienstplan WHERE bereich = '$bereich' AND gruppe ='$gruppe' AND SUBSTRING(Datum,-7)=$testdat" ;


    Damit kann ein Besucher den SQL Befehl verändern, indem er bei "monat" eine SQL-Injection macht.

  8. Für die, die es interessiert mal unten den Code.
    Zur Ansicht, gibt es hier einen Screen-Shot anzuzeigen?


    Screenshots & Bilder kannst du extern hochladen und dann verlinken! :wave:
    Beispiel: http://picpaste.de/

    oder einfach mal googeln nach "bilder public hochladen"

    Gruß Dunkeltuten
    :spammer:
  9. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Vielen Dank für den Tip,
    da probier ich es doch gleich mal aus. :smile:

    http://picpaste.de/Dienstl-ry8AMwQF.png

    Allen ein schönes Wochenende,
    Frank
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!