Автор Тема: Прблем с trim, addslashes в php&mysql  (Прочетена 1233 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

kaloqN

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 7
Прблем с trim, addslashes в php&mysql
« -: 19 Май 2016, 17:44:33 »
Здравейте приятели!
Създавам си собствено проектче (уча се на PHP самичък от уроците на gatakka).
Проблема е, че работя по системата, а чак сега забелязах как addslashes и trim ми се дънят, като записвам данни в
MySql...

Мога да се регистрирам като примерно "а а а а а", въпреки, че съм сложил trim, на самата $_POST заявка.
Когато го сложа директно в SQL заявката също не работи, нито trim, нито addslashes, а това е доста гадна и неприятна дупка. Ето го и моят код за регистрация... Имам и още един въпрос: От къде да си сваля сървър с добри настройки, който да работи добре и да е лесен за поддръжка? за PHP главно. Сега съм с WAMP, че XAMPP се прецака нещо.

Код: PHP
  1. if ($_POST['formSubmit'] == 1) {
  2.     $user = trim(addslashes(htmlspecialchars(($_POST['user']))));
  3.     $pass = trim($_POST['pass']);
  4.     $pass2 = trim($_POST['pass2']);
  5.     $mail = trim(htmlspecialchars(addslashes($_POST['mail'])));
  6.  
  7.     if (strlen($user) < 3 || strlen($user) > 17) {
  8.         $error['user'] = 'Min 3 symbols, max 17 symbols';
  9.     }
  10.  
  11.     if (strlen($pass) < 6 || strlen($pass) > 26) {
  12.         $error['pass'] = 'Min 6 symbols, max 26 symbols';
  13.     }
  14.  
  15.     if ($pass != $pass2) {
  16.         $error['pass2'] = 'Passwords is not equal';
  17.     }
  18.  
  19.     if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
  20.         $error['mail'] = 'This is not valid email adress';
  21.     }
  22.  
  23.     if (count($error) < 1) {
  24.         $result = query("SELECT * FROM users WHERE user = '$user'");
  25.         $num = mysql_num_rows($result);
  26.  
  27.         $result1 = query("SELECT * FROM users WHERE mail = '$mail'");
  28.         $num1 = mysql_num_rows($result1);
  29.         if ($num > 0) {
  30.             $user_busy = "Username is busy!";
  31.         }
  32.  
  33.         if ($num1 > 0) {
  34.             $mail_busy = "The mail is busy";
  35.         }
  36.  
  37.         if ($num < 1 && $num1 < 1) {
  38.             $s1 = "INSERT INTO users";
  39.             $s2 = "(user, pass, mail, time)";
  40.             $s3 = "VALUES('$user', '" . md5($pass) . "', '$mail', '" . time() . "')";
  41.             $result2 = query($s1 . $s2 . $s3);
  42.  
  43.             if ($result2) {
  44.                 $succes = "Sucesfully registration. You can log in now!";
  45.             } else {
  46.                 $error2 = "Error! Please contact with administrator!";
  47.             }
  48.         }
  49.     }
  50. }


« Последна редакция: 19 Май 2016, 21:37:23 от Avalanche »

worldservers

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 6
  • -Получени: 3
  • Публикации: 95
Re: Прблем с trim, addslashes в php&mysql
« Отговор #1 -: 19 Май 2016, 19:16:01 »
1. addslashes не ти трябва, просто го забрави. htmlspecialchars те пази от всичко.
2. Слагай htmlspecialchars през всичко което идва от post или get и го слагай винаги на 1-во място .
3. Използвай strlen по този начин: mb_strlen($променлива, 'UTF-8') > влиадтор. Ще си спестиш бъдещи проблеми.
Сложи първо да бъде htmlspecialchars(trim()).
Иначе за trim той маха space-овете само във началото и края на низ стойност.
Ако искаш по подробно да валидираш виж това:
http://nau4i.me/forum/index.php/topic,14112.0/topicseen.html
Хората, който разрушават света, имат вратовръзки, не татуировки.

kaloqN

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 7
Re: Прблем с trim, addslashes в php&mysql
« Отговор #2 -: 19 Май 2016, 19:43:21 »
Благодаря приятелю!

Тези регулярни изрази са ми труднички, но са нужни и ще ги науча!
Всъщност trim би трябвало да маха всички празни места в низа... :)
ltrim - би трябвало да маха от ляво
rtrim - би трябвало да маха от дясно
trim - би трябвало да маха и от всякъде

Поне логиката му е такава, като го гледах в на gatakka уроците.

Редактирам:
Да не би да ги маха от ляво и дясно, и да не закача интервалите между буквите в низа :)
« Последна редакция: 19 Май 2016, 19:45:49 от kaloqN »

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 269
  • Публикации: 2595
  • meow
Re: Прблем с trim, addslashes в php&mysql
« Отговор #3 -: 19 Май 2016, 21:46:46 »
Това за addslashes не го подценявайте, най-добрата оправя срещу SQL инжекции са prepared statements (с PDO или с MySQLi).

Никоя от trim функциите няма да ти махне празните пространства някъде из самата променлива, не ти трябват сериозни познания с регулярни изрази за да намериш решение, ето ти един прост пример с preg_replace:
Код: PHP
  1. preg_replace('~\s~', '', 'a a a')
Код: Apache configuration
  1. ~ $ php -a
  2. Interactive shell
  3.  
  4. php > var_dump(preg_replace('~\s~', '', 'a a a'));
  5. string(3) "aaa"


И последно, не ти трябва да сваляш никакви настройки за Apache, той си е конфигуриран достатъчно добре за всекидневна употреба по подразбиране - пипай само тогава, когато наистина имаш нужда.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Re: Прблем с trim, addslashes в php&mysql
« Отговор #4 -: 19 Май 2016, 23:36:09 »
Здравей!

