Pagina 1 din 3

[HELP] admin panel

Scris: Mie Aug 24, 2011 9:58 pm
de ZecaR
salutari .. sunt incepator , inteleg codul php un pic, desi nu m-am bagat prea "adanc" in php

am un script care listeaza userii dintr-un tabel (dintr-o baza de date)
nume baza date: amx
nume tabel: admins
Fields: id, auth, password, access, flags, email, data_expirarii, ultima_modificare

cum am mai spus, am un script care imi listeaza totii userii din baza de date intr-un tabel.
Am nevoie de un admin panel(cu login) cu care sa pot edita toate fieldurile pt un anumit user.

Imi puteti da un exemplu de astfel de admin panel ( ca sa incerc eu sa il fac) sau sa imi dati voi direct codul (v-am dat detaliile bazei de date).

P.S.: scuzati-ma ca nu am folosit "Search"

//Edit: am uitat sa va spun , voi mai pune un field in tabel (administrator)
default: 0
daca e 1 inseamna ca este admin si se poate loga in admin panel , daca este 0 nu se poate loga...

Scris: Mie Aug 24, 2011 11:13 pm
de Sacalu
Citeste regulamentul inainte sa postezi.Aici se primesc idei nu coduri facute....oricum o sa postez saptamana viitoare un cod daca este...daca nu posteaza nimeni adu-mi aminte miercuri printr-un PM...

Scris: Mie Aug 24, 2011 11:16 pm
de ZecaR
iti aduc aminte...

scuze ca nu am citit regulamentul, nu stiu php atat de bine cat sa primesc idei si sa fac eu codul...

Scris: Mie Aug 24, 2011 11:29 pm
de Sacalu
oricum codul nu e asa greu....mai intai faci select la baza de date
$select = "SELECT * FROM admins WHERE administrator = 0";
$select2 =mysql_query($select);
while($rand = mysql_fetch_array($select2)){
echo $rand['auth'].'|';
echo $rand['acces'].'|';
echo $rand['flags'].'|';
echo $rand['email'].'|';
echo $rand['data_expirarii'].'|';
echo $rand['ultima_modificare'].'|';
echo $rand['administrator'].'|</br>';
}

aici este pentru selectare....daca ai asta e usor sa faci de modificare,dar ia mai mult timp.....n-am timp astazi,nici maine si poimaine plec...

Scris: Joi Aug 25, 2011 4:22 am
de theramore
Am decis sa contribui si eu sa te ajut putin si ti am scris codul sursa pt pagina login.
Sper sa nu fii gresit nimic:D:)


Cod: Selectaţi tot

<?php

error_reporting(E_ALL);
session_start();

$login = new Login();

if (isset($_POST['submit'])) {
    $login->messages();
} else
    $login->showerrors();

class Login {
    private $_submit;
    private $_username;
    private $_password;
    private $_passmd5;
    private $_errors;

    public function __construct()
    {
        $this->_submit = (isset($_POST['submit']))? 1 : 0;

        if (isset($_POST['submit'])) {
            $this->_username = $_POST['username'];
            $this->_password = $_POST['password'];
            $this->_passmd5 = md5($this->_password);
        }

        $this->_errors = array();
    }

    public function allfields()
    {
        return (isset($_POST['username']) && isset($_POST['password']))? 1 : 0;
    }

    public function checkuser()
    {
        $checkuserq = mysql_query("SELECT * FROM admins WHERE auth = '{$this->_username}' ");
        if (mysql_num_rows($checkuser) == 1) {
            return true;
        } else
            return false;
    }

    public function createsession()
    {
        $_SESSION['username'] = $this->_username;
        $_SESSION['password'] = $this->_passmd5;
    }

    public function messages()
    {
        try {
            if ($this->allfields())
                throw new Exception("Please fill in all fields!");

            if ($this->checkuser())
                throw new Exception("Invalid username!");

            if ($this->passmatch())
                throw new Exception("Invalid password!");

            $this->createsession();
        }

        catch(Exception $e) {
            $this->_errors[] = $e->getMessage();
        }
    }

    public function passmatch()
    {
        $data = mysql_query("SELECT * FROM admins WHERE auth = '{$this->_username}' ");

        $row = mysql_fetch_array($data);

        if ($this->_passmd5 == $row['password']) {
            return true;
        } else
            return false;
    }

