[HELP] admin panel

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

ZecaR
PHPRomania Supporter
Mesaje: 29
Membru din: Lun Dec 20, 2010 6:32 pm

[HELP] admin panel

Mesajde ZecaR » Mie Aug 24, 2011 9:58 pm

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...



Sacalu
PHPRomania Supporter
Mesaje: 23
Membru din: Mie Dec 29, 2010 4:58 pm
Localitate: Campina

Mesajde Sacalu » Mie Aug 24, 2011 11:13 pm

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...

ZecaR
PHPRomania Supporter
Mesaje: 29
Membru din: Lun Dec 20, 2010 6:32 pm

Mesajde ZecaR » Mie Aug 24, 2011 11:16 pm

iti aduc aminte...

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

Sacalu
PHPRomania Supporter
Mesaje: 23
Membru din: Mie Dec 29, 2010 4:58 pm
Localitate: Campina

Mesajde Sacalu » Mie Aug 24, 2011 11:29 pm

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...

theramore
PHPRomania Supporter
Mesaje: 12
Membru din: Lun Aug 22, 2011 4:04 pm
Localitate: Slobozia
Contact:

Mesajde theramore » Joi Aug 25, 2011 4:22 am

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]

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Aug 25, 2011 10:12 am

@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']);

EoKlaus
Average Member
Mesaje: 133
Membru din: Mie Apr 20, 2011 3:11 pm
Localitate: Grecia

Mesajde EoKlaus » Joi Aug 25, 2011 10:36 am

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...
Ultima oară modificat Joi Aug 25, 2011 9:43 pm de către EoKlaus, modificat 1 dată în total.
Copilaria nu este de la nastere pana la o anumita varsta, iar la o anumita varsta copilul a crescut si ia toate lucrurile copilaresti si le pune la o parte. Copilaria este regatul unde nu moare nimeni.

Imagine
[img=http://klaus-blog.hi2.ro/fisiere/imagine.php]

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Aug 25, 2011 11:33 am

@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?

EoKlaus
Average Member
Mesaje: 133
Membru din: Mie Apr 20, 2011 3:11 pm
Localitate: Grecia

Mesajde EoKlaus » Joi Aug 25, 2011 11:42 am

@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:).

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Aug 25, 2011 11:49 am

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).
Ultima oară modificat Joi Aug 25, 2011 12:17 pm de către nevvermind, modificat 1 dată în total.

EoKlaus
Average Member
Mesaje: 133
Membru din: Mie Apr 20, 2011 3:11 pm
Localitate: Grecia

Mesajde EoKlaus » Joi Aug 25, 2011 11:56 am

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..

theramore
PHPRomania Supporter
Mesaje: 12
Membru din: Lun Aug 22, 2011 4:04 pm
Localitate: Slobozia
Contact:

Mesajde theramore » Joi Aug 25, 2011 2:10 pm

@nevvermind:

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

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Aug 25, 2011 2:41 pm

@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).

theramore
PHPRomania Supporter
Mesaje: 12
Membru din: Lun Aug 22, 2011 4:04 pm
Localitate: Slobozia
Contact:

Mesajde theramore » Joi Aug 25, 2011 3:10 pm

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.

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Aug 25, 2011 3:23 pm

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.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 8 vizitatori