Úprava dat z MySQL pomocí PHP formuláře – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Úprava dat z MySQL pomocí PHP formuláře – PHP – Fórum – Programujte.comÚprava dat z MySQL pomocí PHP formuláře – PHP – Fórum – Programujte.com

 

10. 3. 2018   #1
-
0
-

Jak docílím toho, že když kliknu na "Upravit", upraví se vždy údaj v daném řádku. Pomocí tohoto kódu se mi totiž upraví pouze poslední údaj. Děkuji.

Zde je formulář: 

<?php

include 'connect.php';

echo "<form action='edit.php', method='POST'>";
$sql = "SELECT rok, evcislo from zk01";

$result = $link->query($sql);

if($result->num_rows > 0){
    while($row = $result->fetch_assoc()){

        echo "Rok: <input type=text name=rok id=rok size=1 value=".$row ["rok"].">
              Evidenční číslo: <input type=text name=evcislo id=evcislo readonly size=1 value=".$row ["evcislo"].">
                <input type=submit value='Upravit'><br>";
              
    }
}
else{
    echo "V dané tabulce se nenachází žádný záznam.";
}

echo "</form>";

$link->close();

?>

a zde je "edit.php": 

<?php
include 'connect.php';

$rok = $_POST['rok'];
$evcislo = $_POST['evcislo'];

$sql = "UPDATE zk01 SET rok = '".$rok."' WHERE evcislo = ".$evcislo;


if($link->query($sql) === TRUE)
{

  echo "<strong>Požadavek byl úspěšně upraven.</strong><br>";
}

else
{
    echo mysqli_error($link);
}

$link->close();

?>

Připojen obrázek.

Nahlásit jako SPAM
IP: 2a00:1028:96c0:89fe:bc76:...–
Kit+15
Guru
10. 3. 2018   #2
-
0
-

#1 frantapepa1
Musíš pojmenovat každé tlačítko typu submit. V controlleru tak snadno rozlišíš, na které z nich bylo kliknuto.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10. 3. 2018   #3
-
0
-

#2 Kit
Jak? Mně se tam ta tlačítka generují vždycky, když přidám nový údaj do databáze.

Nahlásit jako SPAM
IP: 2a00:1028:96c0:89fe:bc76:...–
Kit+15
Guru
10. 3. 2018   #4
-
0
-

#3 frantapepa1
K čemu má element input atribut name? Na každém řádku formuláře musíš mít elementy s různými názvy, jinak se s tím nedomluvíš.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10. 3. 2018   #5
-
0
-

#4 Kit
Ano, to mám, každý input má jiné name. Jenom nevím, jaké name mám dát tlačítku typu submit.

Nahlásit jako SPAM
IP: 2a00:1028:96c0:89fe:bc76:...–
Kit+15
Guru
10. 3. 2018   #6
-
0
-

#5 frantapepa1
Nabízí se:

$rok = $row['rok'];
$evcislo = $row['evcislo'];
echo <<<EOT
    Rok: <input type="text" name="rok$evcislo" id="rok$evcislo" size=1 value="$rok">
    Evidenční číslo: <input type="text" name="evcislo$evcislo" id="evcislo$evcislo" readonly size=1 value="$evcislo">
    <input type="submit" name="submit$evcislo" value="Upravit"><br>
EOT;

V controlleru už snad zvládneš rozlišit, co k čemu patří. Nejlépe bude, pokud si nejprve vypíšeš kompletní obsah $_POST, ať vidíš, kde jsou klíče a kde hodnoty.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
12. 3. 2018   #7
-
0
-

To mas cele spatne.

1. Podle pravidel html ma byt id jedinecne. Pokud udelas 2x po sobe
echo <cokoliv id=rok>
Tak se s tim pres javascript nedomluvis.

2. Name muze byt vicekrat stejne. Ano. Chyba je, ze se pripousti pouzit ho ale jako single text a ne pole. mysleno tak, ze
name = "rok" - to je mozne pouzit pro radiobutony, kde vybiras jen jeden, jeden vsem kaze :) Odesilas jen 1 hodnotu.
Ale v pripade sady checkboxu uz ses v haji, potrebujes treba 3 zaskrtle. tam se pouziva zapis pres pole
name = "rok[]"

No, a zpet k tvemu formulari. Ted zalezi na tom, zda ti nevadi odesilat vsecna data nebo tam radeji pridas checkbox, ktery zaskrtne prislusny radek. Pokud chces uplne vsechno (vsechny radky, celou tabulku), tak bych pouzil dvojite pole
name = "row[0]rok" - ted si nejsem jisty, zda se to da takto zapsat, mozna
name = "row[0][rok]"
0 je cislo radku nebo lepe, pouzij $row['id']

Ty tlacitka Upravit. Slo by vyuzit prechozi cislovani, odesilat uplne vsechno.
Nebo by kazdy radek slo uzavrit do spesl formulare. Coz se uplne neda v html. Aspon v html4 mezi TR nejde vlozit FORM tag. Tim by se to ale cele zjednodusilo!! Smula.
Nebo by slo data z radku pretahnout javascriptem do pomocneho skryteho formulare a ten odeslat. 

<form name="dvojka">
<input type=hidden name="rok">
<input type=hidden name=""> ... podobne ostatni sloupce
</form>
onclick = "f(this,0);"
function f(el, id)
{
var form1, form2, i;
form1 = el.form; // pokud je to input, tak input.form se dostanes do formu
form2 = document.forms['dvojka'];
for (i in form1.row[id]) // pristup ke vsemu, co ma name = 'row[0]', protoze id=0, protoze onclick = "f(this,0);"
  {form2[i].value = form1.row[id][i].value;}
form2.submit(); // odelast druhy formular. Bacha, refreshuje celou stranku
}

Netestovano, jenom takovy nacrtek!

Zkratka, napad mas dobry, ale tohle primo v html nejde, aspon v html4. Musi se to prave obchazet bud tim kopirovanim nebo odesilanim cele tabulky.

Nahlásit jako SPAM
IP: 193.84.204.–
peter
~ Anonymní uživatel
3981 příspěvků
12. 3. 2018   #8
-
0
-

Kit ti poslal variantu podobnou moji. Take pouzil unikatni nazvy kolonek, jak pro name, tak i pro id. Je jedno, jestli pouzijes pole nebo text

Rok: <input type="text" name="rok$evcislo" // KIT php; $rok = $row['rok']; $evcislo = $row['evcislo'];
Rok: <input type="text" name="rok11 // KIT html
Rok: <input type="text" name="row[11][rok] moje html

Je to v podstate to same, jestli porozumis kitovu vykladu, tak bys to umel upravit. Se mi nechtelo vypisovat cely postup. Ze zasady to nedelam. Jedna vec je poradit, druha udelat cele za nekoho.

Nahlásit jako SPAM
IP: 193.84.204.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý