C týden
Tento týden až 80% sleva na e-learning týkající se jazyka C
50 % bodů zdarma na online výuku díky naší Slevové akci!

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

Aktivity (4)
Avatar
bloom
Člen
Avatar
bloom:5. ledna 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. ledna 11:10
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:5. ledna 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. ledna 20:45
 
Nahoru Odpovědět
5. ledna 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.