Autor | Zpráva | ||
---|---|---|---|
pema01 Profil |
#1 · Zasláno: 22. 12. 2014, 15:54:20
Ahoj,
vypisuji tabulku s uživateli a jejich právy a nevím, jak propojit tlačítko vedle uživatele právě s ním (po jehož stisknutí se vymaže pouze daný uživatel). Zkoušel jsem to vyřešit takto, ale nefunguje to :( náhled tabulky je zde: |
||
mimochodec Profil |
Promiň, ale tohle překonává i mé nejdivočejší sny.
Myslím, že nerozumíš tomu, co probíhá na serveru a co v prohlížeči. V onclick nemá mysql_query co dělat a header už vůbec ne. Do onclick si dej něco jako smazat($k) , pak si vytvoř a přilinkuj nějaký JS soubor, kde budeš mít funkci smazat , která převezme id, zobrazí nějaký confirm a po jeho potvrzení přesměruje na adresu index.php?smazat=14 (kde 14 je příklad toho id, které jsi předtím poslal do JS a z JS pak posíláš tomu index.php). V index php pak hlídej, jestli není zadáno $_GET['smazat']. Pokud je, proveď to mysql a přesměruj na index.php bez toho smazat .
Kromě toho dumám, co někoho vede k tomu, že místo aby zkopíroval zdroják jako text, udělá printscreen, někam ho nahraje a pak vloží jako obrázek. Vidím ještě tu divnou práci s $k , které se snažíš použít v tom sql dotazu, ale není zřejmé, odkud ho na začátku bereš. Dole ho pak inkrementuješ, takže i kdyby při prvním průchodu nějak s databází souhlasilo, po něm už to pravda není.
Několikanásobně uzavřené <tr> je už jen taková drobnost. |
||
pema01 Profil |
#3 · Zasláno: 22. 12. 2014, 16:42:49
áha, takže takto to nepůjde... Tak budu tedy dumat nad tím, jak mi radíš :D
Jinak k tomu obrázku - mám velké zkušenost s tím, že si lidé stěžují na to, že se v kódu nevyznají, a proto ten obrázek, kde je to vše barevně rozlišené... (bohužel tento editor nepodporuje psaní kódu, to by nebylo co řešit.. :-) ) |
||
Taps Profil |
#4 · Zasláno: 22. 12. 2014, 16:48:10
pema01:
bohuzel i samotny kod neni prilis optimalne napsan |
||
pema01 Profil |
#5 · Zasláno: 22. 12. 2014, 16:49:53
za to se omlouvám, v PHP se opravdu teprve učím a ani pro mě to není nic "krásného" na rozdíl od javy atd...
|
||
lionel messi Profil |
pema01:
„Jinak k tomu obrázku - mám velké zkušenost s tím, že si lidé stěžují na to, že se v kódu nevyznají, a proto ten obrázek, kde je to vše barevně rozlišené...“ Nabudúce prosím vkladaj zdrojový kód priamo do diskusie, stačí kliknúť na zodpovedajúcu značku (postup) a tiež to bude farebne rozlíšené. :-) |
||
pema01 Profil |
#7 · Zasláno: 22. 12. 2014, 16:53:09
ok, tak pro příště už vím
|
||
mimochodec Profil |
#8 · Zasláno: 22. 12. 2014, 16:57:04
pema01:
Začni tím, že si z tabulky vypíšeš uživatele normálně použitým SELECTem while - příkladů najdeš tady v diskusi milión. Do toho řádku si zabuduj tlačítko nějak takhle: <input type="submit" value="Smazat" onclick="smazat(<?php echo $id; ?>)"> $id budeš brát z té tabulky databáze. Jestli ho tam nemáš, zeptej se, jak se má $id používat. Pak si napiš tu funkci smazat atd. Když někde narazíš, ptej se. A kód sem dávej jako kód, zvýrazňovač si s tím poradí. |
||
pema01 Profil |
#9 · Zasláno: 22. 12. 2014, 17:09:08 · Upravil/a: pema01
omlouvám se, ale JavaScript jsme se ještě neučili, a tak opravdu nemohu pochopit dění v klientovi a na serveru... Vše zatím programujeme v PHP...
Mám dotaz, proč to nejde takto? function vymazat($n) { if ($_GET["vymazat"]) { $vyberKVymazani = "DELETE * FROM TUsersMSTS WHERE ID=".$n." "; mysql_query($vyberKVymazani); } } $k=1; echo "<table border='1'>"; for ($i = 0; $i < $countofusr; $i++) { echo "<tr><td rowspan='".$PocPrav[$i]."'>".$k."</td>" . "<td rowspan='".$PocPrav[$i]."'>".$uzivatelJmeno[$i]."</td>" . "<td rowspan='".$PocPrav[$i]."'>" . "<form method='get'><input type='submit' value='Vymazat' name='vymazat' onclick=".vymazat($k)."></form></td>"; for ($j = 0; $j < $PocPrav[$i]; $j++) { echo "<td> ".$uzivatelTitle[$i][$j]."</td></tr>"; } $k++; } echo "</table>"; to $k je vlastně ID, ale problém je asi v tom, že $k je po skončení cyklu (vypsání tabulky) úplně jinde než např na 1, kterou chci vymazat... |
||
mimochodec Profil |
#10 · Zasláno: 22. 12. 2014, 17:16:43
onclick je javascriptová událost. Jestli javascript použít nechceš / nemůžeš, zruš to tlačítko a místo něj tam dej prostě odkaz, jehož součástí bude to $id. Pořád ale nikde nevidím ten SELECT, kterým bys ty řádky získával z databáze.
Taky je špatně, že vypsání té tabulky máš uvnitř funkce. |
||
pema01 Profil |
#11 · Zasláno: 22. 12. 2014, 17:40:56 · Upravil/a: pema01
Tak jsem to tedy dal do 2 PHP souborů: V prvním je ta tabulka:
$k=1; echo "<table border='1'>"; for ($i = 0; $i < $countofusr; $i++) { echo "<tr><td rowspan='".$PocPrav[$i]."'>".$k."</td>" . "<td rowspan='".$PocPrav[$i]."'>".$uzivatelJmeno[$i]."</td>" . "<td rowspan='".$PocPrav[$i]."'>" . "<a href='./vymazUzivatele.php?idUzivatele=".$k."'>Vymazat</a> </td>"; for ($j = 0; $j < $PocPrav[$i]; $j++) { echo "<td> ".$uzivatelTitle[$i][$j]."</td></tr>"; } $k++; } echo "</table>"; A v druhém je skript pro vymazání... Bohužel mi to píše, že mám chybu v SQL synaxi, což se mi nezdá :( (Zpráva: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM TUsersMSTS WHERE TUsersMSTS.ID=1' at line 1) echo $_GET["idUzivatele"]; $vyberKVymazani = "DELETE * FROM TUsersMSTS WHERE TUsersMSTS.ID=" . $_GET["idUzivatele"] . " "; $proved2 = mysql_query($vyberKVymazani); if ($proved2) { header("Location:./vypisUzivatele.php"); } else { echo "uživatel nevymazán"; } Jinak $_GET["idUzivatele"] vypisuje správně proměnnou z URL, za což jsem rád. Jen ještě najít tu chybu... :( a do té url dávám právě to ID tak už mi to funguje |
||
mimochodec Profil |
#12 · Zasláno: 22. 12. 2014, 18:03:44
Tak fajn. Ještě tam máš ale pořád tu chybu, že té mazací funkci předáváš místo ID jakési $k.
V tom mazacím skriptu ti chybí if, který by detekoval, že $_GET["idUzivatele"] bylo zadáno. A doufám, že si uvědomuješ ty gigantické bezpečnostní díry. Jestli to máš do školy, asi to bude další téma po tomhle. |
||
pema01 Profil |
#13 · Zasláno: 22. 12. 2014, 18:09:17
No já moc nevím jak s tím SELECTEM udělat to ID... proto ho nahrazuji $k, které má stejnou hodnotu jako ID... (je to taková prasárna, ale fakt nevím moc jak na to...)
zkoušel jsem SELECT ID FROM TUsersMSTS WHERE TUsersMSTS.nick=".$uzivatelJmeno[$i]."
jako že hledám uživatele, který má dané ID, ale moc to nefunguje ... :( |
||
mimochodec Profil |
pema01:
Třeba takto: Zjištění id Ty asi potřebuješ víc než jen to ID, takže SELECT ID, jmeno, neco, necodalsiho FROM...
|
||
juriad_ Profil * |
#15 · Zasláno: 22. 12. 2014, 19:54:38
Delete v databazi ma jinou syntaxi. Nechce seznam sloupcu ani hvezdicku, protoze nic nevraci.
Tedy jen: delete from ... |
||
Kubo2 Profil |
#16 · Zasláno: 22. 12. 2014, 20:42:10
pema01:
Ak sa na to pozrieš s trochu väčším odstupom, tak: 1\ potrebuješ získať informácie o jednotlivých užívateľoch, aby si ich mohol potenciálne mazať. SELECT ID, jmeno, neco, necodalsiho FROM TUsersMSTS (bez podmienky WHERE na konci, hľadáš všetkých používateľov, nie iba jedného)
2\ potrebuješ vytvoriť tabuľku s informáciami používateľov a odkazmi na zmazanie ich záznamu. ••• prejdeš si výsledok dotazu cyklom: while(list($id, $jmeno, $neco, $necoDalsiho) = mysql_fetch_row($výsledokDotazu)) { // ...
••• premennú $id použiješ na vytvorenie odkazu: printf('<a href="vymaz-uzivatele.php?id-uzivatele=%d"><b>Vymazať</b> používateľa %s</a>', $id, $jmeno);
3\ v súbore vymaz-uzivatele.php sa postaráš o odchytenie identifikátoru používateľa a jeho následné zmazanie:
if(!empty($_GET['id-uzivatele']) && max(0, $_GET['id-uzivatele'])) { mysql_query(sprintf('DELETE FROM TUsersMSTS WHERE ID = %d', $_GET['id-uzivatele'])); header('Location: http://' . $_SERVER['SERVER_NAME'] . '/' . trim(dirname($_SERVER['REQUEST_URI']), '/') . '/vypis-uzivatele.php'); exit; } Ešte poznámka: Chápem, že si programoval v Jave, ale naozaj je dobrou konvenciou nepomenovávať súbory dostupné cez web veľkými písmenami a miesto LCC oddeľovať slová v názvoch takýchto súborov pomlčkami. |
||
Časová prodleva: 9 let
|
0