Zu viele Eingabevariablen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
arbeitszeit
array
bereich
code
date
datum
dienstplan
eintragen
ende
feld
festlegen
gruppe
jahr
mitarbeiter
monat
post
re
tag
wochentag
zeile
-
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??
Danke für eure Hilfe,
mit den freundlichsten Grüßen, Frank
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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
-
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 -
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ä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ß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 ?>
-
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. -
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!
Beispiel: http://picpaste.de/
oder einfach mal googeln nach "bilder public hochladen"
Gruß Dunkeltuten
-
Vielen Dank für den Tip,
da probier ich es doch gleich mal aus.
http://picpaste.de/Dienstl-ry8AMwQF.png
Allen ein schönes Wochenende,
Frank -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage