Autor Zpráva
pema01
Profil
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
á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
pema01:
bohuzel i samotny kod neni prilis optimalne napsan
pema01
Profil
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
ok, tak pro příště už vím
mimochodec
Profil
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
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
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
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
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
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 *
Delete v databazi ma jinou syntaxi. Nechce seznam sloupcu ani hvezdicku, protoze nic nevraci.
Tedy jen:
delete from ...
Kubo2
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: