За последние 24 часа нас посетили 59799 программистов и 5355 роботов. Сейчас ищут 2129 программистов ...

Оптимизация кода

Тема в разделе "PHP для новичков", создана пользователем eXstyle, 17 авг 2016.

  1. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте. Подскажите пожалуйста, как можно оптимизировать сие чудо

    Код (Text):
    1. $imya = strip_data(mysql_escape_string(htmlspecialchars($_POST['name'])));
    2. $lastname = strip_data(mysql_escape_string(htmlspecialchars($_POST['lastname'])));
    3. $dater = strip_data(mysql_escape_string(htmlspecialchars($_POST['dater'])));
    4. $tel = strip_data(mysql_escape_string(htmlspecialchars($_POST['tel'])));
    5. $city = strip_data(mysql_escape_string(htmlspecialchars($_POST['city'])));
    6. $sport = strip_data(mysql_escape_string(htmlspecialchars($_POST['sport'])));
    7. $pogoda = strip_data(mysql_escape_string(htmlspecialchars($_POST['pogoda'])));
    8. $varik = strip_data(mysql_escape_string(htmlspecialchars($_POST['varik'])));
    9. $zkss = strip_data(mysql_escape_string(htmlspecialchars($_POST['zkss'])));
    10. $grkrov = strip_data(mysql_escape_string(htmlspecialchars($_POST['grkrov'])));
    11. $ves = strip_data(mysql_escape_string(htmlspecialchars($_POST['ves'])));
    12. $rost = strip_data(mysql_escape_string(htmlspecialchars($_POST['rost'])));
    13. $plet = strip_data(mysql_escape_string(htmlspecialchars($_POST['plet'])));
    14. $pol = strip_data(mysql_escape_string(htmlspecialchars($_POST['pol'])));
    15. $hrzab = strip_data(mysql_escape_string(htmlspecialchars($_POST['hrzab'])));
    16. $trzal = strip_data(mysql_escape_string(htmlspecialchars($_POST['trzal'])));
    17. $vpred = strip_data(mysql_escape_string(htmlspecialchars($_POST['vpred'])));
    18. $more = strip_data(mysql_escape_string(htmlspecialchars($_POST['more'])));
    19. //####################################################################
    20. If((isset($imya)) && ($stat['name_user'] == '')){
    21. mysql_query("UPDATE `users` SET `name_user` = '".$imya."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    22. } else {echo"Имя не менялось <br />"; }
    23. //####################################################################
    24. If((isset($lastname)) && ($stat['lastname'] == '')){
    25. mysql_query("UPDATE `users` SET `lastname` = '".$lastname."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    26. } else {echo"Фамилия не менялось <br />"; }
    27. //####################################################################
    28. If((isset($dater)) && ($stat['dater'] == '0000-00-00')){
    29. mysql_query("UPDATE `users` SET `dater` = '".$dater."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    30. } else {echo"Дата не менялось <br />"; }
    31. //####################################################################
    32. If((isset($tel)) && ($stat['tel'] != $tel)){
    33. mysql_query("UPDATE `users` SET `tel` = '".$tel."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    34. } else {echo"Телефон не менялся <br />"; }
    35. //####################################################################
    36. If((isset($city)) && ($stat['city'] != $city)){
    37. mysql_query("UPDATE `users` SET `city` = '".$city."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    38. } else {echo"Город не менялся <br />"; }
    39. //####################################################################
    40. If((isset($sport)) && ($stat['sport'] != $sport)){
    41. mysql_query("UPDATE `users` SET `sport` = '".$sport."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    42. } else {echo"Спорт не менялся <br />"; }
    43. //####################################################################
    44. If((isset($pogoda)) && ($stat['pogoda'] != $pogoda)){
    45. mysql_query("UPDATE `users` SET `pogoda` = '".$pogoda."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    46. } else {echo"Метеозависимость не менялась <br />"; }
    47. //####################################################################
    48. If((isset($varik)) && ($stat['varik'] != $varik)){
    49. mysql_query("UPDATE `users` SET `varik` = '".$varik."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    50. } else {echo"Варикоз не менялся <br />"; }
    51. //####################################################################
    52. If((isset($zkss)) && ($stat['zkss'] != $zkss)){
    53. mysql_query("UPDATE `users` SET `zkss` = '".$zkss."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    54. } else {echo"zkss не менялся <br />"; }
    55. //####################################################################
    56. If((isset($grkrov)) && ($stat['grkrov'] == '')){
    57. mysql_query("UPDATE `users` SET `grkrov` = '".$grkrov."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    58. } else {echo"grkrov не менялся <br />"; }
    59. //####################################################################
    60. If((isset($ves)) && ($stat['ves'] == '') || ($stat['ves'] == '0')){
    61. mysql_query("UPDATE `users` SET `ves` = '".$ves."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    62. } else {echo"ves не менялся <br />"; }
    63. //####################################################################
    64. If((isset($rost)) && ($stat['rost'] == '') || ($stat['rost'] == '0')){
    65. mysql_query("UPDATE `users` SET `rost` = '".$rost."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    66. } else {echo"rost не менялся <br />"; }
    67. //####################################################################
    68. If((isset($plet)) && ($stat['plet'] == '') || ($stat['plet'] == '0')){
    69. mysql_query("UPDATE `users` SET `plet` = '".$plet."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    70. } else {echo"plet не менялся <br />"; }
    71. //####################################################################
    72. If((isset($pol)) && ($stat['pol'] == '')){
    73. mysql_query("UPDATE `users` SET `pol` = '".$pol."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    74. } else {echo"pol не менялся <br />"; }
    75. //####################################################################
    76. If((isset($hrzab)) && ($stat['hrzab'] == '')){
    77. mysql_query("UPDATE `users` SET `hrzab` = '".$hrzab."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    78. } else {echo"hrzab не менялся <br />"; }
    79. //####################################################################
    80. If((isset($trzal)) && ($stat['trzal'] != $trzal)){
    81. mysql_query("UPDATE `users` SET `trzal` = '".$trzal."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    82. } else {echo"trzal не менялся <br />"; }
    83. //####################################################################
    84. If((isset($vpred)) && ($stat['vpred'] != $vpred)){
    85. mysql_query("UPDATE `users` SET `vpred` = '".$vpred."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    86. } else {echo"vpred не менялся <br />"; }
    87. //####################################################################
    88. If((isset($more)) && ($stat['more'] != $more)){
    89. mysql_query("UPDATE `users` SET `more` = '".$more."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    90. } else {echo"more не менялся <br />"; }
    91. //####################################################################
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    циклом в подготовке и одним запросом в обновлении
     
  3. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    А можно пример, пожалуйста?=)
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    Не можно. В разделе новичков мы даём советы. Ты самостоятельно изучаешь мануал, пробуешь реализовать алгоритм. Если возникают вопросы - публикуешь тут наработки. Мы их комментируем и предлагаем исправления.
    Готовый код можно купить в разделе "фриланс" или подождать в разделе "за меня". Пробуешь сам или переместить тему?
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    Смотря на твой код, споминаю себя в 2012 году.

    Не лишнее
    PHP:
    1. function DBquote( $ARR )
    2. {
    3.     return strip_data( mysql_escape_string ( htmlspecialchars ( trim ( $ARR ) ) ) );
    4. }
    5. echo array_map ( 'DBquote', $_POST );
     
    eXstyle нравится это.
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    @MAN_IFE_ST не надо так делать. Ну если только ты однозначно понимаешь, что делаешь. Я не про мапинг а про стек функций. Вернее про выбранные функции.
    И да, что за strip_data?
     
  7. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    --- Добавлено ---
    Пытаюсь освоить=) Написал как знал, но понимаю, что можно как то проще. Но чет пока не догоняю =)
    --- Добавлено ---
    PHP:
    1. function strip_data($text)
    2. {
    3.     $quotes = array ("\x27", "\x22", "\x60", "\t", "\n", "\r", "*", "%", "<", ">", "?", "!" );
    4.     $goodquotes = array ("-", "+", "#" );
    5.     $repquotes = array ("\-", "\+", "\#" );
    6.     $text = trim( strip_tags( $text ) );
    7.     $text = str_replace( $quotes, '', $text );
    8.     $text = str_replace( $goodquotes, $repquotes, $text );
    9.            
    10.     return $text;
    11. }
    --- Добавлено ---
    PHP:
    1. foreach($_POST as $k=>$v){
    2. $_POST[$k] = strip_data(mysql_escape_string(htmlspecialchars($v)));
    3. }
    Я так понимаю цикл будет выглядеть вот так?
     
    #7 eXstyle, 18 авг 2016
    Последнее редактирование: 18 авг 2016
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    1. Перед записью данных в базу нужно применить только одну функцию - mysql_real_escape_string().
    2. В месте вывода на экран данных, полученных из базы, нужно применить функцию htmlspecialchars().
     
    Ganzal и eXstyle нравится это.
  9. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Вот за эту инфу тоже спасибо. Лишней тоже не будет=)
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    @eXstyle и что делает эта функция? Зачем она?
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
  12. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Перейти на MySQLi и prepare из mysqli.
    С подготовленными запросами (prepare) как советовали выше, не нужно будет фильтровать данные, за тебя это сделает prepare.
    Их лучше фильтровать уже при выводе из базы, например через htmlspecialchars().

    Код (Text):
    1. $imya = strip_data(mysql_escape_string(htmlspecialchars($_POST['name'])));
    2. $lastname = strip_data(mysql_escape_string(htmlspecialchars($_POST['lastname'])));
    3. $dater = strip_data(mysql_escape_string(htmlspecialchars($_POST['dater'])));
    Не стоит из $_POST брать данные по ключу и присваивать новым переменным.

    Проверка на заполнение полей (простой пример):
    PHP:
    1. <?php
    2.  
    3. // Имитация $_POST
    4. $post = [
    5.     'name' => 'Vasea',
    6.     'password' =>'1213456',
    7. ];
    8.  
    9. $required_fields = [
    10.     'name' => 'Имя',
    11.     'email' => 'Электро почта',
    12.     'password' =>'Пароль',
    13. ];
    14.  
    15. $errors = array_diff_key($required_fields, $post);
    16.  
    17. if (is_array($errors) && count($errors)>0) {
    18.     foreach ($errors as $key => $value) {
    19.         echo "Заполните поле: ".$value;
    20.     }
    21. }
    Код (Text):
    1. mysql_query("UPDATE `users` SET `more` = '".$more."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error());
    В set можно указать сразу несколько полей которые нужно обновить. В цикле можно составить запрос.
     
    eXstyle нравится это.
  14. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Подскажите, что не так:
    PHP:
    1.  $post = '';
    2. foreach($_POST as $k => $v) {
    3. if($k != ''){
    4. $post .= "`".$k."`='".$v."'";
    5. }
    6. }
    7. echo $post;
    8. mysql_query("UPDATE `users` SET ".implode(',',$post)." WHERE `id` = '".htmlspecialchars($stat['id'])."'");
    вот это выводит
    PHP:
    1. echo $post
    `name`='Чел'
    `lastname`='Просто'
    `dater`='2016-08-11'

    но в базу не залетает.
    Warning: implode(): Invalid arguments passed in
     
  15. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.599
    Симпатии:
    206
    1. htmlspecialchars не для запроса к бд, а наоборот, для вывода информации. Для запроса использовать real_escape_string.
    2. И ещё подсказка: почитай, для чего нужен implode()
    3. как почитаешь, подумай, что нужно изменить в мегаконструкции $post.="`".$k."`='".$v."'";
     
    eXstyle нравится это.
  16. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Получается что там $post был строка, а нужен массив. Если я правильно понял то что то на подобии этого?
    PHP:
    1. $post = array();
    2. foreach($_POST as $k => $v) {
    3. $post[] = "`".$k."`='".$v."'";
    4. }
    5. echo implode(",",$post) ;
    6. mysql_query("UPDATE `users` SET ".implode(",",$post)." WHERE `id` = '".real_escape_string($stat['id'])."'");
     
  17. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.599
    Симпатии:
    206
    eXstyle нравится это.
  18. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Надо сразу наверное хотя бы mysql освоить хорошо=)

    PHP:
    1. $post = array();
    2. foreach($_POST as $k => $v) {
    3. $post[] = "`".mysql_real_escape_string($k)."`='".mysql_real_escape_string($v)."'";
    4. }
    5. echo implode(",",$post) ;
    6. mysql_query("UPDATE `users` SET ".implode(",",$post)." WHERE `id` = '".htmlspecialchars($stat['id'])."'");
    но в базу все-равно не залетает.
    --- Добавлено ---
    Все=) Разобрался=)
     
  19. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.599
    Симпатии:
    206
    не надо. Совсем, забудь. Его больше нет.

    что ты натворил, нормально же общались :D

    я предыдущее сообщение написал к тому, что вместо mysql_real_escape_string я тебе сказал real_escape_string. А ты его послушно вставил, не проверив, существует ли вообще такая функция)

    А в базу не добавляет потому, что ты снова зачем-то влепил htmlspecialchars. Почитай, что именно делает эта функция. И представь, какой получается запрос и что он ищет на самом деле, вместо того, что ты хочешь
    --- Добавлено ---
    кстати, раз ты mysql учишь, начни смотреть сразу mysqli в процедурном стиле. Отличия просто минимальны, но библиотека поддерживается. Перейти несложно
     
    eXstyle нравится это.
  20. eXstyle

    eXstyle Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    в input name был imya, а надо было imya_user =)

    Это машинально скопировал. Везде убрал. Просто на одном сайте одно, на втором - второе.

    Спасибо тебе большое=)
     
  21. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    PDO лучше начни. Будущее уже не за mysql *i
     
  22. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.599
    Симпатии:
    206
    @MAN_IFE_ST, ну вот раз сказал, теперь аргументируй свою точку зрения. Не пустословь. С чего бы это mysqli должно умереть то? И чем же PDO настолько суров?
     
    eXstyle и denis01 нравится это.