[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Первый свой класс. Прошу подсказки и совета
m4a1fox
Доброе утро или день всем экспертам. Если есть время или желание.... Собственно выкладываю банальный свой код, просто для того, что бы услышать ваше мнение, по поводу, на правильном ли я пути? Собственно сам код -

class showLogin extends connect_Db {
/**
* Check for empty fields in the form
*/

function empty_check($post) {
foreach ($post as $key=>$value) {
if(empty($value)) {
$error = $key;
}
}

return $error;
}


/**
* Clean the data
*/

private function clean_text($str) {
if(get_magic_quotes_gpc() == 1) {
$srt = str_replace('\"', """, $str);
$srt = str_replace("\'", "'", $str);
$srt = str_replace("<", "&lt", $str);
$srt = str_replace(">", "&gt", $str);
} else {

$str = htmlspecialchars($str, ENT_QUOTES, "UTF-8", false);
}
return
$str;
}

/**
* method for insert data to db
*/
function str_data(
$post) {
foreach(
$post as $key=>$value) {
$aux_data[$key] = $this->clean_text($value);
}

$this->insert_user($aux_data);
}

/**
* method string for insert
*/
function insert_user(
$post) {
$sql = "INSERT INTO `login` SET `name` = '".$post['name']."',
`pass` = '".$post['pass']."',
`encode` = '".$post['email']."'
";
//echo
$sql;
$this->sql($sql);
return true;
}

/**
* select users from table #1
*/
private function return_user() {

$sql = "SELECT * FROM `login` ORDER BY `id` DESC";
$res = $this->sql($sql);
return
$res;
}

/**
* select users from table #2
*/
function show_user() {

$res = $this->return_user();
if(mysql_num_rows(
$res) > 0) {
while(
$row = mysql_fetch_assoc($res)) {
$name[$row['id']] = $row;
}
} else {
echo 'String in db is empty';
}
return
$name;
}

/**
* delete user from db
*/
function delete_user(
$get) {
$sql = "DELETE FROM `login` WHERE `id` = '".$get."'";
$this->sql($sql);
return true;
}
}

$user = new showLogin; // select object

Спасибо всем кто подскажет или поможет!



Спустя 6 минут, 9 секунд (11.07.2011 - 10:40) linker написал(а):
тут
$srt = str_replace('\"', """, $str);
ошибка (надо '"' или "\"").

Спустя 1 минута, 24 секунды (11.07.2011 - 10:41) Mirexzpalich написал(а):
В function empty_check возвращай массив, а не последнее не заполненное поле...

Спустя 4 минуты, 3 секунды (11.07.2011 - 10:45) Mirexzpalich написал(а):

function delete_user($get) {
$sql = "DELETE FROM `login` WHERE `id` = '".$get."'";
$this->sql($sql);
return true;
}

И возвращать лучше:

function delete_user($get) {
$sql = "DELETE FROM `login` WHERE `id` = '".$get."'";
return $this->sql($sql);

}

Потому как запрос может будет ошибочным, а вернет true... Не красиво...

Спустя 8 минут, 37 секунд (11.07.2011 - 10:54) m4a1fox написал(а):
Mirexzpalich
Цитата

В function empty_check возвращай массив, а не последнее не заполненное поле...

Согласен. С этим была запарка. Выводит в массиве, но вот при вызове метода, есть одна особенность. При пустых всех полях, выводит последнее не пустое. В принципе не критично, но как ее переделать - не знаю... Может подскажите?

Спустя 2 часа, 6 минут, 44 секунды (11.07.2011 - 13:01) Mirexzpalich написал(а):

function empty_check($post) {
$error = array();
foreach ($post as $key=>$value) {
if(empty($value)) {
$error[$key] = $key;
// или
$error[] = $key;
// или
$error[$key] = 'Не заполнено!!';
}
}

return $error;
}

Спустя 14 минут, 2 секунды (11.07.2011 - 13:15) m4a1fox написал(а):
Mirexzpalich
Как то странно! Сейчас попробую!? Спасибо!

Спустя 13 минут, 12 секунд (11.07.2011 - 13:28) Mirexzpalich написал(а):
m4a1fox
Чего странного?

Спустя 11 минут, 39 секунд (11.07.2011 - 13:40) m4a1fox написал(а):
Mirexzpalich
Я вспомнил. Так жн пытался, да только выводим массив. Его придется пропускать через еще один метод, дабы разбить...

Спустя 4 минуты, 22 секунды (11.07.2011 - 13:44) m4a1fox написал(а):
И еще у меня вопрос... Как пременить этот метод empty_check в самом классе? Такое врозможно??? А то так получается я проверяю вот таким образом

if(isset($_POST['send'])) {
if($user->empty_check($_POST) == false) {
if(!isset($_SESSION['name'])) {
$user->str_data($_POST);
$_SESSION['name'] = $_POST['name'];
}else {
echo 'Ups, you have send the massenge yet! Please try again later.';
}
}
else {
echo '<br />Or make sure, that <font color=red><b>all field</b></font> are full.
<br />Please check the <b>'
.$true.'</b>';
}
}


Спустя 1 минута, 37 секунд (11.07.2011 - 13:46) Mirexzpalich написал(а):
m4a1fox
Класс может спокойно использовать свои собственные методы.... А так же и все объявленные функции...

Спустя 6 минут, 41 секунда (11.07.2011 - 13:52) m4a1fox написал(а):
Mirexzpalich
Верю! Да только надо понять как из применить, да еще и как-то задать им условие. То есть если false (то есть все поля полны), а если true, то условие insert_user не срабатывает...

Спустя 22 минуты, 25 секунд (11.07.2011 - 14:15) Mirexzpalich написал(а):

if(isset($_POST['send']))
if(empty($user->empty_check($_POST) )) //Если вернулся пустой массив, то ошибок нет
if(!isset($_SESSION['name']))
{
$user->str_data($_POST);
$_SESSION['name'] = $_POST['name'];
}
else
echo 'Ups, you have send the massenge yet! Please try again later.';
else
echo '<br />Or make sure, that <font color=red><b>all field</b></font> are full.<br />Please check the <b>'.$true.'</b>';

Спустя 1 час, 54 минуты, 9 секунд (11.07.2011 - 16:09) m4a1fox написал(а):
Mirexzpalich
Цитата

if(empty($user->empty_check($_POST) )) //Если вернулся пустой массив, то ошибок нет

А вот так не получается...

Спустя 7 часов, 3 минуты, 7 секунд (11.07.2011 - 23:12) Лена написал(а):
1. clean_text($str)
Прочитайте, для чего используется htmlspecialchars()
При вставке значений в базу она не используется.
Используется или mysql_real_escape_string(), или mysql_escape_string()
2. Массив $aux_data неопределен.

function str_data($post) {
$aux_data = array();
foreach($post as $key=>$value) {
$aux_data[$key] = $this->clean_text($value);
}
$this->insert_user($aux_data);
}

3. Не видно в классе метода sql($sql);

4. return_user()
Назначайте имена методам так, чтобы сразу было понятно, что они делают.
Возвращает список пользователей - или return_users(), или return_users_list()

5. show_user()
Ощущение, что этот метод вы откуда-то содрали.
Во всем классе вы используете обертку $this->sql($sql), здесь вы используете mysql_num_rows(),
mysql_fetch_assoc(). Кроме MySQL, есть другие типы баз данных, при переносе на другую базу метод show_user() работать не будет.

6. Везде в методах ошибка: если запрос не исполнился, вы должны либо остановить скрипт и выдать ошибку, либо записать ошибку в лог.
7.
if(empty($user->empty_check($_POST) )) //Если вернулся пустой массив, то ошибок нет
В таких случаях делают print_r($user->empty_check($_POST)); die; - и смотрят, что выводится на экран.

Спустя 10 часов, 11 минут, 40 секунд (12.07.2011 - 09:24) vasa_c написал(а):
Чем занимается showLogin и каким вообще макаром он является расширением подключения к базе?

Спустя 35 минут, 17 секунд (12.07.2011 - 09:59) m4a1fox написал(а):
Лена

1.
Цитата
Прочитайте, для чего используется htmlspecialchars()

я знаю зачем нужно htmlspecialchars. Но тут так же есть проблемка. Поймите меня правильно, один эксперт говорит - используй свой метод, вы говорите - использовать встроенную функцию... Хотя понимаю, что стандарт лучше. Спасибо за совет. Буду иметь ввиду!

2.
Цитата
Массив $aux_data неопределен.

Исправил. Спасибо что заметили.

3.
Цитата
Не видно в классе метода sql($sql);

Метод в другом классе. Три раза проверил.

4.
Цитата
Назначайте имена методам так, чтобы сразу было понятно, что они делают.

Вы считаете.... Так и сделаю. Спасибо!

5.
Цитата
Ощущение, что этот метод вы откуда-то содрали.

Кусочек - содрал, что-то сам дописал.

6.
Цитата
если запрос не исполнился, вы должны либо остановить скрипт и выдать ошибку, либо записать ошибку в лог.

А вот про это можно поподробнее... Как это реализовать пока что мозгов не хватает!?

7.
Цитата
В таких случаях делают print_r($user->empty_check($_POST)); die; - и смотрят, что выводится на экран.

Про print_r я в курсе. Просто визуально не очень красиво... А так в принципе получалось все вывести в массиве и прочитать его при этом.

Спасибо за разбор класса. Теперь буду знать.

Спустя 1 минута, 31 секунда (12.07.2011 - 10:01) m4a1fox написал(а):
vasa_c
Расширение подключения к базе? Объясните что вы имеете ввиду?

Спустя 1 час, 28 минут, 20 секунд (12.07.2011 - 11:29) ИНСИ написал(а):
Лена красава smile.gif

Спустя 24 минуты, 3 секунды (12.07.2011 - 11:53) m4a1fox написал(а):
INSIDIOUS
Ага! Разорвала как тузик грелу smile.gif

Спустя 16 минут, 4 секунды (12.07.2011 - 12:09) ИНСИ написал(а):
m4a1fox ага, все главное тебя поддерживают - она опа, и показала тебе smile.gif

Спустя 29 минут, 14 секунд (12.07.2011 - 12:38) m4a1fox написал(а):
INSIDIOUS
Ну так по делу.... уже исправил...smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.