Select

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

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Select

Mesajde Ruben » Lun Iul 08, 2013 7:34 pm

Salutare!
Cum fac sa nu imi mai dea eroarea asta:
Notice: Undefined variable: id in C:\xampp\htdocs\game\statistici.php on line 3
Mai exact vreau sa stabilesc o coneziunea catre baza de date pe id-ul jucatorului respectiv iar dupaia intr-un tabel sa fie afisate datele lui. Atentie! Nu a tuturor utilizatorilor din baza de date, doar datele utilizatorului cu id-ul respectiv! Adica ceva in genu: Utilizator <?php Aici vine o variabila daca nu ma insel cu numele utilizatorului. ?>, Experienta ...... si tot asa.
Scriptul este acesta:

Cod: Selectaţi tot

<?php
include "dbc.php";
$select = mysql_query("SELECT * FROM utilizatori WHERE id='$id'");
?>

Multumesc de suport!



Avatar utilizator
MihaiC
Senior Member
Mesaje: 1644
Membru din: Dum Mai 14, 2006 8:07 pm

Re: Select

Mesajde MihaiC » Lun Iul 08, 2013 8:33 pm

Dev @ oblio.eu

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Mar Iul 09, 2013 10:47 am

Am rezolvat in alt mod. Multumesc oricum.
Mai am o problema legat tot de asta. Cum fac o pagina pentru administrator. Am incercat sa realizez ceva:

Cod: Selectaţi tot

<?php
include "dbc.php";
$rang = 'rang';
if(isset($rang));
$sql = "SELECT * FROM `utilizatori` WHERE `rang` ='$rang'";
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) >1){
   echo "";
}else{
   echo "Nu aveti functia de administrator! Va multumim!";
}
?>

Dar daca rangul este 0 adica utilizator normal cand intru pe pagina admin.php imi spune "Nu aveti functia de administrator! Va multumim!" iar dupa asta imi arata tot ce este pe pagina. Deci scriptul nu e chiar ce ma asteptam. Sper ca mil poate fixa cineva.(P.S. Primul meu script mai complex la care nu am avut mare nevoie de ajutor :D) Multumesc! :)

V8Li
Junior Member
Mesaje: 48
Membru din: Vin Ian 06, 2012 8:19 pm

Re: Select

Mesajde V8Li » Mie Aug 28, 2013 7:04 pm

Codul care ar functiona corect este:

Cod: Selectaţi tot

<?php
include "dbc.php";
$rang = 0; // default guest
$is_admin = false; // daca este admin variabila va fi true; if true se va afisa zona de admin
if( isset($_SESSION['rang']) ) $rang = $_SESSION['rang'];
$sql = "SELECT * FROM `utilizatori` WHERE `rang`='$rang'";
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) >1){
   echo "Welcome admin";
   $is_admin = true;
   // poti sa scrii cod de admin aici
}else{
   echo "Nu aveti functia de administrator! Va multumim!";
}

// sau cod de admin aici
if( $is_admin ) {
   echo 'cod de rulat doar pentru admin';
}
?>


in cazul tau...
1. variabila $rang este 'rang' tot timpul, chiar daca ai useri cu rang 0 si 'rang', nu ai de unde sa stii ce user e logat (de unde si linia cu $_SESSION de mai sus)
2. daca ai cod pe pagina, sub liniile pe care le-ai posta, este si normal ca el sa fie rulat; trebuie sa executi un exit pentru admin sau sa pui codul in interiorul blocului if( mysql_num_rows($res)>1 ) sau sa folosesti codul ca mai sus.

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Dum Sep 01, 2013 8:43 pm

Multumesc frumos, am sa testez ca sa dau raspuns. Multumesc din nou! :D

Avatar utilizator
razvan.p
PHPRomania Supporter
Mesaje: 21
Membru din: Mar Apr 26, 2011 4:01 pm
Localitate: Brasov
Contact:

Re: Select

Mesajde razvan.p » Lun Sep 02, 2013 5:25 pm

Ruben scrie:Salutare!
Cum fac sa nu imi mai dea eroarea asta:
Notice: Undefined variable: id in C:\xampp\htdocs\game\statistici.php on line 3
Mai exact vreau sa stabilesc o coneziunea catre baza de date pe id-ul jucatorului respectiv iar dupaia intr-un tabel sa fie afisate datele lui. Atentie! Nu a tuturor utilizatorilor din baza de date, doar datele utilizatorului cu id-ul respectiv! Adica ceva in genu: Utilizator <?php Aici vine o variabila daca nu ma insel cu numele utilizatorului. ?>, Experienta ...... si tot asa.
Scriptul este acesta:

Cod: Selectaţi tot

<?php
include "dbc.php";
$select = mysql_query("SELECT * FROM utilizatori WHERE id='$id'");
?>

Multumesc de suport!


Salut, un exmeplu mai frumos

Cod: Selectaţi tot

<?php

    //-- include db connection?
    include "dbc.php";

    //-- declare constants
    define('RANG_GUEST', 'guest');
    define('RANG_ADMIN', 'admin');

    //-- check if rang exists
    if (!empty($_SESSION['rang']) and (in_array($_SESSION['rang'], array(RANG_GUEST, RANG_ADMIN))))
    {
        //-- build query
        $str_sql = "SELECT * FROM utilizatori WHERE rang = $_SESSION[rang]";
       
        $result = (mysql_query($str_sql) or die(mysql_error()));

        if(mysql_num_rows($result) > 1)
        {
            $_SESSION['is_admin'] = true;
        }
        else
        {
            $_SESSION['is_admin'] = false;
        }
    }
    else
    {
        throw new \Exception('INVALID RANG!');
    }
?>


iar pentru restul proiectului pur si simplu verifici cheia is_admin din sesiune.

Dar eu personal iti recomand sa inveti un pic de oop si sa folosesti PDO.

Banuiesc ca te-ai apucat recent de php :)

Toate cele bune si bafta!

Razvan P.

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Mie Sep 04, 2013 6:54 pm

V8li am testat scriptul si nu e bine.
Sa explic pe larg sa nu lungimi dupaia prea mult.
Am 2 panouri de control.
1. Moderatori adica cei care au rangul 1.
2. Administratori adica cei care au rangul 2.
Bineinteles ca useri au rang 0. Acuma problema este asta. Daca pun la scriptul tau >0 imi merge. Daca pun >1 chiar daca in baza de date rangul e 200 tot imi spune ca nu am functia de administrator.
Deci vreau 2 panele adica unu pentru moderator rang 1 si pentru administrator rang 2. Multumesc!

Avatar utilizator
razvan.p
PHPRomania Supporter
Mesaje: 21
Membru din: Mar Apr 26, 2011 4:01 pm
Localitate: Brasov
Contact:

Re: Select

Mesajde razvan.p » Joi Sep 05, 2013 11:47 am

Ruben scrie:V8li am testat scriptul si nu e bine.
Sa explic pe larg sa nu lungimi dupaia prea mult.
Am 2 panouri de control.
1. Moderatori adica cei care au rangul 1.
2. Administratori adica cei care au rangul 2.
Bineinteles ca useri au rang 0. Acuma problema este asta. Daca pun la scriptul tau >0 imi merge. Daca pun >1 chiar daca in baza de date rangul e 200 tot imi spune ca nu am functia de administrator.
Deci vreau 2 panele adica unu pentru moderator rang 1 si pentru administrator rang 2. Multumesc!


Salut,

Uite aici un exemplu de clasa care sa faca ceea ce vrei tu. Clasa nu este testata deloc si foloseste doctrine DBAL, dar ca si un exemplu eu zic ca este buna, sigura conditie e sa sti un pic de oop

Cod: Selectaţi tot

/**
 * Class Auth
 */
final class Auth
{
    /**
     * Constants with ranks
     */
    const RANK_MODERATOR     = 1,
        RANK_ADMINISTRATOR = 2,
        RANK_USER          = 0;

    /**
     * Array with Ranks
     *
     * @var array
     */
    private static $a_ranks = array
    (
        self::RANK_MODERATOR        => 'Moderator',
        self::RANK_ADMINISTRATOR    => 'Administrator',
        self::RANK_USER             => 'User',
    );

    /**
     * Auth Instance
     *
     * @var static
     */
    private static $Auth = null;

    private $db = null;

    /**
     * Constructor
     *
     * @param array $settings
     */
    protected function __construct($settings = array())
    {
        //-- set custom settings to the class
        //$this->db = new db connection;
    }

    /**
     * Register Auth Instance
     *
     * @return static
     */
    public static function register($settings = array())
    {
        //-- register new Instance
        if (is_null(static::$Auth)) static::$Auth = new static($settings);

        //-- return Auth Instance
        return static::$Auth;
    }

    public function login($username, $password)
    {
        //-- validate username and password
        $validator = static::validate
        (
            array
            (
                'username' => 'alphanumeric, min:6, max:20, unique',
                'password' => 'min:10, validation_rule',
            ),
            array
            (
                'username' => $username,
                'password' => $password
            )
        );

        //-- if validation has passed do stuff
        if ($validator)
        {
            //-- begin DB transaction
            $this->db->beginTransaction();

            //-- buid query
            $str_sql = "SELECT username, password, rank FROM users WHERE username = ? and password = ?";

            //-- ge
            $a_result = $this->db->fetchAll($str_sql, array($username, $password), array(\PDO::PARAM_STR, \PDO::PARAM_STR));

            //-- commit transaction
            $this->db->commit();

            //-- get user
            $a_user = $a_result[0];

            //-- user rank found
            if (in_array($a_user['rank'], static::$a_ranks))
            {
                //-- write to session user permission and login in the user
                $this->writeUserToSession($a_user);
            }
            else
            {
                throw new Exception('Invalid Rank', 200);
            }
        }
        else
        {
            //-- validation has failed throw security exception
            throw new \Exception('Validation Failed', 100);
        }
    }

    /**
     * Validates given data based on validation rules
     *
     * @param array $validation_rules
     * @param array $data
     * @return bool     true if validation is ok false otherwise
     */
    private static function validate($validation_rules, $data)
    {

        //-- validate the data based on rules

        //-- return bool
        return true;
    }

    /**
     * Write Logged in user to session or whatever
     *
     * @param array $user_account
     */
    private function writeUserToSession($user_account)
    {
        //-- do login here and write user to session
        $_SESSION['USER_ROLE'] = $user_account['rank'];

        //-- bla bla
    }

}

//-- class usage

//-- array with auth settings
$a_auth_settings = array();

//-- try to login
Auth::register($a_auth_settings)->login('gigi', 'parola');


Toate cele bune,
Razvan P.

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Joi Sep 05, 2013 11:58 am

Serios? :)))
As dori un script cu mai putine randuri, cu scriptul acesta nu fac nimica.
Eu doresc un simplu script care sa se incadreze in ce am spus in mesajul anterior.

Avatar utilizator
razvan.p
PHPRomania Supporter
Mesaje: 21
Membru din: Mar Apr 26, 2011 4:01 pm
Localitate: Brasov
Contact:

Re: Select

Mesajde razvan.p » Joi Sep 05, 2013 12:11 pm

Ruben scrie:Serios? :)))
As dori un script cu mai putine randuri, cu scriptul acesta nu fac nimica.
Eu doresc un simplu script care sa se incadreze in ce am spus in mesajul anterior.


Serios, daca ti-ai pune un pic mintea la contributie ai vedea ca clasa accea care este ea. face si ce vrei tu dar in alt mod. Ai putea sa o adaptezi la nevoie tale. Daca te-ai fi uitat atent ai fi vazut ca in intr-o metoda pune in sesiune permisile. poti forate simplu sa faci o validare de genul.

Cod: Selectaţi tot

if ($_SESSION['USER_ROLE'] == Auth::$a_ranks[Auth::RANK_MODERATOR])
{
echo "esti mod"
}else
{
  echo "nu esti mod";
}


again, nu e mura-n gura.

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Joi Sep 05, 2013 12:22 pm

Asta e simplu dar nu am priceput faza cu: Auth::$a_ranks[Auth::RANK_MODERATOR] . Nu am mai vazut pana acuma asa ceva. :D

Avatar utilizator
razvan.p
PHPRomania Supporter
Mesaje: 21
Membru din: Mar Apr 26, 2011 4:01 pm
Localitate: Brasov
Contact:

Re: Select

Mesajde razvan.p » Joi Sep 05, 2013 12:31 pm

Pai e simplu $a_ranks este un array static asta inseamna ca poate fi accesat fara sa instantiezi clasa in sine. Trebuie doar sa schimbi din private in public,
iar Auth::RANK_MODERATOR este cheia din array deci Auth::$a_ranks[Auth::RANK_MODERATOR] iti va returna moderator. :)

Dar ca sa intelegi cum funcioneaza constantele cu rank-uri le pui valoare care le ai in baza de date

iar array-ul $a_ranks il faci asa

Cod: Selectaţi tot

   
public static $a_ranks = array
(
    self::RANK_MODERATOR           => self::RANK_MODERATOR,
    self::RANK_ADMINISTRATOR    => self::RANK_ADMINISTRATOR,
    self::RANK_USER                     => self::RANK_USER,
);


atunci if ($_SESSION['USER_ROLE'] == Auth::$a_ranks[Auth::RANK_MODERATOR]) se traduce asa if (1 == 1)

sper ca am fost destul de explicit :)

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Joi Sep 05, 2013 12:39 pm

Nu am inteles: le pui valoare care le ai in baza de date
Unde pun valoare din baza de date? Adica 1,2,3, la astea te referi ca valoare nu?

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Select

Mesajde Ruben » Joi Sep 05, 2013 12:42 pm

Nu te mai shinui sa imi explici ca fac altcumva. Imi fac pagina de administrator si pun .htaccess + .htpasswd si s-a rezolvat toata problema, si la moderator la fel, multumesc frumos oricum!

Avatar utilizator
razvan.p
PHPRomania Supporter
Mesaje: 21
Membru din: Mar Apr 26, 2011 4:01 pm
Localitate: Brasov
Contact:

Re: Select

Mesajde razvan.p » Joi Sep 05, 2013 12:49 pm

Ruben scrie:Nu am inteles: le pui valoare care le ai in baza de date
Unde pun valoare din baza de date? Adica 1,2,3, la astea te referi ca valoare nu?


1. Valorile* (ce analfabet sunt :D)
2. Da.
3. Poti sa faci si asa :)

Un sfat daca te dai batut cand ajungi intr-un impas de genul sa sti ca nu e ok. Chinuie-te cu php-ul daca vrei cu adevarat sa inveti. Baga tutoriale, citesti carti etc.

Spor!


Înapoi la “Cod PHP”

Cine este conectat

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