PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (17): « 1 [2] 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 247
Muxa Отправлено: 05 Января, 2013 - 11:17:18 • Тема: Вывод данных через printf • Форум: Работа с СУБД

Ответов: 20
Просмотров: 5643

Цитата:
Вот как можно записать ваш скрипт в более компактном и правельном варианте.

Это не мой скрипт, я лишь подправил и убрал предупреждения.

И почему этот вариант правильнее будет? Красивее - да, не спорю. Получается что здесь
массив $data - результат array_keys() или чего-то подобного (или foreach). Да, хорошо, рутинная работа убралась, писать в два раза меньше кода. Тогда уж проще сразу так, зачем циклы

PHP:
скопировать код в буфер обмена
  1. function _esc($val) { return trim(mysql_real_escape_string($val)); }
  2.  
  3. $result = mysql_query('INSERT INTO data ('.join(',', array_keys($_POST)).') VALUES ('.join(',', array_map('_esc', $_POST).')';
  4.  
  5. echo $result ? 'Ваши данные успешно добавлены' : 'Ваши данные не добавлены';

Еще красивее. Только три минуса (в обоих примерах кода):
1. Мы уже не можем назначить какое-либо имя для кнопки, и не должно быть никаких левых значений
2. Независимо от того, какой должен быть тип поля - все поля проэкранируются (хотя если какое-то поле должно быть числом - гораздо проще привести его к целому типу и все, не так ли?)
3. Мы полностью полагаемся на "доброту и щедрость" пользователя, забывая о том, что никто ему не мешает взять да изменить к примеру имя поля.
Догадаться что используется такой синтаксис - труда не составит, альтернативный синтаксис с использованием SET используется редко. В таком случае, я могу попробовать в первом же попавшемся поле прописать например author) VALUES (NULL) -- f и спокойно создастся пустая запись, причем никаких ошибок не возникнет.
Но нам же это не надо, верно? Значит нужно и их обработать от инъекций. Но кроме обычных символов также еще необходимо убрать из названий полей скобки и запятые - итого получается код уже должен выглядеть таким образом

PHP:
скопировать код в буфер обмена
  1. function _escV($val) { return trim(mysql_real_escape_string($val)); }
  2. function _escF($fields) { return trim(mysql_real_escape_string(str_replace(array(')','(',','),'',$fields))); }
  3.  
  4. $result = mysql_query('INSERT INTO data ('.join(',', array_map('_escF', array_keys($_POST))).') VALUES ('.join(',', array_map('_escV', $_POST).')';
  5.  
  6. echo $result ? 'Ваши данные успешно добавлены' : 'Ваши данные не добавлены';

От третьего пункта избавились, от первого можно избавиться если поставить условие на проверку ключа/значения в обоих функциях, ок. Второй пункт остался. Теперь, если посмотреть с другой стороны - а так ли уж нужна эта красота?
При 10 полях в таблице - 10 лишних вызовов trim, mysql_real_escape_string, str_replace + array_keys. Имхо, это лишнее, и лучше перечислить поля вручную. Но тут появляется еще одна проблема. Если юзер просто-напросто в консоли удалит какое-то поле - то у нас будет ошибка column count doesn't match values count.. или как она там. Следовательно, нам еще необходимо проверить число записей, чтобы оно соответствовало числу полей.
Итого, добавляется еще лишний if-else. И по прежнему остается невозможность приведения к целому типу при надобности (можно проверять is_numeric - но что толку если ввести заведомо не число?).
Имхо, в данном случае, красота кода не стоит того, чтобы ее использовать только потому, что она красивее..

P.S. поправьте если я в чем то ошибся, буду рад признать неправоту..


prepared statements рулят Улыбка
Muxa Отправлено: 04 Января, 2013 - 23:24:19 • Тема: Помогите со скриптом?? • Форум: Вопросы новичков

Ответов: 4
Просмотров: 146
http://forum.php.su/topic.php?fo...3&topic=2207
Muxa Отправлено: 04 Января, 2013 - 21:52:03 • Тема: Вывод данных через printf • Форум: Работа с СУБД

Ответов: 20
Просмотров: 5643
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. mysql_connect ('localhost', 'user', '12345') or die ("Нет соединения" .mysql_error());
  3.  
  4. function _esc($val) { return trim(mysql_real_escape_string($val)); }
  5.  
  6. $author = isset($_POST['author']) ? _esc($_POST['author']) : '';
  7. $name = isset($_POST['name']) ? _esc($_POST['name']) : '';
  8. $meta_d = isset($_POST['meta_d']) ? _esc($_POST['meta_d']) : '';
  9. $meta_k = isset($_POST['meta_k']) ? _esc($_POST['meta_k']) : '';
  10. $date = isset($_POST['date']) ? _esc($_POST['date']) : '';
  11. $link = isset($_POST['link']) ? _esc($_POST['link']) : '';
  12. $mini_img = isset($_POST['mini_img']) ? _esc($_POST['mini_img']) : '';
  13. $img = isset($_POST['img']) ? _esc($_POST['img']) : '';
  14. $description = isset($_POST['description']) ? _esc($_POST['description']) : '';
  15. $categories = isset($_POST['categories']) ? _esc($_POST['categories']) : '';
  16.  
  17. $result = mysql_query("INSERT INTO data (author, name, meta_d, meta_k, date, link, mini_img, img, description, categories) VALUES
  18. ('$author', '$name', '$meta_d', '$meta_k', '$date', '$link', '$mini_img', '$img', '$description', '$categories')");
  19. //Если запрос пройдет успешно то в переменную result вернется true
  20. if($result)
  21. {echo "Ваши данные успешно добавлены";}
  22. else{echo "Ваши данные не добавлены";}
  23. ?>
Muxa Отправлено: 04 Января, 2013 - 21:32:16 • Тема: Подключение файлов по заданному url • Форум: Вопросы новичков

Ответов: 12
Просмотров: 553
я не понимаю, в чем проблема. Вы что-то мутите для меня непонятное.. Естественно, если этого файла нет, то среда вам об этом радостно сообщит.. что не так? Однако
(Добавление)
раз вы хотите на каждый урл свой файл - то зачем тогда мучаться, сделайте так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteEngine On
  2.  
  3. RewriteCond %{REQUEST_FILENAME} !-d
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5.  
  6. RewriteRule . index.php


PHP:
скопировать код в буфер обмена
  1. $route = explode( '/', trim($_SERVER['REQUEST_URI'], '/') );
  2.  
  3. function err404() {
  4.   header('HTTP/1.1 404 Not Found');
  5.   exit('Error 404: Page Not Found');
  6. }
  7.  
  8. if(isset($route[1])) {
  9.   if(file_exists($route[1] . '.php'))
  10.     require $route[1] . '.php';
  11.   else
  12.     err404();
  13. }
  14. else {
  15. //главная страница..
  16. }

и просто сохраняйте страницы с тем же именем что и ссылки, только в конце добавляйте еще .php в конец файла..
Muxa Отправлено: 04 Января, 2013 - 20:31:53 • Тема: Подключение файлов по заданному url • Форум: Вопросы новичков

Ответов: 12
Просмотров: 553
пропишите в том файле запустите и посмотрите какой путь к нему, а потом уже подставляйте нужный в первый скрипт
Muxa Отправлено: 04 Января, 2013 - 18:06:19 • Тема: Отсутствует (не выводится) код капчи • Форум: Вопросы новичков

Ответов: 6
Просмотров: 224
а версия php какая? это будет работать только на PHP < 5.3
Вообще код уже старый там.. попробуйте вот так
Спойлер (Отобразить)
Muxa Отправлено: 04 Января, 2013 - 16:17:37 • Тема: Проблема с кодировкой • Форум: Вопросы новичков

Ответов: 6
Просмотров: 194
а сам файл со с кодом скрипта в какой кодировке?
Muxa Отправлено: 04 Января, 2013 - 13:41:44 • Тема: Выполнение скрипта через консоль PHP • Форум: Вопросы новичков

Ответов: 11
Просмотров: 667
modbuild.php - а он есть в этой папке (Z:\home\site\www\console), точно?
(Добавление)
Вы добавляли php.exe в переменную окружения?
там просто написано для nix, а не винды.. Попробуйте так
CODE (htmlphp):
скопировать код в буфер обмена
  1. cd Z:\home\site\www\console
  2. $ php modbuild.php
Muxa Отправлено: 03 Января, 2013 - 22:56:54 • Тема: Немогу переадресовать сайт помогите пожалуйстя • Форум: Вопросы новичков

Ответов: 6
Просмотров: 183
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.        file_put_contents('name.txt', $_POST['name']);
  4.  
  5.        file_put_contents('surname.txt', $_POST['surname']);
  6.  
  7.  
  8. ?>
  9.  
  10. <?PHP
  11. header("location:http://site.ru");
  12. ?>

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.        file_put_contents('name.txt', $_POST['name']);
  4.  
  5.        file_put_contents('surname.txt', $_POST['surname']);
  6.  
  7.  
  8. header("location:http://site.ru");
Muxa Отправлено: 03 Января, 2013 - 20:40:58 • Тема: Сессии в PHP. • Форум: Вопросы новичков

Ответов: 19
Просмотров: 749

Цитата:
Если не знаете, то и не путайте человека.
Не нужно это по умолчанию включать, пусть ноль стоит.

я лишь ориентировался поэтому:
Цитата:
session.use_cookies определяет, будет ли модуль использовать cookies для хранения идентификатора сессии на стороне клиента. По умолчанию 1 (включено).
Muxa Отправлено: 03 Января, 2013 - 20:18:17 • Тема: Репозиторий • Форум: Вопросы новичков

Ответов: 16
Просмотров: 627
это только первая строка, посмотрите внимательнее и исправляйте все остальные..
Muxa Отправлено: 03 Января, 2013 - 20:15:25 • Тема: Репозиторий • Форум: Вопросы новичков

Ответов: 16
Просмотров: 627
Цитата:
Notice: Undefined index: error in /var/www/serj12331/data/www/dome n.ru/engine/init.php on line 84

Цитата:
Предупреждение: неизвестный индекс error в файле ....init.php на 84 строке

З.Ы. и зачем столько цитировать..? Растерялся
(Добавление)
смотрим на эту строчку, видим там код приведенный мною выше, заменяем на код, приведенный опять же выше. И так далее, только заменяем на нужное
Muxa Отправлено: 03 Января, 2013 - 20:10:24 • Тема: Репозиторий • Форум: Вопросы новичков

Ответов: 16
Просмотров: 627
Цитата:
Да вот сделал, выдало:

ну так и исправляйте Улыбка
Если с английским плохо - в переводчик..
PHP:
скопировать код в буфер обмена
  1. if($tpl->result['error'] != "") {

Muxa Отправлено: 03 Января, 2013 - 20:06:23 • Тема: Сессии в PHP. • Форум: Вопросы новичков

Ответов: 19
Просмотров: 749
ее наоборот надо 1 сделать. я не знаю в чем может быть дело..
Muxa Отправлено: 03 Января, 2013 - 18:12:07 • Тема: Закрытие соединения с БД • Форум: Вопросы новичков

Ответов: 8
Просмотров: 291
из соображения безопасности - если правильно, то без разницы

Страниц (17): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB