Проверка за редове от базата данни

teroristd

Registered
Здравейте, имам тблица с няколко реда три от които са first_name, last_name, email. В момента имам 3 пробни записа, но в последствие ще станат повече. Давам пример какво имам в базата.

Ред 1: first_name = Ivan, last_name = Ivanov, email = aaa@abv.bg
Ред 2: first_name = Stoian, last_name = Stoianov, email = bbb@abv.bg
Ред 3: first_name = Dragan, last_name = Draganov, email = ccc@abv.bg

Имам форма с трите полета first_name, last_name, email. Трябва ми проверка дали даден ред съществува в базата, и ако да правя нещо, ако не правя друго нещо. Давам пример.

Въведено е first_name = Ivan, last_name = Stoianov, email = aaa@abv.bg
Това трябва да е грешка защото въпреки че last_name = Stoianov съществува в базата то реда не съвпада напълно. Един вид въведеното във формата трябва да съвпада с някой от редовете в базата, иначе е грешка.

Как да направя тази проверка?
 
teroristd каза:
Здравейте, имам тблица с няколко реда три от които са first_name, last_name, email. В момента имам 3 пробни записа, но в последствие ще станат повече. Давам пример какво имам в базата.

Ред 1: first_name = Ivan, last_name = Ivanov, email = aaa@abv.bg
Ред 2: first_name = Stoian, last_name = Stoianov, email = bbb@abv.bg
Ред 3: first_name = Dragan, last_name = Draganov, email = ccc@abv.bg

Имам форма с трите полета first_name, last_name, email. Трябва ми проверка дали даден ред съществува в базата, и ако да правя нещо, ако не правя друго нещо. Давам пример.

Въведено е first_name = Ivan, last_name = Stoianov, email = aaa@abv.bg
Това трябва да е грешка защото въпреки че last_name = Stoianov съществува в базата то реда не съвпада напълно. Един вид въведеното във формата трябва да съвпада с някой от редовете в базата, иначе е грешка.

Как да направя тази проверка?
PHP:
function verifyUsername($user){        
	$chek = mysql_query("SELECT * FROM `members` WHERE `user`='{$user}';")or die(mysql_error());        
	return mysql_num_rows($chek)? 1 : 0; 
}
function verifyEmail($email){        
	$chek2 = mysql_query("SELECT * FROM `members` WHERE `email`='{$email}';")or die(mysql_error());        
	return mysql_num_rows($chek2)? 1 : 0; 
}

if(verifyUsername($user) == 1){
	echo "Ima potrebitel s takova ime";
}
if(verifyEmail($email) == 1){ 
	echo "Ima potrebitel s takav meil";
}

Кода работи с mysql като ще трябва да го преправиш на mysqli

тоест заменяш: mysql_query с mysqli_query
и mysql_num_rows с mysqli_num_rows
 
Няма да ми се получи по този начин поради няколко причини. Първо работя с PDO, извинете че пропуснах да кажа, и там няма mysql_num_rows незнам защо :D. Второ if(verifyEmail($email) == 1) например може да има такъв мейл, а също и такова име но да са в различни редове. Прочети внимателно какво съм написал.
 
Оправих се мерси. То решението е елементарно ама като имам бъбреци вместо мозък ... :D
 
teroristd каза:
Оправих се мерси. То решението е елементарно ама като имам бъбреци вместо мозък ... :D

Със заявка като тази:
[sql]"SELECT * FROM `members` WHERE `email`='{$email}'[/sql]
проверяваш изобщо дали в таблицата има такъв регнат мейл. Ако ли не ще дадеш още една клауза and ime=$name примерно. Я си драсни решението на проблема с PDO да видя нещо че се сетих сега. :)
 
Просто правя проверка дали заявката съществува :)
Код:
$sql = $this->prepare('SELECT * FROM members WHERE first_name=? AND last_name=? AND email=?', array($firstName, $lastName, $email))->execute()->fetchAllAssoc();
            
            if (!$sql) {
                return 'data_not_exist';
            }
 
teroristd каза:
Просто правя проверка дали заявката съществува :)
Код:
$sql = $this->prepare('SELECT * FROM members WHERE first_name=? AND last_name=? AND email=?', array($firstName, $lastName, $email))->execute()->fetchAllAssoc();
            
            if (!$sql) {
                return 'data_not_exist';
            }

Колега, ако не ти е проблем би ли си пратил целият клас за конекция с базата? Дори на лично да е просто виждам, че ползваш prepare statements и искам да разгледам как го правиш. По принцип си търся за едно фреймче да си драсна клас за конекция с базата но с PDO.
 
Аз съм с фрейма на gatakka, с някои леки промени и оправени бъгчета. Класа Database е вързан с един друг клас. Мога да ти ги пратя и двата ако искаш, също ще ти покажа и как го ползвам в моделите.
 
teroristd каза:
Аз съм с фрейма на gatakka, с някои леки промени и оправени бъгчета. Класа Database е вързан с един друг клас. Мога да ти ги пратя и двата ако искаш, също ще ти покажа и как го ползвам в моделите.
Прати ги :)
 
Не знам дали ще ти свършат работа защото те са вързани и към конфиг класа и конфиг файловете, ама ето може да си направиш извод за логиката.

КласDatabase

Код:
namespace application;

class Database {

    private static $_instance = null;

    /**
     *
     * @var \application\Config 
     */
    private $_config;
    private $_dbConnection = array();

    private function __construct() {
        $this->_config = \application\Config::getInstance();
    }

    /**
     *
     * @return \application\Database 
     */
    public static function getInstance() {
        if (self::$_instance == null) {
            self::$_instance = new \application\Database();
        }
        return self::$_instance;
    }

    public function getDatabaseConnection($connection = 'default') {
        if (!$connection) {
            throw new \Exception('No indetificator', 500);
        }
        if ($this->_dbConnection[$connection]) {
            return $this->_dbConnection[$connection];
        }
        $cnf = $this->_config->db_config_file;
        if (!$cnf[$connection]) {
            throw new \Exception('No valid indetificator', 500);
        }
        $dbh = new \PDO($cnf[$connection]['host_and_dbName'], $cnf[$connection]['username'], $cnf[$connection]['password'], $cnf[$connection]['pdo_options']);
        $this->_dbConnection[$connection] = $dbh;
        return $dbh;
    }

}


Клас DatabaseStatements

Код:
class DatabaseStatements {

    protected $_connection = 'default';
    private $_db = null;
    private $_stmt = null;
    private $_params = array();
    private $_sql = null;

    public function __construct($connection = null) {
        if ($connection instanceof \PDO) {
            $this->_db = $connection;
        } elseif ($connection != null) {
            $this->_db = \application\Database::getInstance()->getDatabaseConnection($connection);
            $this->_connection = $connection;
        } else {
            $this->_db = \application\Database::getInstance()->getDatabaseConnection($this->_connection);
        }
    }

    /**
     * 
     * @param type $sql
     * @param type $params
     * @param type $pdoOptions
     * @return \application\DatabaseStatements
     */
    public function prepare($sql, $params = array(), $pdoOptions = array()) {
        $this->_stmt = $this->_db->prepare($sql, $pdoOptions);
        $this->_params = $params;
        $this->_sql = $sql;
        return $this;
    }

    /**
     * 
     * @param type $params
     * @return \application\DatabaseStatements
     */
    public function execute($params = array()) {
        if ($params) {
            $this->_params = $params;
        }
        $this->_stmt->execute($this->_params);
        return $this;
    }

    public function fetchAllAssoc() {
        return $this->_stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function fetchRowAssoc() {
        return $this->_stmt->fetch(\PDO::FETCH_ASSOC);
    }

    public function fetchAllNum() {
        return $this->_stmt->fetchAll(\PDO::FETCH_NUM);
    }

    public function fetchRowNum() {
        return $this->_stmt->fetch(\PDO::FETCH_NUM);
    }

    public function fetchAllObj() {
        return $this->_stmt->fetchAll(\PDO::FETCH_OBJ);
    }

    public function fetchRowObj() {
        return $this->_stmt->fetch(\PDO::FETCH_OBJ);
    }

    public function fetchAllColumn($column) {
        return $this->_stmt->fetchAll(\PDO::FETCH_COLUMN, $column);
    }

    public function fetchRowColumn($column) {
        return $this->_stmt->fetch(\PDO::FETCH_BOUND, $column);
    }

    public function fetchAllClass($class) {
        return $this->_stmt->fetchAll(\PDO::FETCH_CLASS, $class);
    }

    public function fetchRowClass($class) {
        return $this->_stmt->fetch(\PDO::FETCH_BOUND, $class);
    }

    public function getLastInsertId() {
        return $this->_db->lastInsertId();
    }

    public function getAffectedRows() {
        return $this->_stmt->rowCount();
    }

    public function getSTMT() {
        return $this->_stmt;
    }

}


А така го ползвам в моделите

Код:
class Model extends \application\DatabaseStatements {

    public function __construct($dbConnection) {
        parent::__construct($dbConnection);
    }
 
Значи ще си драсна и един PDO class като ще си направя един интерфейс за да уеднаквя имената на методите и просто ще сменям след това само един ред да преминавам от MySQLi на PDO :)
 
teroristd каза:
Лошо няма щом те влече :D
Нямам време да си драсна като хората сесиите и темплейтната система. Рутерите се драскат специфично за всеки един сайт. Иначе защитите и така нататък си ги драснах и то доста добре станаха. :)
 

Back
Горе