Да, функцията trim() премахва само отпред и отзад празните интервали. Ако има някъде по средата няма да ги премахне. Ще ти покажа още един начин, по който можеш да ги премахнеш:
str_replace();
Код: PHP
  1. $result = str_replace(' ', '', $string);

Ще ти дам и още няколко съвета:
1. Гледам използваш count() да провериш дали си събрал грешки от проверките, но ти препоръчвам да дефинираш променливата $errors най-горе като празен масив, след което където правиш проверката count($error) < 1, да го замениш с !empty($errors), това работи по-бързо и е по-лесно за четене след това, не че е грешно и да го оставиш така, резултата ще е същият. Просто count() използвай когато ти трябва бройката на масива.

2. Ако в базата използваш timestamp, премини на datetime. Дава ти по-голяма гъвкавост когато ще работиш с дати.

3. Не използвай SELECT * FROM; Само в краен случай. Винаги си изписвай тези колони, които ти трябват. Спестяваш проблеми и работи по-бързо.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Прблем с trim, addslashes в php&mysql
« Отговор #5 -: 20 Май 2016, 09:51:56 »
query ? Такава функция не съм виждал.

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 120
  • -Получени: 73
  • Публикации: 995
  • Кибик
Re: Прблем с trim, addslashes в php&mysql
« Отговор #6 -: 20 Май 2016, 12:36:00 »
Един съвет от мен, преди да валидираш входящи данни ги нормализирай.
Например ако очакваш цяло число прекарай го през int, ако очакваш стринг, през string ... и т.н.
Код: PHP
  1. //... цяло число
  2. (int) $_POST['var'];
  3. //... стринг
  4. (string) $_POST['var'];
  5. // ... и т.н.
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

kaloqN

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 7
Re: Прблем с trim, addslashes в php&mysql
« Отговор #7 -: 20 Май 2016, 14:42:00 »
Hankrum, относно валидацията я правя за цяло число, примерно при търсене на ID го правя в get заявката задължително цяло число :) Вече ще го правя и за стринг.

HD, функцията попринцип за работа в php за заявки към mysql, която се използва е mysql_query(), както знаеш...
Аз просто съм направил една include папка, в която имам файл с функции и вътре съм си написал тази функция за да не пиша винаги едно и също...
Ето и тази за query()...
Код: PHP
  1. function query($query) {
  2.     $result = mysql_query($query);
  3.  
  4.     if ($result) {
  5.         return $result;
  6.     } else {
  7.         echo "Error in SQL Query: <b>" . $query . '</b><br>';
  8.         echo "MySql Error: <b>" . mysql_error().'</b>';
  9.     }
  10. }
  11.  

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Прблем с trim, addslashes в php&mysql
« Отговор #8 -: 20 Май 2016, 15:28:39 »
Аз това го знам. Не го приемай като заяждане,а  като въпрос. Що се отнася до функцията ти. Слагаш функция във функция. Какъв е смисъла? Обработваш ли нещо по този начин както си го написал? Връща ли ти някакъв резултат?  Допълнителна абстракция само. Какво му е на този код?
Код: PHP
  1.  
  2. $query = mysql_query('някаква заявка към базата') or die mysql_error
  3.  

Не знам дали колегите са споменали, но не е хубаво да ползваш mysql_query, защото е deprecated.

kaloqN

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 7
Re: Прблем с trim, addslashes в php&mysql
« Отговор #9 -: 20 Май 2016, 21:49:09 »
Приятелю, не съм приел нищо като заяждане  ;D :)

Аз не съм някакъв експерт, че да знам всичко, а и на скоро взех да придобивам лека по- лека математическо-логическо-програмистко мислене :D ...
В темата можеш да видиш какво са споделили колегите, колкото повече забележки и съвети,
толкова по- добре, а какво да използвам вместо mysql_query?

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Прблем с trim, addslashes в php&mysql
« Отговор #10 -: 20 Май 2016, 21:54:13 »
mysqli,  което е просто mysql improved в буквален смисъл. С OOP занимавал ли си се? Има много хубава серия от уроци тук. Честно казано не виждам смисъл 2016 да се занимаваш с процедурен код, но това е за друга тема.

kaloqN

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 7
Re: Прблем с trim, addslashes в php&mysql
« Отговор #11 -: 20 Май 2016, 22:52:53 »
mysqli,  което е просто mysql improved в буквален смисъл. С OOP занимавал ли си се? Има много хубава серия от уроци тук. Честно казано не виждам смисъл 2016 да се занимаваш с процедурен код, но това е за друга тема.

Ами сори за офтопика, ама като не съм добър дори по процедурно, има ли смисъл да започвам ООП-то :D

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Re: Прблем с trim, addslashes в php&mysql
« Отговор #12 -: 20 Май 2016, 22:56:49 »
mysqli,  което е просто mysql improved в буквален смисъл. С OOP занимавал ли си се? Има много хубава серия от уроци тук. Честно казано не виждам смисъл 2016 да се занимаваш с процедурен код, но това е за друга тема.

Ами сори за офтопика, ама като не съм добър дори по процедурно, има ли смисъл да започвам ООП-то :D

Продължавай си с процедурния код, то ООП-то само ще си дойде после при теб. ;)

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Прблем с trim, addslashes в php&mysql
« Отговор #13 -: 21 Май 2016, 09:00:50 »
Или въобще може да не дойде.. ;D

kaloqN

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 7
Re: Прблем с trim, addslashes в php&mysql
« Отговор #14 -: 21 Май 2016, 17:43:46 »
HD, много обичаш да спамиш май.  ;D

canon4o, то от сега ми се иска да идва май, като гледам колко халтав става кода и разхвърлян уж в "темплейтна система", пак става мазало