    public function showerrors()
    {
        foreach($this->_errors as $key => $value) {
            echo $value;
        }
    }
}

?>


<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='POST'>
   <table>
      <tr>
         <td>
         Username:
         </td>
         <td>
         <input type='text' name='username'>
         </td>
      </tr>
      <tr>
         <td>
         Password:
         </td>
         <td>
         <input type='password' name='password'>
         </td>
      </tr>
   </table>
   <input type='submit' value='Log-in' name='submit'>
</form>
[/code]

Scris: Joi Aug 25, 2011 10:12 am
de nevvermind
@theramore - in sfarsit unu care foloseste OOP. Bv and stuff. Dar...

1. Nu pune parole in sesiuni.
2. MD5 a devenit o gluma.
3. Ai scris de "show-off". OP-ul e incepator, nu-l asalta cu obiecte.
4 Ai facut $this->_username = $_POST['username']; apoi mysql_query("SELECT * FROM admins WHERE auth = '{$this->_username}' ");. Cum te protejezi tu de injectari sql?
5. Clasa ta e dependenta intern de $_POST. Foloseste dependency injecting. Mai bine ar fi un model, dacat sa lucreze direct cu $_POST.
6.

Cod: Selectaţi tot

return (isset($_POST['username']) && isset($_POST['password']));

Tine cont ca ambele input-uri pot fi setate, dar goale.
7.

Cod: Selectaţi tot

$checkuserq = mysql_query("SELECT * FROM admins WHERE auth = '{$this->_username}' ");
return (bool)mysql_num_rows($checkuser);

8. Prefera "protected" pt vizibilitatea proprietatilor/metodelor, pt a permite suprascrierea de catre descendenti.
9. In general, in codul unei clase, nu prinde propriile exceptii, ci exceptiile altor clase.
10.

Cod: Selectaţi tot

        $data = mysql_query("SELECT * FROM admins WHERE auth = '{$this->_username}' ");

        $row = mysql_fetch_array($data);

        return ($this->_passmd5 == $row['password']);

Scris: Joi Aug 25, 2011 10:36 am
de EoKlaus
Neatza:). Pot sa intervin si eu putin? Poate sa stearga cineva postul daca nu am voie sa ma bag:).

Deci....:

1.

Cod: Selectaţi tot


<?php
session_start();

mysql_connect("localhost", "user", "parola") or die("Nu ma pot connecta la MySql");
mysql_select_db("amx") or die("Numele bazei de date este incorect");

$select = mysql_query("SELECT * FROM admins");

while ($afis = mysql_fetch_array($select)){

$id = $afis['id'];

echo '<a href="editeaza.php?aid='.$id.'">Editeaza Adminul cu ID-ul: '.$id.'</a>';

}
?>



Codul de mai sus e.....aproape nefolositor;) Poti sa adaugi linkul asta:

Cod: Selectaţi tot

 echo '<a href="editeaza.php?aid='.$id.'">Editeaza Adminul cu ID-ul: '.$id.'</a>';


In tabelul acela care preia datele din mysql

2:

Cod: Selectaţi tot


<?php
session_start();

mysql_connect("localhost", "user", "parola") or die("Nu ma pot connecta la MySql");
mysql_select_db("amx") or die("Numele bazei de date este incorect");

$admin_id = $_GET['aid'];

$select = "SELECT * FROM admins WHERE id = '$admin_id'";
$select2 =mysql_query($select);
while($rand = mysql_fetch_array($select2)){

echo '<form action="verificare_edit.php" method="POST">
<input type="text" name="auth" value="'.$rand['auth'].'" />
<input type="text" name="acces" value="'.$rand['access'].'" />
<input type="text" name="flags" value="'.$rand['flags'].'" />
<input type="text" name="email" value="'.$rand['email'].'" />
<input type="text" name="data_expirarii" value="'.$rand['data_expirarii'].'" />
<input type="text" name="ultima_modificare" value="'.$rand['ultima_modificare'].'" />
<inpyt type="hidden" name="aid" value="'.$admin_id.'" />

<br /<br/>

<inputtype="submit value="Trimite">
</form>';
}
?>


Codul de mai sus extrage date din mysql si le pune in inputuri....tu doar editezi fiecare input cu cea ce vrei:). Atentie: tre sa ii pui numele care e in acel link, adica: editeaza.php

