Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] max_input_vars problem
Forum PHP.pl > Forum > Przedszkole
pajonk85
Witam, jestem zielonka w php, napisałem sobie skrypt który pobiera z bazy danych mySQL dane, wyświetla je na stronie użytkownik zaznacza co ma mu się wydrukować, metodą post leci to do następnej strony gdzie mpdf to sobie obrabia i wypluwa PDF. Problem jest w tym że mój usługodawca wywala php w wersji 5.2 i zastępuje ją 5.6, a w tej wersji max liczba znaków to 1000, kiedy mój POST przesyła 38k znaków. Zmiana max_input_vars na większa nie wchodzi w grę.

Jakim sposobem przesłać taką liczbę znaków?
trueblue
max_input_vars nie odpowiada za liczbę znaków (ilość danych), ale liczbę zmiennych. Na pewno nie przesyłasz 38 tys. zmiennych metodą POST.
pajonk85
Cytat(trueblue @ 6.02.2020, 15:51:30 ) *
max_input_vars nie odpowiada za liczbę znaków (ilość danych), ale liczbę zmiennych. Na pewno nie przesyłasz 38 tys. zmiennych metodą POST.

ok mój błąd, to zmiennych wysyłam 4270.

co nie zmienia faktu że i tak jest dużo za dużo
xxdrago
Jakie błędy zwraca php?
pajonk85
nie zwraca błędów, a są na pewno ustawione na serwerze, żeby wyświetlało błędy. Jedynie przy zmianie na metode GET wyświetla że Request-URI Too Long.
A w POST jest taki objaw że tylko część danych się przesyła.
xxdrago
Spróbuj dodać na początku pliku:
  1. ini_set('display_errors', 1);
  2. ini_set('display_startup_errors', 1);


Muszą pojawiać się błędy jeżeli wartość jest większa niż ustalona na serwerze, tak samo będzie jeżeli prześlesz za duży plik metodą post.
nospor
Wysylasz postem ponad 4k pol? A wszystkie te pola zaznacza sobei uzytkownik? Przeciez to jest fizycznie niemozliwe by uzytkownik operowal na stronie taka iloscia pol/opcji.

TO wyglada jakby bylo "z lekka" zle zaprojektowane i az sie prosi o poprawke.
pajonk85
Cytat(xxdrago @ 6.02.2020, 16:00:25 ) *
Jakie błędy zwraca php?



Cytat(xxdrago @ 6.02.2020, 16:14:44 ) *
Spróbuj dodać na początku pliku:
  1. ini_set('display_errors', 1);
  2. ini_set('display_startup_errors', 1);


Muszą pojawiać się błędy jeżeli wartość jest większa niż ustalona na serwerze, tak samo będzie jeżeli prześlesz za duży plik metodą post.

dale nie sypie błędami :/
może dlatego że tworzy od razu PDF?

@nospor
oczywiście że jest to źle zaprojektowanie, jak by było dobrze to bym nie miał problemów.
Użytkownik wybiera sobie z listy to co potrzebuje (ma szukajke do tego), ja zrobiłem to tak że wszystko nawet to nie zaznaczone jest wysyłane dalej.
xxdrago
Jeżeli możesz, to pokaż kod może, będzie prościej znaleźć rozwiązanie.
nospor
Cytat
ja zrobiłem to tak że wszystko nawet to nie zaznaczone jest wysyłane dalej.
To nie mozesz tego szybko poprawic i wysylac tylko to co jest zaznaczone? Wydaje sie 5 minut roboty
pajonk85
uzytkownik widzi to
  1. echo ' <form method="post" action="etykieta_druk.php" name="myform" target="_blank">';
  2.  
  3. <table cellpadding="3" border=0 id=tabelka style="margin-top:10px;" >';
  4.  
  5. while($r = mysql_fetch_assoc($wynik))
  6. {
  7. echo '<tr>';
  8. echo "<td>".$r['MODEL']."</td>";
  9. echo "<td>".$r['NR']."</td>";
  10. echo '<td><label>Druk<input type="checkbox" name="druk'.$r['ID'].'" value="0" /></label></td>';
  11. echo '<td><label>Stan<br><select type="text" name="stan'.$r['ID'].'" ><option> </option><option>Używany</option></select></label></td>';
  12. echo '<td><label>uwagi<input type="text" name="uwagi'.$r['ID'].'" size="5" /></label></td>';
  13. echo '<td><label>l.kopi<input type="number" min="1" style="width:40px;" pattern="^\d+?" name="kopie'.$r['ID'].'" value="1" size="1" /></label></td>';
  14. echo '<td><label>Cena<input type="text" pattern="^\d+?" name="cena'.$r['ID'].'" size="5" /></label></td>';
  15. echo '<input type="hidden" name="id" value="'.$r['ID'].'" />';
  16. if($r['LOGO'] == null){echo '<td><img src="img/no.png"></td>';}else{echo '<td><img src="img/yes.png"></td>';}
  17.  
  18. echo "</tr>\n";
  19. }
  20.  
  21. echo '</table>';


