LINUX.ORG.RU

PHP help requested


0

0

Народ, пишу тест, в PHP никогда ничего не делал.
Где в коде ошибки?

sql по любому неправильный,
подозреваю, что функцию надо объявлять перед использованием,
что еще???

####################################
$order = strval(@$_REQUEST['order']);
$condition = array(
username => strval(@$_REQUEST['name']),
password => strval(@$_REQUEST['password']),
);
$sql = "SELECT 1 FROM users";

$results = getResults($sql, $condition, $order);

if (count($results)) {
echo "Login ok!";
} else {
echo "Login nicht ok!";
}


function getResults ( $sql, $condition, $order )
{
$where = array();
foreach ($condition as $field => $value) {
$where[] = $field . ' = ' . addslashes($value);
}
if (count($where)) {
$sql .= ' WHERE ' . implode(' AND ', $where);
}
$sql .= " $order";
$results = array();
$result = mysql_query($sql);
while (($row = mysql_fetch_object($result)) !== FALSE) {
$results[] = $row;
}
return $results;
}
####################################
Перемещено boombick из Development

УБЬЮ НАФИГ!!!!

$link = new PDO("mysql:host=localhost db=xxx","dbusername","dbpassword");
$query = $link->prepare("select count(*) from users where login = :login and pass = :pass");
$query->execute(
   array(
      ":login" => @$_REQUEST["name"],
      ":password" => @$_REQUEST["password"]
   )
);
$result = $query->fetch();
$query->closeCursor();
if ($resul[0]) {
    ... узер залогинен ...
} else {
    ... идет лесом ...
}

no-dashi ★★★★★
()

Эх, перестрелять бы всех недоученных пых-пыхеров, вот и пришел бы всеобщий коммунизм и счастье...

no-dashi ★★★★★
()

<grammarnazi_mode>

УБЬЮ НАФИГ!!!! хэлп required, а не requested! да и не required, a needed, т.к риквайед - это требование, а не просьба.

а если хочешь все-таки реквестнуть хэлп, то пиши без -ed

</grammarnazi_mode>

а по теме уже все сказали

opensuse
()
Ответ на: комментарий от future-of-the-lor

Тебя забыли спросить, что нужно, а что нет.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

no-dashi> УБЬЮ НАФИГ!!!!

УБЬЮ НАФИГ!!!!!!!! ( ;-) )

Не учи детей плохому!

//Autoload, easy to use
Zend_Loader::registerAutoload();
$config = new Zend_Config_Ini('config.ini', null);
//Database link
$db = Zend_Db::factory(
  $config->database->driver,
  $config->database->toArray()
);
//Auth instance
$auth = Zend_Auth::getInstance();
//Adapter for auth, via database table
$authAdapter = new Zend_Auth_Adapter_DbTable(
  $this->server->db,
  'users',
  'login',
  'password'
);
//Set identify and Credential(login, password)
$authAdapter->setIdentity(@$_REQUEST["name"]);
$authAdapter->setCredential(@$_REQUEST["password"]);
//Try authenticate
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
   ... узер залогинен ...
} else {
   ... идет лесом ...с ошибкой $result->getMessages()
}



config.ini(лежит в каталоге недоступном врагам):

[database]
driver=PDO_MYSQL
host=localhost
port=3306
username=test
password=test
dbname=test




roller ★★★
()

Для топикстартера:

> $sql .= " $order"; 
Вот тут а увас SQL-injection, если я передам параметр order=" UNION SELECT 1 AS cnt", то даже в случае неверного логина/пароля вернется 1.

>$where[] = $field . ' = ' . addslashes($value); 
addslashes не используйте, это костыль. Практически все экстеншены для работы с базой имеют метод с именем escape_string или quote. Которые сделают это правильно. Или же через prepare + binding как показал no-dashi.

Но наиболее правильно, ЕСЛИ вы собираетесь дальше писать на пхп это использование библиотек оберток для доступа к данным, например Zend_Db.


Ваш запрос можно выполнить в нем например так:
$resultRow = $db->fetchRow(
  "select count(*) from users where login = :login and pass = :pass",
  array("login" => $login, "pass" => $password)
);

Или так:
$select = $db->select()
  ->from("users", "count(*)")
  ->where("login = ?", $login)
  ->where("pass = ?", $password);

$resultOnlyCount = $db->fetchOne($select);

roller ★★★
()
Ответ на: комментарий от roller

Ну я бы сказал, что судя по вопросу (из которого следует уровень "программиста", из которого следует уровень "проекта" :-)) Zend это как бы оверкилл

no-dashi ★★★★★
()
Ответ на: комментарий от future-of-the-lor

>Смешной тред. Убогость PHPшников во всех постах.

+1

from django.contrib.auth import authenticate, login

def auth(request):
    user = authenticate(username = request.POST['username'], password = request.POST['password'])
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return a 'disabled account' error message
    else:
        # Return an 'invalid login' error message.

redixin ★★★★
()
Ответ на: комментарий от redixin

> from django.contrib.auth import authenticate, login

зойчем? там для этого генерик есть.

kkw
()
Ответ на: комментарий от redixin

>+1

И?

$me = user::do_login($data['username'], $data['password']);
if($me === false)
// Ошибка аутентификации
else
// ...

Так что - мимо :)

>request.POST['username']

Фу, как некрасиво... Прямое использование GET/POST-данных - это так приземлённо :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.