Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Programovacie jazyky, rady, poradňa...
eSKo-man
Light Expert
Light Expert
Príspevky: 39
Registrovaný: 23 feb 2014, 21:42

Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa eSKo-man »

Zdravim vas panove, riesim admin menu, konkretne zoznam uzivatelov, kde chcem mat zvysovanie a znizovanie prav uzivatelov a taktiez ich mazanie v jednoduchej tabulke. No vobec netusim ako by som to mohol urobit. Prezrel som si uptady mysql db na mnohych strankach, no ked to chcem zakomponovat do kodu nizsie, nic mi nefunguje. Vedel by mi s tym dakto pomoct? "+1" a "-1" chcem aby fungovalo, tak ze zvysi pripadne znizi pravomoci o 1 a po kliknuti na delete user uzivatela zmaze. Pripadne elegantnejsie riesenie na priamo urcene cislo pravomoci, nie len znizovanie a zvysovanie o jedna...budem vam velmi vdacny za pomoc.

Kód: Vybrať všetko

<?php

if(!isset($_SESSION['prihlasen']) or $_SESSION['Prava']<>2){ 
	echo "<h1>Pre zobrazenie tejto stránky nemáte oprávnenie.</h1>";
	exit;
}
?>


<h1>Seznam uživatelů</h1>

<?php
	require_once "db.php";
	$query = MySQL_Query("SELECT * FROM `uzivatele` ORDER BY jmeno") or die (mysql_error());
			echo "<table align='left'>";
				echo "
						<tr>
							<th>Č</th>
							<th>Jméno</th>
							<th>Mail</th>
                                                        <th>Prava</th>
                                                        <th>Zmená práv</th>
                                                        <th>Zmazanie uzivatela</th>
						</tr>
						";
			$Pocet=0;			
			while($Vysledek = mysql_fetch_array($query)){
				$Pocet++;
				echo "
						<tr>
							<td>".$Pocet.".</td>
							<td>".$Vysledek['jmeno']."</td>
							<td>".$Vysledek['mail']."</td>
                                                        <td>".$Vysledek['prava']."</td>
                                                        <td>+1, -1</td> 
                                                        <td>Delete user</td> 
						</tr>
						";
			}
			echo "</table>";
?>
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa audiotrack »

medzi tieto dva riadky:

Kód: Vybrať všetko

require_once "db.php";
   $query = MySQL_Query("SELECT * FROM `uzivatele` ORDER BY jmeno") or die (mysql_error());
pridaj toto:

Kód: Vybrať všetko

if(isset($_GET['action']) && isset($_GET['id'])){
    if($_GET['action'] == "delete"){
           $query = "DELETE FROM `uzivatele` WHERE id='".$_GET['id']."' limit 1";
           MySQL_Query($query);
    }
    if((int)$_GET['permission'] > -1){
          $query = "UPDATE `uzivatele` set prava = '".(int)$_GET['permission']."' wehre id='".$_GET['id']."' limit 1";
           MySQL_Query($query);
    }
}
a odkaz na delete bude vyzerať takto:

Kód: Vybrať všetko

<a href='?action=delete&id=".$Vysledek['id']."'>Delete user</a>
na tie oprávnenia rovnako, ale okrem action=update a idečka tam bude ešte parameter permission s hodnotou oprávnenia. Buď si definouješ link pre každé oprávnenie čo používaš, alebo nejaký input kde to zadáš číselne. Je to z hlavy rovno sem písané, tak nezaručujem že tam nemám preklep. To si hádam už dokážeš doladiť
eSKo-man
Light Expert
Light Expert
Príspevky: 39
Registrovaný: 23 feb 2014, 21:42

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa eSKo-man »

Ďakujem, funguje to ako má :) Na začiatku mám kódik, čo zabezpečuje zobrazenie stránky len administrátorom a na moju smolu "delete user" funguje len vtedy, ak sa tu tento kódik nenachádza. Pokiaľ tam je - vyhodí mi to práve nižšie uvedenú echo hlášku a užívateľa nezmaže. V session mám uložené dáta o prihlásenom užívateľovi ako prihlaseny(0/1), jmeno, mail, id, prava.

