IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Update hodnot v databázi MySQL na základě zvolených hodnot checkboxu

Aktivity
Avatar
bloom
Člen
Avatar
bloom:5.1.2020 11:10

Ahoj,
omlouvám se za svůj možná amatérský dotaz, ale jsem na poli PHP nový a moc bych chtěl poprosit o radu s řešením jednoho problému.

Ve webové aplikaci pracuji s tabulkou, která má dynamický počet řádků podle toho, kolik záznamů je aktuálně ve zdrojové tabulce v databázi MySQL. U každého řádku by se měl zobrazit checkbox (to už se mi povedlo). Nějak se mi nedaří přijít na to, aby došlo po kliknutí na submit button k updateu hodnot v tabulce v databázi MySQL u těch záznamů, u kterých byly zaškrtnuté checkboxy.

Zkusil jsem: Tabulka v aplikaci vypadá přibližně jako na obrázku. Primární klíč v tabulce v databázi tvoří hodnoty z sloupce NUMBER. Zatím jsem zkusil nastavit aplikaci tak, aby se po kliknutí na button zobrazil alespoň msgbox s hodnotami ze sloupce NUMBER u řádků, u kterých byl zaškrtnutý checkbox.

<<html>
  <head>
    <title>APLIKACE - Hlavní strana</title>


 <script type="text/javascript">
    function GetSelected() {
        //Reference the Table.
        var grid = document.getElementById("Tabulkaprehled");

        //Reference the CheckBoxes in Table.
        var checkBoxes = grid.getElementsByTagName("INPUT");
        var message = "\n";

        //Loop through the CheckBoxes.
        for (var i = 0; i < checkBoxes.length; i++) {
            if (checkBoxes[i].checked) {
                var row = checkBoxes[i].parentNode.parentNode;

                message += "   " + row.cells[2].innerHTML;
                message += "\n";
            }
        }

        //Display selected Row data in Alert Box.
        alert(message);
    }
</script>


  </head>
<body>
  <?php

$hodnoty = mysql_query("SELECT * FROM table_03_2020");

          echo "<br><form action='main.php' method='POST'>";
          echo "<input type='submit' name='button' value='Get Selected' class='btn btn-primary' onclick='GetSelected()' />";
          echo "<table id = 'Tabulkaprehled' border='0px' bordercolor='silver' cellpadding='1' cellspacing='2' width='100%'>";
          echo "<tr bgcolor='#EEEEEE' height='45px'><th></th><th><b>NUMBER</b></th><th><b>NAME</b></th></tr>";
          while ($zaznam=MySQL_Fetch_Array($hodnoty)):
          echo "<tr onmouseover=\"highlight_row(this, 1, '#F2F2F2');\" onmouseout=\"highlight_row(this, 0, '#F2F2F2');\">";


 echo "<td><input type='checkbox' name='cbox[]' ></td>";
echo "<td><font color='red'>".$zaznam["number"]."</font></td>";
echo "<td>".$zaznam["name"]."</td>";



          echo "</tr>";
          endwhile;
          echo "</table><br>";
          echo "</form>";

        ?>

  </body>
</html>

Ten msgbox je ale jen ilustrační. Potřebuji dosáhnout toho, aby se u řádků, ve kterých byl zaškrtnutý checkbox, po kliknutí na button provedl update ve zdrojové tabulce MySQL (na základě hodnot ve sloupci NUMBER, tedy těch, co aktuálně zobrazuje msgBox), tedy něco jako:

"UPDATE table_03_2020 SET sloupec1 = 'xy' where NUMBER in ('čísla NUMBER řádků, u kterých byl zaškrtnutý checkbox)"

Chci docílit: Omlouvám se, pokud dotaz není moc jasný, ale moc prosím o jakoukoliv pomoc.
Díky moc.
bloom

 
Odpovědět
5.1.2020 11:10
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:5.1.2020 20:43

1. Je zvykem pojmenovat klic pro cislo radku jako id. Napr id_user.
Id Vetsinou nezacina nulama a neni string, ale je to integer, autoincrement a primary index key

2.

<input type='checkbox' name='cbox[]' >

Checkbox nema zadne value. Odesilas tedy prazdne pole. Zkus si

var_dump($_POST['cbox']); // method='POST' nebo
var_dump($_REQUEST['cbox']);

3. V kodu nemas nic, co by se pokouselo s checkboxem pracovat. Zkus si vygooglovat priklad v php pro praci s formularem.
Nemas kod, nelze rici, v cem delas dalsi chybu.

4. Tip. Dnes je moderni udelat aplikaci jako web-services.
Posles url get/post nejakemu php. To to zpracuje a vrati data treba jako xml nebo json.


Mozna ti reknu, co uz vis. Formular funguje takto:

1. Typy odesilani

<a href="zpracuj.php?a=1&b=2">Odesli getem</a>

<form action="zpracuj.php" method=get>
<input name=a value=1>
<input name=b value=2 checked type=checkbox>
<input value="Odesli getem" type="submit">
</form>

Muze to byt checkbox, radio, textarea, input type text, hidden, submit... Vyhoda checkboxu je, ze neodesle hodnotu, pokud neni zaskrtnuty. Takze je asi nej proto, co chces.
Muze to byt post nebo get. Odkaz jen get.
A muze to byt get/post reseny ajaxem. Dnes moderni,.

2. Zpusob prijeti, zobrazeni:

<?php
var_dump($_REQEST);
var_dump($_POST);
var_dump($_GET);
$b = isset($_POST['b']) ? $_POST['b'] : '';
echo "b: $b";
//nebo v pripade array
$b = isset($_POST['b']) && is_array($_POST['b']) ? $_POST['b'] : array();
foreach ($b as $n=>$item)
{
echo "b$n: $item";
}
?>
Editováno 5.1.2020 20:45
 
Nahoru Odpovědět
5.1.2020 20:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.