Как в PHP проверить на лицензию?

Вот пытаюсь сделать к примеру есть база Данных accounts, в ней столбцы login и hwid
Когда человек в программе пытается авторизоваться мы отправляем запрос такого типа
site.ru/check.php?login=vasya&hwid=228
В ответе получаем если да то "Лицензия есть.", а если нету то "Лицензии нету."
Я знаю код написать легко но я Яп Delphi в PHP максимум Hello World.
В Рунете нашёл такой же скрипт но он не рабочий(
<?php
$link = mysql_connect( 'localhost', 'rexet', 'm', 'ret');
if ( !empty($_GET['login'] ) )
{
        if (!empty($_GET['hwid']))
        {
                $login1 = mysql_real_escape_string( $link, $_GET['login'] );
                $hwid1 = mysql_real_escape_string( $link, $_GET['hwid'] );
                $add = $_GET['add'];
                $result = mysql_query( $link, "SELECT * FROM `accounts` WHERE login='$login1' AND hwid='$hwid1' ORDER BY id DESC LIMIT 1");
                $row = mysql_fetch_assoc($result);
                if ( empty($row['id'] ) )
                {
                        echo 'LIC YES |';
                      
                        if ( $add == 1 ) {
                                
                                mysql_query( $link, "INSERT INTO `accounts` ( `mail`, `pass`) VALUES ( '".$mail."','".$pass."')");
                                
                        }
                }else{
                        echo 'LIC NO!';
                }
        }
}
//mysql_close( $link );
?>
  • Вопрос задан
  • 959 просмотров
Пригласить эксперта
Ответы на вопрос 2
Pjeroo
@Pjeroo
Веб-разработчик
$pdo = new PDO('mysql:host=localhost;dbname=accounts_db', 'root', '1111');

$login = filter_input(INPUT_GET, 'login', FILTER_SANITIZE_MAGIC_QUOTES);
$hwid = filter_input(INPUT_GET, 'hwid', FILTER_SANITIZE_MAGIC_QUOTES);

if ($login && $hwid) {
    $query = $pdo->prepare('select * from accounts where login = :login and hwid = :hwid');
    $query->execute(['login' => $login, 'hwid' => $hwid]);
    $info = $query->fetch(PDO::FETCH_ASSOC);

    if ($info) {
        echo 'successful';
    }
    else {
        echo 'buy license';
    }
} else {
    echo 'not enough params';
}


Не стоит использовать конструкции mysql_*, так же уже не кошерно обращаться напрямую через $_GET, лучше использовать обёртки, там и валидацию сразу можно произвести. А еще нужно пользоваться prepared statesments, чтобы повысить безопасность кода.

php.net/manual/ru/pdo.prepare.php
php.net/manual/ru/function.filter-input.php

Говорят, что mysqli_* немного быстрее, но он платформозависим и я предпочитаю PDO, но можно использовать и mysqli_*, но не mysql_*
Ответ написан
@dk-web
ВОт рабочее решение
<?php
$link = mysql_connect("localhost", "ВАШ ЛОГИН", "ВАШ ПАРОЛЬ")
        or die("Не могу подключиться: " . mysql_error());
    print ("Успешно подключились<br>");
// название вашей базы данных - не accounts
mysql_select_db('НАЗВАНИЕ БД', $link) or die ('База не доступна - ошибка : ' . mysql_error());

if ( !empty($_GET['login'] ) and  !empty($_GET['hwid']))
{
     $login1 = mysql_real_escape_string($_GET['login'] );
     $hwid1 = mysql_real_escape_string($_GET['hwid'] );
           //   $add = $_GET['add']; // в вашей строке нет add

// полагем, что данные получили, делаем запрос
      $q="SELECT * FROM `accounts` WHERE `login`='".$login1."' AND `hwid`='".$hwid1."'";
      $result = mysql_query($q) or die ("<br>Ошибка запроса".mysql_error());
                  if (mysql_num_rows($result)>0) {
                        echo '<br>Уважаемый '.$login1.' - у вас уже есть лицензия';
                        //if ( $add == 1 ) {
                      //          mysql_query( $link, "INSERT INTO `accounts` ( `mail`, `pass`) VALUES ( '".$mail."','".$pass."')");
                       // } //у вас пока этих данных нет - они скорее всего приходят из формы

                    } else {
                        echo '<br>Лицензии нет - срочно купите лицензию';
               }
} 
else {
        echo 'Нет логина или пароля в адресной строке';
}
            
//mysql_close( $link );
?>


282b77d67afa40f68660c6b8649a9e8d.png3329ec41a91f4885a7629c1f702c5ed8.png3810390ca22d4d21ae11779091b1103d.png

уверен, что оно не единственное верное, как и все в этом деле.. но рабочее.
Ответ написан
Ваш ответ на вопрос

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

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