NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Úprava dat v DB přes webovou stránku

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:27.10.2015 23:00

Zdravím.
Potřeboval bych menší radu.
Mám určité údaje v DB o uživatelích, které se v sekci pro adminy zobrazí v tabulce. Abych já nebo někdo další nemusel furt lozit přímo do DB změnit nějaké číslo, nedá se to ošetřit nějakým doplnkem (možná JS?), který zařídí to, že při kliknutí na to se zobrazí hodnota v inputu a lze ji přepsat a uložit tu novou hodnotu do DB?

<table class="table table-striped">
    <thead>
        <tr>
            <th>ID</th>
            <th>Jméno</th>
            <th>Expy</th>
            <th>Email</th>
        </tr>
    </thead>
    <?php foreach ($uzivatele as $uzivatel): ?>
    <tr>
        <td><?= $uzivatel['ID'] ?></td>
        <td><?= $uzivatel['jmeno'] ?></td>
        <td><?= $uzivatel['expy'] ?></td>
        <td><?= $uzivatel['email'] ?></td>
    </tr>
    <?php endforeach; ?>
</table>
Typicky pro položku exp bych chtěl hlavně tuto možnost.. Nebo to mám udělat jako rovnou formulář s inputem? A potom to hned PHP zpracovat jako UPDATE table?
 
Odpovědět
27.10.2015 23:00
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Michal Kuba
Michal Kuba:27.10.2015 23:23

Tak je to cajk, vyřešeno takto:

<table class="table table-striped">
    <thead>
        <tr>
            <th>ID</th>
            <th>Jméno</th>
            <th>Expy</th>
            <th>Email</th>
        </tr>
    </thead>
    <?php foreach ($uzivatele as $uzivatel): ?>
    <tr>
        <td><?= $uzivatel['ID'] ?></td>
        <td><?= $uzivatel['jmeno'] ?></td>
        <td><form method="post">
                <input name="ID" value="<?= $uzivatel['ID'] ?>" type="hidden">
                <input name="expy" class="form-control" type="number" value="<?= $uzivatel['expy'] ?>">
                <button type="submit" class="btn btn-default">OK</button>

            </form>
        </td>
        <td><?= $uzivatel['email'] ?></td>
    </tr>
    <?php endforeach; ?>
</table>

A potom v Kontroleru udělám pole s tou hodnotou expů a v DB se to upraví.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
27.10.2015 23:23
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):27.10.2015 23:28

zdar, tak samozřejmě jde :D
nevim přesně, jaký nejlepší způsob je, ale můžeš pro každýho uživatele udělat formulář a při kliknutí na sloupec se javascriptem udělá input s příslušným name. Když pak klikneš enter (nebo třeba mimo element), odešle se formulář.

Něco ve smyslu

<?php

if ($_POST) {
        $userId = !empty($_POST["userId"] ? (int) $_POST["userId"] : 0;
        if ($userId > 0) {
                $change = array();
                $keys = array("id", "name", "xp", "email");
                foreach ($keys as $key) {
                        if (isset($_POST[$key])) {
                                $change[$key] = $_POST[$key];
                        }
                }

                if (!empty($change)) {
                        $db = new Db();
                        $db->update("user", $change);  // vygeneruje dotaz, který provede update změněných hodnot v tabulce user
                }
        }
}


foreach  ($users as $user) {
        ?>
        <form method="post">
                <input type="hidden" name="userId" value="<?php echo $user->id; ?>">
                <tr>
                        <td><span onclick="createInput(this, 'id');"><?php echo $user->id; ?></span></td>
                        <td><span onclick="createInput(this, 'name');"><?php echo $user->name; ?></span></td>
                        <td><span onclick="createInput(this, 'xp');"><?php echo $user->xp; ?></span></td>
                        <td><span onclick="createInput(this, 'email');"><?php echo $user->email; ?></span></td>
                </tr>
        </form>
        <?php
}

?>

<script type="text/javascript">

function createInput(span, name)
{
        var input = document.createElement("input");
        input.name = name;
        input.value = span.innerHTML;

        var td = span.parentNode;
        td.removeElement(span);
        td.appendChild(input);
}

</script>

prostě něco v takovém smyslu mě teď napadlo. S tím JS by sis musel trochu pohrát

Editováno 27.10.2015 23:30
Nahoru Odpovědět
27.10.2015 23:28
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:28.10.2015 0:04

Popravdě, JS jsem se chtěl trošku vyhnout a vyhnul jsem se, protože toto uplně neovládám a teď na to nemám vůbec časové ani vědomostní možnosti :-D

 
Nahoru Odpovědět
28.10.2015 0:04
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 4 zpráv z 4.