За последние 24 часа нас посетили 63217 программистов и 1743 робота. Сейчас ищут 1059 программистов ...

Проверьте правильность написания

Тема в разделе "PHP для новичков", создана пользователем Golovorot, 30 мар 2015.

  1. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    Код (PHP):
    1. <?
    2.     require "db.php";    
    3.     $viewer_id = $_POST["id"];
    4.     $hash = $_POST["hash"];
    5.         $hash1 = $_POST["hash1"];
    6.     $totalVotes = $_POST["votes"];
    7.         $api_id = "апи ид";
    8.         $api_secret = "секрет";
    9.     if ($totalVotes <= 0) {
    10.         exit("req=false&_error=invalidVotes");
    11.     }
    12.         if ($hash1!=md5($viewer_id.'_'.$totalVotes)){
    13.                 exit('req=false&_error=hash1_error');
    14.         }
    15.     if ($hash!=md5($api_id.'_'.$viewer_id.'_'.$api_secret)){
    16.         exit('req=false&_error=hash_error');    
    17.     };
    18.     $res = mysql_query("SELECT diamond,id FROM resources WHERE id=$viewer_id", $db);
    19.     if (!$res) {
    20.         exit("req=false&_error=mysql_error&p=0");
    21.     }
    22.     $arr = mysql_fetch_array($res);    
    23.     $dDiamond = $totalVotes * 15;
    24.         $diamond = (int)$arr["diamond"] + (int) $dDiamond;    
    25.     $req = mysql_query("UPDATE resources SET diamond=$diamond WHERE id=$viewer_id", $db);
    26.     if (!$req) {
    27.         exit("req=false&_error=mysql_error&p=1");
    28.     }
    29.     echo "req=true&diamond=$diamond";
    30. ?>
    И дайте советов

    *Совет первый: всегда оформляйте PHP-код, оборачивая его в теги [code=php][/code]. Сами посмотрите как стало, и сравните с тем, что было.
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Сходу - твой код уязвим для SQL-инъекций.
    Ты зачем-то переприсваиваешь содержимое $POST переменным, но никак не проверяешь их содержимое.

    И второе - расширение mysql_ устарело, уже сейчас, вот прям сейчас, переходи на mysqli_.

    Добавлено спустя 6 минут:
    Такие вот конструкции тоже не совсем понятны. Ты же в курсе, что это просто будет выброшено на страницу, а не добавлено в адресную строку?

    Ну и вообще убивать скрипт только потому, что что-то там в БД не отработало, или не те параметры пришли - не кошерно. Пользователь нажмет на кнопочку, забыв поставить где-то галочку, или у тебя что-то глюканет, и ПЫЩ - сайт пропал, осталась только белая страница с непонятной строчкой текста. Пользователи пугаются таких вещей. Не нужно им это выбрасывать в лицо. Старайся обрабатывать все ошибки максимально мягко. В идеале - чтобы максимум, что видел пользователь, если что-то поломалось, это красивая мессага там, где человек ожидает результат своих действий, мол "К сожалению, бла бла бла, сейчас что-то не работает, приносим извинения, бла бла бла, администрация уже разбирается с этим." А саму ошибку пиши в лог. Да, даже если ты проверяешь логи раз в три года, все равно пусть скрипт выдает пользователю, что ты уже в курсе, и что ты уже чинишь. "Ситуация под контролем"(с).
     
  3. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    ответ отправляется в flash среду, а там он обрабатывается
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    И как это связано или противоречит тому, что я сказал? :)
     
  5. Golovorot

    Golovorot Активный пользователь

    С нами с:
    24 окт 2012
    Сообщения:
    53
    Симпатии:
    0
    Все это теряет смысл
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А, ты про эту часть. В данном случае да. Но на будущее так все равно лучше не делать, если речь идет о работе с браузером :)