Autor Zpráva
Vilak
Profil
Zdravím, mám formulář, ve kterém mám input s name "ids" a potřebuji, aby tento input fungoval klasicky ve formuláři, ve kterém je, ale taky ve formuláři, který je mimo. Viz kód (zjednodušený).

<?php
function a($b) {
  while ($row = $result->fetch_assoc()) {
  echo "
                  <form action=\"edit-page.php\" method=\"POST\"> <!-- FORMULÁŘ PRO JEDEN ŘÁDEK/PRODUKT -->
                      <div class=\"row mt-1 align-items-center $danger\" style=\"background-color: #88c7ff08;\">
                          <div class=\"col-lg-1\"><input class=\"form-control form-control-sm form_firm\" type=\"checkbox\" id=\"nabrouseno\" name=\"nabrouseno\" value=\"1\" onblur=\"document.nabrouseno.input.value = this.value;\"></div> <!-- CHECKBOX -->
                          <div class=\"col-lg-2\">
                              <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['ids']."\" name=\"ids\" id=\"nabrouseno\"> <!-- TENTO INPUT -->
                              <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['note']."\" name=\"note\">
                              <input type=\"submit\" name=\"edit_product\" value=\"Upravit/Smazat\" class=\"form-control form-control-sm btn btn-secondary btn-block\">
                          </div>
                      </div>
                  </form>
                  ";
  }
}
a($b);
?>
<form action="modules/products/edit-to-nabrouseno-products.php" method="POST" class="row form-group mt-2 pl-2 bg-info pt-1 pb-1 text-white" id="nabrouseno" name="nabrouseno">
    <span>Všechny zaškrtnuté produkty z brusírny vložit do Nabroušených produktů.</span>
    <input type="hidden" name="order_status_old" value="2">
    <input type="hidden" name="order_status_new" value="3">
    <input type="submit" name="nabrouseno" value="Vožit do Nabroušených produktů" class="ml-2">
</form>

Podle fotky to vypadá takto, a prostě chci, aby když se zaškrtnou checkboxy, tak aby se odeslalo jejich IDS někam jinam. ctrlv.cz/rOnX

PS: Napadá mě jen to upravit na jeden formulář a z ids udělat pole, ale přijde mi to zbytečně náročné, protože bych funkci musel duplikovat a jen ji změnit, protože ji využívám na více místech.

Jak bych to měl udělat? Poradíte? Díky moc! ;)
anonym_
Profil *
Vilak:
Cele to bude jeden formulář s X submity, kde si budeš při zpracování odchytavat, který byl stisknuty a s kterym radkem pracujes.
Vilak
Profil
anonym:
Už to mám částečně zpracované. Ale vážně nevím, jak si mám jednotlivé řádky odchytávat, abych věděl, se kterým budu pracovat.

Vypadá to teď takto (zjednodušeno):

function a($b)  {
  echo "<form action=\"edit-page.php\" method=\"POST\">";
  while ($row = $result->fetch_assoc()) {
    //vypis tabulky
                echo "
                    <div class=\"row mt-1 align-items-center $danger\" style=\"background-color: #88c7ff08;\">
                        <div class=\"col-lg-1\">";
                            if ($status_id == 2){ echo"<input class=\"form-control form-control-sm form_firm\" type=\"checkbox\" name=\"nabrouseno[$i]\" value=\"1\"> <!-- Jen pro určité řádky -->";}
                echo "    </div>
                        <div class=\"col-lg-2\">".$all_types."</div>
                        <div class=\"col-lg-2\"><input class=\"form-control form-control-sm form_firm\" type=\"text\" name=\"firm[$i]\" value=\"".$row['firm']."\" class=\"form_firm\" readonly></div>
                        <div class=\"col-lg-2\"><input class=\"form-control form-control-sm form_product\" type=\"text\" name=\"product[$i]\" value=\"".$row['product']."\" class=\"form_product\" readonly></div>
                        <div class=\"col-lg-1\"><input class=\"form-control form-control-sm\" type=\"number\" name=\"stock[$i]\" value=\"".$row['stock']."\" readonly></div>
                        <div class=\"col-lg-2\"><input class=\"form-control form-control-sm\" type=\"text\" name=\"creation_date[$i]\" value=\"".date("Y-m-d", strtotime($row['creation_date']))."\" readonly></div>
                        <div class=\"col-lg-2\">
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['order_status_id']."\" name=\"order_status_old[$i]\">
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['id']."\" name=\"id[$i]\">
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['ids']."\" name=\"ids[$i]\"> 
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['note']."\" name=\"note[$i]\">
                            <input type=\"hidden\" name=\"url_to\" value=\"modules/products/edit-product.php\">
                            <input type=\"hidden\" name=\"url_edit\" value=\"edit-page.php\">
                            <input type=\"hidden\" name=\"url_from\" value=\"products.php\">
                            <input type=\"submit\" name=\"edit_product---$i\" value=\"Upravit/Smazat\" class=\"form-control form-control-sm btn btn-secondary btn-block\"> <!-- ÚPRAVA PRO KONKRÉTNÍ ŘÁDEK -->
                        </div>
                    </div>
                ";
    $i++;
  } // KONEC WHILE, PO VYPSÁNÍ ŘÁDKŮ SE VYPÍŠE POSLEDNÍ ŘÁDEK S MOŽNOSTÍ UPRAVIT ZAŠKRTNUTÉ ŘÁDKY
echo "
    <div class=\"row form-group mt-2 pl-2 bg-info pt-1 pb-1 text-white\">
        <span>Všechny zaškrtnuté produkty z brusírny vložit do Nabroušených produktů.</span>
        <input type=\"hidden\" name=\"order_status_old\" value=\"2\">
        <input type=\"hidden\" name=\"order_status_new\" value=\"3\">
        <input type=\"submit\" name=\"nabrouseno\" formaction=\"modules/products/edit-to-nabrouseno-products.php\" value=\"Vložit do Nabroušených produktů\" class=\"ml-2\"> <!-- UPRAVÍ OZNAČEN ŘÁDKY PODLE CHECKBOXŮ -->
    </div>";
  echo "</form>";
}

Jak si mám tedy "odchytávat", který řádek byl stisknutý a se kterým pracuji (na který se kliklo "upravit/smazat")? Tedy podle fotky: ctrlv.cz/okdj

Díky moc, už jsem z toho zmatený.
Vilak
Profil
Už bych to měl vyřešené asi, ale mám 2 problémy.

1) Vypisuje mi to chybu "Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0" i když posílám asi jen 13 POST argumentů, proč?
array(12) {
  ["type"]=>
  string(1) "a"
  ["firm"]=>
  string(8) "Šimbera"
  ["product"]=>
  string(9) "300/64 WZ"
  ["stock"]=>
  string(1) "1"
  ["creation_date"]=>
  string(10) "2020-11-20"
  ["order_status_old"]=>
  string(1) "2"
  ["id"]=>
  string(2) "89"
  ["ids"]=>
  string(20) "1606069828_24908+2-b"
  ["note"]=>
  string(0) ""
  ["url_to"]=>
  string(33) "modules/products/edit-product.php"
  ["url_edit"]=>
  string(13) "edit-page.php"
  ["url_from"]=>
  string(12) "products.php"
}

2) Input s checkboxem se mi neodesílá a neposílá žádná data. Když "checkbox" přepíšu na "text" nebo na "hidden", tak to normálně vytvoří pole jak by mělo. Kde je problém?
<input class=\"form-control form-control-sm form_firm\" type=\"checkbox\" name=\"nabrouseno_ok[]\" value=\"lala\" form=\"nabrouseno\">
Kajman
Profil
Vilak:

1) a neposíláte tam opakovaně stejně nazvané proměnné, které se přepíší a ve výsledku je pak jen jedna z nich? V php stačí nazvat proměnnou jako nazev[] - tím přídání hranatých závorek rekněte, že se to má zpracovat jako pole hodnot. Edit: pardon, koukám, že to tak již máte.

2) nezatrhnuté checkboxy se neposílají na server

Edit2: a formaction už také používáte
Vilak
Profil
Zdravím, díky moc komentář.

Více formuláři jsem nakonec vyřešil přes tag <a> a get element, kde jsme vložil základní ids, ze kterého jde později všechno vyčíst z DB. Tento problém jsem tedy už vyřešil.