3 - verificare_edit.php:

Cod: Selectaţi tot

<?php
session_start();


mysql_connect("localhost", "user", "parola") or die("Nu ma pot connecta la MySql");
mysql_select_db("amx") or die("Numele bazei de date este incorect");


$auth = $_POST['auth'];
$acces = $_POST['acces'];
$flags = $_POST['flags'];
$email = $_POST['email'];
$data_expirarii = $_POST['data_expirarii'];
$data = date('d.m.Y');
$aid = $_POST['aid'];

$update = mysql_query("UPDATE admins SET auth = '$auth', access = '$acces', flags = '$flags', email = '$email', data_expirarii = '$data_expirarii', ultima_modificare = '$data' WHERE id = '$aid'") or die(mysql_error());

if ($update){
echo "Ai editez userl cu succes!";
}else{
echo error();
}
?>



Chestia de mai sus prea datele din formular si updateaza datele din mysql;)

Astea trei scripturi le pui in folderul cu admin, dupa ce ai pus scriptul de logare al luitheramore.

Inca o data scz daca nu am facut ceva bine, si...ii rog pe cei cu experietena mai multa sa editeze scripturile daca cred ca au vreo erroare...Eu unul nu l-am testat...

Scris: Joi Aug 25, 2011 11:33 am
de nevvermind
@EoKlaus - incearca url-ul asta pe codul tau: site/editeaza.php?aid=x' or 'x' = 'x

Stiti ca mysql_query este (sau va fi) nominalizata ca functie depasita (deprecated)?

Voi in ce era precambriana programati?

Scris: Joi Aug 25, 2011 11:42 am
de EoKlaus
@nevvermind da..E vuln erabil... :) dar...am crezut ca nimeni nu o sa incerce sa ii faca rau...Mai ales daca are admini de incredere:).

Scris: Joi Aug 25, 2011 11:49 am
de nevvermind
1. Tre sa programezi ca si cand toti utilizatorii vor sa-ti hack-uiasca aplicatia.

2. E bine sa-l instruiesti cum trebuie, de la inceput, decat sa afle pe propria piele ca nu toti utilizatorii sunt de incredere.

LE:
"Eu unul nu fac nimica fara oamenide incredere"
Nu fi naiv. Plus ca eu nu ma refer la cei care construiesc/administreaza aplicatia, ci la cei care ii vor folosi serviciile (utilizatorii/clientii).

Scris: Joi Aug 25, 2011 11:56 am
de EoKlaus
Da...eu`s cam incepatr in toate chestia asta....adica....In chestia cu hackul...stiu doar de mysql_real_escape_string si de inca o functie cu html_ (dar i-am uitat numele:) ). Mai tre sa invat si eu despre securitate:).

Si...Eu unul nu fac nimica fara oamenide incredere...asa ar trebuiii si el...Adica...toti! Dar na..

Scris: Joi Aug 25, 2011 2:10 pm
de theramore
@nevvermind:

Daca folosesc jQuery pt a prelua valorile, si intorc false la submit -ul formularului este mai securizat?

Scris: Joi Aug 25, 2011 2:41 pm
de nevvermind
@theramore - esti ironic, ca nu-mi dau seama?

Fa cate validari vrei in JS, eu dau "disable javascript" si trec peste ele.

Eu mai mult ma refer sa nu faceti operatii in DB cu datele oferite de user (fie ele din GET sau din POST), fara a fi in prealabil securizate (escaped).

Scris: Joi Aug 25, 2011 3:10 pm
de theramore
nu sunt ironic dar daca dai disable js si formularul returneaza false , mai poti face cv?

Poate imi poti explica si mie mai detaliat pe un mess, skype sa imi dai si mie un exemplu.
Scz sunt incepator am 16 ani si de cam jumatate de an programez php, si js:)

Spune.mi daca ma poti ajuta cu un ex ceva sa iti trimit un id ceva.

Scris: Joi Aug 25, 2011 3:23 pm
de nevvermind
Consider c-am facut offtopic destul. Asta nu-i topic despre problemele tale/mele, ci ale OP-ului.

PS: Nu te mai scuza atata. Ci ce daca ai 16 ani?! 6 luni?! E destul. Te descurcai cu OOP-ul, chit ca are damf de procedural, asa ca nu te mai subestima/victimiza atat. Eu mananc victime la pranz.