Здравствуйте. Подскажите пожалуйста, как можно оптимизировать сие чудо Код (Text): $imya = strip_data(mysql_escape_string(htmlspecialchars($_POST['name']))); $lastname = strip_data(mysql_escape_string(htmlspecialchars($_POST['lastname']))); $dater = strip_data(mysql_escape_string(htmlspecialchars($_POST['dater']))); $tel = strip_data(mysql_escape_string(htmlspecialchars($_POST['tel']))); $city = strip_data(mysql_escape_string(htmlspecialchars($_POST['city']))); $sport = strip_data(mysql_escape_string(htmlspecialchars($_POST['sport']))); $pogoda = strip_data(mysql_escape_string(htmlspecialchars($_POST['pogoda']))); $varik = strip_data(mysql_escape_string(htmlspecialchars($_POST['varik']))); $zkss = strip_data(mysql_escape_string(htmlspecialchars($_POST['zkss']))); $grkrov = strip_data(mysql_escape_string(htmlspecialchars($_POST['grkrov']))); $ves = strip_data(mysql_escape_string(htmlspecialchars($_POST['ves']))); $rost = strip_data(mysql_escape_string(htmlspecialchars($_POST['rost']))); $plet = strip_data(mysql_escape_string(htmlspecialchars($_POST['plet']))); $pol = strip_data(mysql_escape_string(htmlspecialchars($_POST['pol']))); $hrzab = strip_data(mysql_escape_string(htmlspecialchars($_POST['hrzab']))); $trzal = strip_data(mysql_escape_string(htmlspecialchars($_POST['trzal']))); $vpred = strip_data(mysql_escape_string(htmlspecialchars($_POST['vpred']))); $more = strip_data(mysql_escape_string(htmlspecialchars($_POST['more']))); //#################################################################### If((isset($imya)) && ($stat['name_user'] == '')){ mysql_query("UPDATE `users` SET `name_user` = '".$imya."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Имя не менялось <br />"; } //#################################################################### If((isset($lastname)) && ($stat['lastname'] == '')){ mysql_query("UPDATE `users` SET `lastname` = '".$lastname."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Фамилия не менялось <br />"; } //#################################################################### If((isset($dater)) && ($stat['dater'] == '0000-00-00')){ mysql_query("UPDATE `users` SET `dater` = '".$dater."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Дата не менялось <br />"; } //#################################################################### If((isset($tel)) && ($stat['tel'] != $tel)){ mysql_query("UPDATE `users` SET `tel` = '".$tel."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Телефон не менялся <br />"; } //#################################################################### If((isset($city)) && ($stat['city'] != $city)){ mysql_query("UPDATE `users` SET `city` = '".$city."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Город не менялся <br />"; } //#################################################################### If((isset($sport)) && ($stat['sport'] != $sport)){ mysql_query("UPDATE `users` SET `sport` = '".$sport."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Спорт не менялся <br />"; } //#################################################################### If((isset($pogoda)) && ($stat['pogoda'] != $pogoda)){ mysql_query("UPDATE `users` SET `pogoda` = '".$pogoda."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Метеозависимость не менялась <br />"; } //#################################################################### If((isset($varik)) && ($stat['varik'] != $varik)){ mysql_query("UPDATE `users` SET `varik` = '".$varik."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"Варикоз не менялся <br />"; } //#################################################################### If((isset($zkss)) && ($stat['zkss'] != $zkss)){ mysql_query("UPDATE `users` SET `zkss` = '".$zkss."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"zkss не менялся <br />"; } //#################################################################### If((isset($grkrov)) && ($stat['grkrov'] == '')){ mysql_query("UPDATE `users` SET `grkrov` = '".$grkrov."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"grkrov не менялся <br />"; } //#################################################################### If((isset($ves)) && ($stat['ves'] == '') || ($stat['ves'] == '0')){ mysql_query("UPDATE `users` SET `ves` = '".$ves."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"ves не менялся <br />"; } //#################################################################### If((isset($rost)) && ($stat['rost'] == '') || ($stat['rost'] == '0')){ mysql_query("UPDATE `users` SET `rost` = '".$rost."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"rost не менялся <br />"; } //#################################################################### If((isset($plet)) && ($stat['plet'] == '') || ($stat['plet'] == '0')){ mysql_query("UPDATE `users` SET `plet` = '".$plet."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"plet не менялся <br />"; } //#################################################################### If((isset($pol)) && ($stat['pol'] == '')){ mysql_query("UPDATE `users` SET `pol` = '".$pol."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"pol не менялся <br />"; } //#################################################################### If((isset($hrzab)) && ($stat['hrzab'] == '')){ mysql_query("UPDATE `users` SET `hrzab` = '".$hrzab."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"hrzab не менялся <br />"; } //#################################################################### If((isset($trzal)) && ($stat['trzal'] != $trzal)){ mysql_query("UPDATE `users` SET `trzal` = '".$trzal."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"trzal не менялся <br />"; } //#################################################################### If((isset($vpred)) && ($stat['vpred'] != $vpred)){ mysql_query("UPDATE `users` SET `vpred` = '".$vpred."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"vpred не менялся <br />"; } //#################################################################### If((isset($more)) && ($stat['more'] != $more)){ mysql_query("UPDATE `users` SET `more` = '".$more."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); } else {echo"more не менялся <br />"; } //####################################################################
Не можно. В разделе новичков мы даём советы. Ты самостоятельно изучаешь мануал, пробуешь реализовать алгоритм. Если возникают вопросы - публикуешь тут наработки. Мы их комментируем и предлагаем исправления. Готовый код можно купить в разделе "фриланс" или подождать в разделе "за меня". Пробуешь сам или переместить тему?
Смотря на твой код, споминаю себя в 2012 году. Не лишнее PHP: function DBquote( $ARR ) { return strip_data( mysql_escape_string ( htmlspecialchars ( trim ( $ARR ) ) ) ); } echo array_map ( 'DBquote', $_POST );
@MAN_IFE_ST не надо так делать. Ну если только ты однозначно понимаешь, что делаешь. Я не про мапинг а про стек функций. Вернее про выбранные функции. И да, что за strip_data?
--- Добавлено --- Пытаюсь освоить=) Написал как знал, но понимаю, что можно как то проще. Но чет пока не догоняю =) --- Добавлено --- PHP: function strip_data($text) { $quotes = array ("\x27", "\x22", "\x60", "\t", "\n", "\r", "*", "%", "<", ">", "?", "!" ); $goodquotes = array ("-", "+", "#" ); $repquotes = array ("\-", "\+", "\#" ); $text = trim( strip_tags( $text ) ); $text = str_replace( $quotes, '', $text ); $text = str_replace( $goodquotes, $repquotes, $text ); return $text; } --- Добавлено --- PHP: foreach($_POST as $k=>$v){ $_POST[$k] = strip_data(mysql_escape_string(htmlspecialchars($v))); } Я так понимаю цикл будет выглядеть вот так?
1. Перед записью данных в базу нужно применить только одну функцию - mysql_real_escape_string(). 2. В месте вывода на экран данных, полученных из базы, нужно применить функцию htmlspecialchars().
PHP: function strip_data($text) { $quotes = array ("\x27", "\x22", "\x60", "\t", "\n", "\r", "*", "%", "<", ">", "?", "!" ); $goodquotes = array ("-", "+", "#" ); $repquotes = array ("\-", "\+", "\#" ); $text = trim( strip_tags( $text ) ); $text = str_replace( $quotes, '', $text ); $text = str_replace( $goodquotes, $repquotes, $text ); return $text; } не оно ? https://php.ru/manual/function.htmlentities.html
Перейти на MySQLi и prepare из mysqli. С подготовленными запросами (prepare) как советовали выше, не нужно будет фильтровать данные, за тебя это сделает prepare. Их лучше фильтровать уже при выводе из базы, например через htmlspecialchars(). Код (Text): $imya = strip_data(mysql_escape_string(htmlspecialchars($_POST['name']))); $lastname = strip_data(mysql_escape_string(htmlspecialchars($_POST['lastname']))); $dater = strip_data(mysql_escape_string(htmlspecialchars($_POST['dater']))); Не стоит из $_POST брать данные по ключу и присваивать новым переменным. Проверка на заполнение полей (простой пример): PHP: <?php // Имитация $_POST $post = [ 'name' => 'Vasea', 'password' =>'1213456', ]; $required_fields = [ 'name' => 'Имя', 'email' => 'Электро почта', 'password' =>'Пароль', ]; $errors = array_diff_key($required_fields, $post); if (is_array($errors) && count($errors)>0) { foreach ($errors as $key => $value) { echo "Заполните поле: ".$value; } } Код (Text): mysql_query("UPDATE `users` SET `more` = '".$more."' WHERE `id` = '".mysql_real_escape_string($stat['id'])."'")or die(mysql_error()); В set можно указать сразу несколько полей которые нужно обновить. В цикле можно составить запрос.
Подскажите, что не так: PHP: $post = ''; foreach($_POST as $k => $v) { if($k != ''){ $post .= "`".$k."`='".$v."'"; } } echo $post; mysql_query("UPDATE `users` SET ".implode(',',$post)." WHERE `id` = '".htmlspecialchars($stat['id'])."'"); вот это выводит PHP: echo $post `name`='Чел' `lastname`='Просто' `dater`='2016-08-11' но в базу не залетает. Warning: implode(): Invalid arguments passed in
1. htmlspecialchars не для запроса к бд, а наоборот, для вывода информации. Для запроса использовать real_escape_string. 2. И ещё подсказка: почитай, для чего нужен implode() 3. как почитаешь, подумай, что нужно изменить в мегаконструкции $post.="`".$k."`='".$v."'";
Получается что там $post был строка, а нужен массив. Если я правильно понял то что то на подобии этого? PHP: $post = array(); foreach($_POST as $k => $v) { $post[] = "`".$k."`='".$v."'"; } echo implode(",",$post) ; mysql_query("UPDATE `users` SET ".implode(",",$post)." WHERE `id` = '".real_escape_string($stat['id'])."'");
Почти отлично. Только это, и я провтыкал, и ты не проверил: https://php.ru/manual/function.mysql-real-escape-string.html Да и надо бы совсем уже переходить на mysqli или PDO
Надо сразу наверное хотя бы mysql освоить хорошо=) PHP: $post = array(); foreach($_POST as $k => $v) { $post[] = "`".mysql_real_escape_string($k)."`='".mysql_real_escape_string($v)."'"; } echo implode(",",$post) ; mysql_query("UPDATE `users` SET ".implode(",",$post)." WHERE `id` = '".htmlspecialchars($stat['id'])."'"); но в базу все-равно не залетает. --- Добавлено --- Все=) Разобрался=)
не надо. Совсем, забудь. Его больше нет. что ты натворил, нормально же общались я предыдущее сообщение написал к тому, что вместо mysql_real_escape_string я тебе сказал real_escape_string. А ты его послушно вставил, не проверив, существует ли вообще такая функция) А в базу не добавляет потому, что ты снова зачем-то влепил htmlspecialchars. Почитай, что именно делает эта функция. И представь, какой получается запрос и что он ищет на самом деле, вместо того, что ты хочешь --- Добавлено --- кстати, раз ты mysql учишь, начни смотреть сразу mysqli в процедурном стиле. Отличия просто минимальны, но библиотека поддерживается. Перейти несложно
в input name был imya, а надо было imya_user =) Это машинально скопировал. Везде убрал. Просто на одном сайте одно, на втором - второе. Спасибо тебе большое=)
@MAN_IFE_ST, ну вот раз сказал, теперь аргументируй свою точку зрения. Не пустословь. С чего бы это mysqli должно умереть то? И чем же PDO настолько суров?