1) Tak proměnné se při vytváření přepisují, protože zrovna v tomto případě nepotřebuji znát jejich hodnotu. Tedy kód vypadá takto:
if ($result->num_rows > 0) {
            echo "<form action=\"edit-page.php\" method=\"POST\">";
            while ($row = $result->fetch_assoc()) { // asi 90 řádků
                $all_types = types_for_product($types_for_product, $row);

                // obarveni dlouho neaktualizovaneho sloupce 
                $danger = "bg-light pb-1 pt-1";
                $datetime1 = new DateTime(date("Y-m-d", strtotime($row['creation_date'])));
                $datetime2 = new DateTime(date("Y-m-d "));
                $interval = $datetime1->diff($datetime2);
                if ($interval->format('%a') >= 7) { // starsi nez tyden vcetne
                    $danger = "bg-warning pb-1 pt-1"; // nejspi dat jen bg-light
                }
                if ($interval->format('%a') >= 14 OR $status_id == 4) { // starsi net 14 dni vcetne
                    $danger = "bg-danger pb-1 pt-1"; // nejspi dat jen bg-light
                }

                //vypis tabulky
                echo "
                    <div class=\"row mt-1 align-items-center $danger\" style=\"background-color: #88c7ff08;\">
                        <div class=\"col-lg-1\">
                            <input class=\"form-control form-control-sm form_firm\" type=\"checkbox\" name=\"nabrouseno_ok[]\" value=\"lala\">
                        </div>
                        <div class=\"col-lg-2\">".$all_types."</div>
                        <div class=\"col-lg-2\"><input class=\"form-control form-control-sm form_firm\" type=\"text\" name=\"firm\" value=\"".$row['firm']."\" class=\"form_firm\" readonly></div>
                        <div class=\"col-lg-2\"><input class=\"form-control form-control-sm form_product\" type=\"text\" name=\"product\" value=\"".$row['product']."\" class=\"form_product\" readonly></div>
                        <div class=\"col-lg-1\"><input class=\"form-control form-control-sm\" type=\"number\" name=\"stock\" value=\"".$row['stock']."\" readonly></div>
                        <div class=\"col-lg-2\"><input class=\"form-control form-control-sm\" type=\"text\" name=\"creation_date\" value=\"".date("Y-m-d", strtotime($row['creation_date']))."\" readonly></div>
                        <div class=\"col-lg-2\">
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['order_status_id']."\" name=\"order_status_old\">
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['id']."\" name=\"id\">
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['ids']."\" name=\"ids\"> 
                            <input class=\"form-control form-control-sm\" type=\"hidden\" value=\"".$row['note']."\" name=\"note\">
                            <input type=\"hidden\" name=\"url_to\" value=\"modules/products/edit-product.php\">
                            <input type=\"hidden\" name=\"url_edit\" value=\"edit-page.php\">
                            <input type=\"hidden\" name=\"url_from\" value=\"products.php\">
                            <a href=\"edit-page.php?ids=".$row['ids']."\" class=\"form-control form-control-sm btn btn-secondary btn-block\" role=\"button\">Upravit/Smazat</a>
                        </div>
                    </div>
                ";
            }

            // vložení formulářů pro úpravy všech produktů
            if ($status_id == 1) {
                echo "
                <div class=\"row form-group mt-2 pl-2 bg-info pt-1 pb-1 text-white\">
                    <span>Všechny Zadané produkty pro brusírnu</span>
                    <select name=\"type\" class=\"form-control-sm form-control col-lg-2 ml-2 mr-2\">
                    ".types_for_product_all($conn)."</select>
                    <span>vložit do Převzaných produktů.</span>
                    <input type=\"hidden\" name=\"order_status_old\" value=\"1\">
                    <input type=\"hidden\" name=\"order_status_new\" value=\"2\">
                    <input type=\"submit\" name=\"edit_to_prevzato\" formaction=\"modules/products/edit-to-prevzato-product.php\" value=\"Vložit do Převzané produkty a vytvořit seznam\" class=\"ml-2\">
                </div>";
            }
            if ($status_id == 2) {
                echo "
                <div class=\"row form-group mt-2 pl-2 bg-info pt-1 pb-1 text-white\">
                    <span>Všechny zaškrtnuté produkty z brusírny vložit do Nabroušených produktů.</span>
                    <input type=\"hidden\" name=\"order_status_old\" value=\"2\">
                    <input type=\"hidden\" name=\"order_status_new\" value=\"3\">
                    <input type=\"submit\" name=\"nabrouseno\" formaction=\"modules/products/edit-to-nabrouseno-products.php\" value=\"Vložit do Nabroušených produktů\" class=\"ml-2\">
                </div>
                ";
            }
            echo "</form>";
        }

V postu mi to ukazuje stále 12/13 argumentů, tak jak jich může být 1000? Na druhou stranu je možné, že pokud bych vzal dtaa ze všech řádků, dá to součet větší něž 1000. Jak tedy docílím, ať se posílá jen těch 12 argumentů?

2) To vím, každopádně když checkbox zatrhnu, nefunguje to stále. S kódem, který jsem zde vložil, posílám i fotky zkoušky.
zaplněné checkboxy: ctrlv.cz/l9A7
po odeslání: ctrlv.cz/KaDc

Případně fotka edit-to-nabrouseno-products.php, kde zatím jen ověřuji data, tedy:
<?php
    include_once "../../include/sessions.php";

    echo "<pre>";
    var_dump($_POST);
    echo "</pre>";
?>


Nevíte tedy, kde by mohl být problém?
//editoval jsem, jinak zde budu po 20:00 a budu to dál řešit.
anonym_
Profil *
Vilak:
Posílají se samozřejmě všechny. V POST jich je méně, protože se ti přepisují (mají stejný name).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0