Kód: Vybrať všetko

<?php
/*
* Pokud uživatel není přihlášený, místo obsahu se mu ukáže tato hláška.
*/
if(!isset($_SESSION['prihlasen']) or $_SESSION['Prava']<>2){ 
	echo "<h1>Pre zobrazenie tejto stránky nemáte oprávnenie.</h1>";
	exit;
}
?>
edit: odkaz stránky na ktorej je tento zoznam užívateľov má tvar index2.php?page=seznam_uziv

edit2: problém nastáva v index2.php kde mám tento kus kódu...

Kód: Vybrať všetko

					<?php
					/*
					* Tento kousek vzdy includuje do "stredu" stranky volany soubor pres URL
					* Priklad volani: index2.php?page=registrace
					* do stredu se nacte soubor registrace.php
					*/
					 if (isset($_GET['page'])){        // pokud byl odeslán ?page= ...
					    $soubor=$_GET['page'];
					    $soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/".$soubor.".php";
					    if(file_exists($soubor2)){      //pokud soubor existuje, načteme ho do středu
					       if(substr_count($soubor,"../")>0){ // pokud je v parametru alespoň 1x ../ neumožíme soubor načíst
					           echo "<h3>Upozornění</h3>Nelze nahrát soubor v nadřazeném adresáři!";
					       }elseif($soubor=="index2" or $soubor=="/index2"){ // index načíst nepovolíme, vznikl by nekonečný cyklus
					           echo "<h3>Upozornění</h3>Index nemůže načíst sám sebe!";
					       }else{
					           include $soubor2;
					       }
					    }else{                //pokud soubor neexistuje, zavoláme error404.php
					       include "inc/error404.php";
					    }
					  }else{                  // Pokud nebyl paramentr page volaný, načteme uvod.php
					    include "uvod.php";
					  }
					/*
					* Tento kousek kódu nám v případě nějakého erroru vypíše Alert.
					* Jednotlivé hlášky jsou v souboru inc/error_msg.php
					* Je tam pole hlášek, vždy voláme číslo hlášky v poli
					* Příklad: index.php?page=uvod&Alert=0
					*/
					if(isset($_GET['Alert'])){
						require "inc/error_msg.php"; // V tomto souboru jsou ty hlasky
						$JsAlert=$_GET['Alert'];
						echo '<script language="javascript" type="text/javascript">alert("'.$Rvi[$JsAlert].'");</script>';
					}	
					?>
Netuším ako to ošetriť....neexistuje nejaký iný spôsob zmazania a editácie mysql db, kde sa nemení odkaz stránky?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa audiotrack »

existuje, ale nerád by som do toho ťahal ajax, keď nevieš ani základy.

k tým linkom si pridaj page parameter, aby sa tie vetvy vykonaly. Takže

Kód: Vybrať všetko

<a href='?page=".htmlspecialchars($_GET['page'])."&action=delete&id=".$Vysledek['id']."'>Delete user</a>
eSKo-man
Light Expert
Light Expert
Príspevky: 39
Registrovaný: 23 feb 2014, 21:42

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa eSKo-man »

joooo :D velice prevelice ďakujem, toto fórum je odteraz moj homepage :D ale ne, fakt dík, cením si to.
No ono som začiatočník to je fakt, pár kníh som prečítal, ale ono to myslenie programátora mi žiadna kniha nedá. Buď sa s tým narodím alebo to budem praxou pilovať, odhodlanie mi nechýba...škoda, že v Nitre neexistuje dajaký kurz, prípadne učiteľ...dobrý učiteľ na hodinku je viac ako 1000 hodín samoštúdia...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa audiotrack »

v nitre máte dve univerzity, zisti si kedy sú prednášky a skoč si nejakú vypočuť. Na slovensku sú prednášky na vysokých školách verejnosti otvorené.
eSKo-man
Light Expert
Light Expert
Príspevky: 39
Registrovaný: 23 feb 2014, 21:42

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa eSKo-man »

To som ani nevedel...pozistujem...
Vedel by si mi prosím ťa ešte pomôcť? Riešim ešte ten uptade práv cez form select, vyberiem si ake práva užívateľ má mať, kliknem na odkaz uptade vyhodí mi alertovú hlášku s infom, že boli dáta zmenené. Neviem kde mám chybu...vyhadzuje mi to "Notice: Undefined index: uptade_prav"

Kód: Vybrať všetko

<?php
if(!isset($_SESSION['prihlasen']) or $_SESSION['Prava']<2){
	echo "<h1>Pre zobrazenie tejto stránky nemáte oprávnenie.</h1>";
	exit;
}
?>


<h1>Zoznam užívateľov</h1>

<?php
	require_once "db.php";
        if(isset($_GET['action']) && isset($_GET['id'])){
    if($_GET['action'] == "delete"){
           $query = "DELETE FROM `uzivatele` WHERE id='".$_GET['id']."' limit 1";
           MySQL_Query($query);
    }
       if((int)$_GET['permission'] > -1){ 
          $query = "UPDATE `uzivatele` set prava = '".(int)$_GET['permission']."' where id='".$_GET['id']."' limit 1";
           MySQL_Query($query);
    }
}
	$query = MySQL_Query("SELECT * FROM `uzivatele` ORDER BY jmeno") or die (mysql_error());
			echo "<table>";
				echo "
						<tr>
							<th>Č</th>
							<th>Jméno</th>
							<th>Mail</th>
                                                        <th>Prava</th>
                                                        <th>Zmazanie užívateľa</th>
                                                        <th>Zmena práv</th>
						</tr>
						";
			$Pocet=0;			
			while($Vysledek = mysql_fetch_array($query)){
				$Pocet++;
				echo "
						<tr>
							<td>".$Pocet.".</td>
							<td>".$Vysledek['jmeno']."</td>
							<td>".$Vysledek['mail']."</td>
                                                        <td>".$Vysledek['prava']."</td>
                                                        <td><a href='?page=".htmlspecialchars($_GET['page'])."&action=delete&id=".$Vysledek['id']."&Alert=9'>Delete user</a></td>
                                                        <td><form method='POST'>
                                                                <select name='uptade_prav'>
                                                                    <option value='0'>0</option>
                                                                    <option value='1'>1</option>
                                                                    <option value='2'>2</option>
                                                                    <option value='3'>3</option>
                                                                </select>
                                                            </form>
                                                            <a href='?page=".htmlspecialchars($_GET['page'])."&action=uptade&permission=".($_POST['uptade_prav'])."&id=".$Vysledek['id']."&Alert=10'>uptade</a>
                                                        </td>
                                                </tr>
						";
			}
			echo "</table>";
?>
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa audiotrack »

uptade je celkom vtipné slovo :D

ja som ti to do ukážky pomenoval ako permission, ty si si to pomenoval uptade_prav. Ja som ti to dal ako get, ty si to spravil ako post. Tak jasné že to nebude fungovať, bez ohľadu na chybu.
Tá chyba je dôsledok toho, že tam vypisuješ POST hodnotu pred tým, ako bola nejaká odoslaná. $_POST['uptade_prav'] v čase načítania stránky neexistuje, bude existovať až po odoslaní. Celkovo je to ale nefunkčné. Mal by si si pozreť ako sa v html robia formuláre. Určite sa neposielajú odkazom, ale submit tlačítkom. Inak nepošleš hodnotu z toho inputu, ale pošleš to čo je v tom odkaze (a nie cez post ale cez get). Všetky tie parametere (okrem toho $_POST['uptade_prav']) majú ísť z toho linku do action atribútu toho formuláru. A namiesto linku bude submit, ktorý ale bude ešte pred </form> a nie za ním, ako máš ten odkaz
eSKo-man
Light Expert
Light Expert
Príspevky: 39
Registrovaný: 23 feb 2014, 21:42

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa eSKo-man »

jj, zistil som a pochopil som to za tu hodinku :D takto to mam a ide to bez problemovo

Kód: Vybrať všetko

<?php
if(!isset($_SESSION['prihlasen']) or $_SESSION['Prava']<2){
	echo "<h1>Pre zobrazenie tejto stránky nemáte oprávnenie.</h1>";
	exit;
}
?>


<h1>Zoznam užívateľov</h1>

<?php
	require_once "db.php";
        if(isset($_GET['action']) && isset($_GET['id'])){
    if($_GET['action'] == "delete"){
           $query = "DELETE FROM `uzivatele` WHERE id='".$_GET['id']."' limit 1";
           MySQL_Query($query);
    }
       if((int)$_POST['uptade_prav'] > -1){ 
          $query = "UPDATE `uzivatele` set prava='".(int)$_POST['uptade_prav']."' where id='".$_GET['id']."' limit 1";
           MySQL_Query($query);
    }
}
	$query = MySQL_Query("SELECT * FROM `uzivatele` ORDER BY jmeno") or die (mysql_error());
			echo "<table>";
				echo "
						<tr>
							<th>Č</th>
							<th>Jméno</th>
							<th>Mail</th>
                                                        <th>Prava</th>
                                                        <th>Zmazanie užívateľa</th>
                                                        <th>Zmena práv</th>
						</tr>
						";
			$Pocet=0;			
			while($Vysledek = mysql_fetch_array($query)){
				$Pocet++;
				echo "
						<tr>
							<td>".$Pocet.".</td>
							<td>".$Vysledek['jmeno']."</td>
							<td>".$Vysledek['mail']."</td>
                                                        <td>".$Vysledek['prava']."</td>
                                                        <td><a href='?page=".htmlspecialchars($_GET['page'])."&action=delete&id=".$Vysledek['id']."&Alert=9'>Delete user</a></td>
                                                        <td><form action='?page=".htmlspecialchars($_GET['page'])."&action=uptade&id=".$Vysledek['id']."&Alert=10' method='POST'>
                                                                <select name='uptade_prav'>
                                                                    <option value='0'>0</option>
                                                                    <option value='1'>1</option>
                                                                    <option value='2'>2</option>
                                                                    <option value='3'>3</option>
                                                                </select>
                                                                <input type='submit' value='uptade_prav'>
                                                            </form>
                                                             </td>
                                                </tr>
						";
			}
			echo "</table>";
?>
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa S-player »

Je ti jasne ,že tento kód nieje zabezpečený proti CSRF? Úplne jednoducho ti môže niekto zmazať akéhokoľvek používateľa alebo rovno vykonať SQL Injection kedže ani to nemáš ošetrené.
eSKo-man
Light Expert
Light Expert
Príspevky: 39
Registrovaný: 23 feb 2014, 21:42

Re: Mysql db, zvysenie hodnoty o jedna po kliknuti na odkaz.

Príspevok od používateľa eSKo-man »

No keďže som začiatočník, tak je jasné, že mi to jasné nieje :)
Podľa môjho názoru je v komplet celom IT sektore neuveriteľný bordel...chýba mi tu niečo, čo dokáže človeka previesť celým svetom programovania. Od úplného začiatku až po tvorbu vlastných bezpečných aplikácii. Ukázať možné hrozby a ako sa proti nim chrániť...Nech dám hocikomu, aj totálnemu machrovi otázky, kto mi odpovie? - ako sa zo mňa má stať naozaj odborník? Kde mám začať, ako mám postupovať, čo všetko sa mám naučiť a v akom poradí? Ktoré knihy, články, kurzy prečítať? Určite je lepšie mať učiteľa, ale kde ho zohnať? A ako mám vedieť, či ma učí a ukazuje všetko, čo je možné v danej problematike? Čo keď zabudol na nejaký typ útoku? Dá sa nejak brániť voči hackerstvu? Ako mám urobiť naozaj bezpečný kód? Nehovorí sa predsa, že hacknúť sa dá všetko? Existuje nejaký zoznam najpoužívanejších útokov a ako sa proti nim chrániť? Zdá sa mi alebo je v tomto všetkom totálna anarchia? Práve hrozba, že nerobím veci správne ma odradzovala od učenia, samoštúdium je asi preto celkom ťažké...no i tak neprestanem a radšej končím :D
Napísať odpoveď