wysylane jest do tego
  1. <?php
  2. if (isset($_POST["drukujPDF"]))
  3. {
  4. include('mpdf/mpdf.php');
  5. $mpdf=new mPDF('BLANK','A4','','',10,5,10,25,5,5);
  6. $tytul = 'Ety';
  7. $max = 'SELECT max(ID) FROM telefony';
  8. //$pyt = 'select * from telefony WHERE ID IN ( 1, 2, 3)';
  9.  
  10. include('sql.php');
  11.  
  12. $maxid = mysql_query($max) or die('blad');
  13. //$wynik = mysql_query($pyt) or die('blad');
  14. $tab ='';
  15. $tab1 ='';
  16. $nowy="Nowy VAT";
  17. $maxid = mysql_fetch_array($maxid);//sprawdz najwieksza wartosc id
  18. for($a=0; $a<=$maxid[0]; $a++)
  19. {
  20. if(isset($_POST['druk'.$a])) //sprawdza ktore zostaly zaznaczone do druku
  21. {
  22. $pyt = "select * from telefony WHERE ID=$a";
  23. $wynik = mysql_query($pyt) or die('blad');
  24. if($_POST['stan'.$a]==$nowy){$stan='<div style="width:47mm; height:5mm; font-size:11pt; font-weight:bold;">Nowy <span style="font-weight:normal;">23% VAT</span></div>';}else{$stan='<div style="width:47mm; height:auto; font-size:11pt; font-weight:bold;">'.$_POST['stan'.$a].'<span style="font-weight:normal;"> '.$_POST['uwagi'.$a].'</span></div>';}
  25.  
  26. while($r = mysql_fetch_assoc($wynik))
  27. {
  28. for($i=1; $i<=$_POST["kopie".$a]; $i++) //robi tyle kopi ile zaznaczylismy
  29. {
  30. $tab = '<div style="width:47mm; height:auto; border: 1px dotted #666; overflow:hidden; text-align:center; color:#000; font-family:verdana; float:left;">
  31. <div style="width:47mm; height:14mm; //border-bottom:1px solid #ccc;"><img src="img/'.$_POST['SKLEP'].'.jpg"></div>
  32. <div style="width:47mm;"><img src="'.$r['LOGO'].'" style="max-width:45mm; display:inline; margin-top:3px;"></div>
  33. <div style="width:47mm; height:5mm; font-size:10pt; font-weight:bold;">'.$r['MODEL'].'</div>
  34. <div style="width:47mm; height:17mm; font-size:9pt;">'.$r['OPIS'].'</div>
  35. '.$stan.'
  36. <div style="width:47mm; height:6mm; font-size:14pt; font-weight:bold; padding-bottom:4px; border-bottom:1px dotted #666;">'.$_POST['cena'.$a].',-</div>
  37. </div>';
  38. $tab1 .=$tab;
  39. }
  40. }
  41. continue;
  42. }
  43.  
  44. }
  45.  
  46. $mpdf->WriteHTML("$tab1");
  47.  
  48. $mpdf->Output('etykieta.pdf');
  49. $mpdf->Output('etykietki.pdf','I');
  50. }
  51. ?>
nospor
Pokaz funkcje filtruj()
pajonk85
Cytat(nospor @ 6.02.2020, 17:03:12 ) *
Pokaz funkcje filtruj()


ona nic nie zmienia, ukrywa tylko element tabelka.rows[i].style.display = "none";
nospor
Nic nie zmienia tylko ukrywa.... ukrycie to juz jest zmiana, ot taka ciekawostka wink.gif

Wywal generowanie pol poza formularz. Zas w funkcji filtruj() wrzucaj do forma tylko to co wybrane. Tym sposobem bedziesz wysylal tylko wybrane pola i nagle wszystko zacznie ci dzialac
pajonk85
Cytat(nospor @ 6.02.2020, 17:13:10 ) *
Nic nie zmienia tylko ukrywa.... ukrycie to juz jest zmiana, ot taka ciekawostka wink.gif

Wywal generowanie pol poza formularz. Zas w funkcji filtruj() wrzucaj do forma tylko to co wybrane. Tym sposobem bedziesz wysylal tylko wybrane pola i nagle wszystko zacznie ci dzialac


ooo pomysł genialny, tylko z js leże i kwiczę :/
a jakoś da się tego forma całego obrobić w PHP przed wysłaniem i żeby wysyłały się tylko te wartości gdzie ktoś zaznaczył checkbox?
nospor
Cytat
a jakoś da się tego forma całego obrobić w PHP przed wysłaniem
No jak obrobisz go w php? Zeby go obrobic w php, musisz wpierw go do php wyslac i tym samym wracamy do tego samego problemu wink.gif

Cytat
ooo pomysł genialny, tylko z js leże i kwiczę

Dobra, to inaczej. Zostaw jak masz teraz, a oprocz ukrywania pol, nadawaj im rowniez status DISABLED. Pola DISABLED nie sa wysylane formem.
LowiczakPL
a czy nie możesz zrobić sobie tablicy z 5 zmiennymi zamiast X zmiennych w pętli

czyli zamiast

  1. <input type="checkbox" name="druk'.$r['ID'].'" value="0" />


robisz

  1. <input type="checkbox" name="druk['.$r['ID'].']" value="0" />


i tak dla każdej zmiennej
trueblue
Cytat(LowiczakPL @ 6.02.2020, 17:35:12 ) *
a czy nie możesz zrobić sobie tablicy z 5 zmiennymi zamiast X zmiennych w pętli

czyli zamiast

  1. <input type="checkbox" name="druk'.$r['ID'].'" value="0" />


robisz

  1. <input type="checkbox" name="druk['.$r['ID'].']" value="0" />


i tak dla każdej zmiennej

Checkbox niezaznaczony nie zostanie wysłany. Nie ma znaczenia czy sobie zrobi typ tablicowy, czy odrębne zmienne. A jeśli byłyby wysłane, to i tak nie skróci ilości zmiennych.
nospor
@trueblue ale co ma do tego nie wyslanie checkboxa? Mysle ze @lowiczak mial na mysli by zrobic w ten sposob wszystkie pola, a to juz by pomoglo

aczkolwiek pewnie zmienne tablicowe i ich indeksy tez podchodza pod ten limit. ALe pewnosci nie mam bo nigdy nie musialem tak kombinowac wink.gif
pajonk85
Cytat(nospor @ 6.02.2020, 17:32:19 ) *
No jak obrobisz go w php? Zeby go obrobic w php, musisz wpierw go do php wyslac i tym samym wracamy do tego samego problemu wink.gif


Dobra, to inaczej. Zostaw jak masz teraz, a oprocz ukrywania pol, nadawaj im rowniez status DISABLED. Pola DISABLED nie sa wysylane formem.


mistrzu! jesteś genialny, zrobiłem. Co prawda inaczej troszkę bo użyłem JQ do tego i zrobiłem tak że wszystko jest disable oprócz pola drukuj, po zaznaczeniu checkbox wszystko w rzędzie robi się enabled i wysyłają się tylko wybrane.
DZIĘKUJE! biggrin.gif
trueblue
Cytat(nospor @ 6.02.2020, 18:00:19 ) *
aczkolwiek pewnie zmienne tablicowe i ich indeksy tez podchodza pod ten limit. ALe pewnosci nie mam bo nigdy nie musialem tak kombinowac wink.gif



No właśnie. Wykreśliłem tą kwestię w swojej odpowiedzi, ale jednak taka ciekawostka:
https://stackoverflow.com/a/45555765
nospor
No to zostaje tylko to co mowilem na poczatku: nie wysylac tych pol jak nie trzeba

Cytat
mistrzu! jesteś genialny, zrobiłem. Co prawda inaczej troszkę bo użyłem JQ do tego i zrobiłem tak że wszystko jest disable oprócz pola drukuj, po zaznaczeniu checkbox wszystko w rzędzie robi się enabled i wysyłają się tylko wybrane.
DZIĘKUJE!
O widzisz, dopiero teraz zauwazylem ze juz rozwiazane smile.gif Nom, takze na przyszlosc wal od razu z kodem a nie z tym co myslisz ze nalezy zrobic wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.