Как оптимизировать php скрипт?

Как правильно оптимизировать данный php скрипт?
Помогите пожалуйста.
<?php

// Скрипт проверки

# Соединямся с БД
mysql_connect("localhost", "root", "passwd");
mysql_select_db("base");

if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{   
    $query = mysql_query("SELECT *,INET_NTOA(user_ip) AS user_ip FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    $userdata = mysql_fetch_assoc($query);

    if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
 or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0")))
    {
        setcookie("id", "", time() - 3600*24*30*12, "/");
        setcookie("hash", "", time() - 3600*24*30*12, "/");
        print "Хм, что-то не получилось";
    }
    else
    {
        print "Привет, ".$userdata['user_login'].". Всё работает!".$userdata['user_balance'].; /* .$userdata['user_balance']. неправильно вставлена. и за чего страница не отображается */
    }
}
else
{
    print "Включите куки";
}

Да и как преобразовать в html.
  • Вопрос задан
  • 2869 просмотров
Решения вопроса 2
@kfuntov
Что значит "правильно оптимизировать"?
Тут всё написано так, что должно выполнятся быстро.
Есть ряд вещей не очень направленных на оптимизацию, а именно:
1. Нет проверки на то, что $userdata пустой (на случай, если у пользователя в куках был user_Id, которого в базе нету, например 9999999).
2. В таком случае избыточная проверка $userdata['user_id'] !== $_COOKIE['id'] - сначала делается запрос "дай мне пользователя с таким id", а потом проверяется "тот ли id ты мне дал?"
3. В строке print "Привет, ".$userdata['user_login'].". Всё работает!".$userdata['user_balance'].; - явно лишняя последняя точка.
4. mysql_* функции считаются плохими для использования. ВСЕ нормальные люди советуют использоватьPDO или MySQLi (в том числе и сайт php.net).

Про преобразование в html: то, что получается на выходе того скрипта - уже html. без тегов, но в принципе html.
Если нужно добавить теги - это можно сделать, но тут надо понимать, что надо получить. Если важно просто "чтобы был html", то поздравляю, он есть.
Ответ написан
@corsar100
<?php

// Скрипт проверки
# Соединямся с БД
$db = new mysqli("localhost", "root", "passwd", "base");

if(isset($_COOKIE['id'], $_COOKIE['hash'])) {

  // * -> user_id, user_login, user_hash, user_ip, user_balance
  $result = $db->query('SELECT *,INET_NTOA(user_ip) AS user_ip FROM users WHERE user_id= \'' . intval($_COOKIE['id']) . '\' LIMIT 1');

  $userdata = $result->fetch_assoc();

  if(
    $userdata['user_hash'] !== $_COOKIE['hash'] |
    $userdata['user_id'] !== $_COOKIE['id'] |
    $userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'] & $userdata['user_ip'] !== "0"
  ) {

    $time = time() - 3600*24*30*12;
        setcookie('id', '', $time, '/');
        setcookie('hash', '', $time, '/');

    echo 'Хм, что-то не получилось';
  } else {
    printf('Привет, %s. Всё работает! %s', $userdata['user_login'], $userdata['user_balance']);
  }
} else {
    echo 'Включите куки';
}

$db->close();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
MySQLi, ' вместо " - там где идет объединение строк, 3600*24*30*12 = 31104000 -сразу так и пишите, к чему эти вычисления?
if($userdata = mysql_fetch_assoc($query)){
  ...
}
Ответ написан
- Используем PDO;
- Нет проверки на пустые куки;
- Убрать проверку на IP - это пережиток прошлого;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы