классы в php

Печать RSS
299

М
Автор
Пришелец
0
что не так в данном коде?
class db extends PDO{
	function open($modul,$sort='id',$where=0,$limit='')
	{
		$this->query("select * from $modul ORDER by `$sort` $limit");
	}
	function add($modul,$add,$where=0)
	{
		$this->exec("insert into `$modul` $add where $where");
	}
	function edit($modul,$edit,$where=0)
	{
		$this->exec("update `$modul` set $edit where $where");
	}
	function del($modul,$where=0)
	{
		$this->exec("delete from `$modul` where $where");
	}
}
  
$db = new db("mysql:host=$DB_HOST;dbname=$DB_BASE", $DB_USER, $DB_PASS);
$db->query('set charset utf8'); 
$db->query('SET names utf8'); 
$db->query('set character_set_client="utf8"'); 
$db->query('set character_set_connection="utf8"'); 
$db->query('set character_set_result="utf8"');

		$res=$db->open("book");
		foreach($res->fetchAll() as $pole)
		{
			echo'добавил: '.$pole[name].'<br>время: '.$pole[time].'<br>сообщение: '.$pole[msg].'<p>';
		}
А

Пришелец
0
print_r($res->fetchAll()); что выдает?
М
Автор
Пришелец
0
ByKuznec (17 Апреля 2014 / 02:20)
print_r($res->fetchAll()); что выдает?
страница не открывается))
если за комментировать то открывается
		$res=$db->open("book");
		//print_r($res->fetchAll());
		//foreach($res->fetchAll() as $pole)
		//{
		//	echo'добавил: '.$pole[name].'<br>время: '.$pole[time].'<br>сообщение: '.$pole[msg].'<p>';
		//}

Добавлено через 05:01 сек.
мне кажется что дело именно вот в этом
    function open($modul,$sort='id',$where=0,$limit='') 
    { 
        $this->query("select * from $modul ORDER by `$sort` $limit"); 
    }

я просто классы только начал писать пытаюсь освоиться может быть $this-> нужно заменить на что-то другое)))
М
Автор
Пришелец
0
решил попробовать добавить return
return $this->query("select * from $modul ORDER by `$sort` $limit"); 
все сразу заработало
L

Землянин
0
Mishutka (17 Апреля 2014 / 05:43)
решил попробовать добавить return
return $this->query("select * from $modul ORDER by `$sort` $limit"); 
все сразу заработало

Мб так правильнее :
return $this->query("select * from $modul ORDER by `$sort` DESC LIMIT $limit"); 
М
Автор
Пришелец
0
lekt (17 Апреля 2014 / 07:01)

Мб так правильнее :
return $this->query("select * from $modul ORDER by `$sort` DESC LIMIT $limit"); 
ну во первых деск был не нужен и лимит тоже в редких случаях проще было бы написать в переменной $limit все что нужно к примеру DESC LIMIT 10 или просто LIMIT 10
М
Автор
Пришелец
0
class db extends PDO{
function open($modul)
{
return $this->query("select * from `$modul` ORDER by `id` ASC");
}
function open_pr($modul,$time)
{
return $this->query("select * from `$modul` where `time` > '$time' ORDER by `id` ASC");
}
function add($modul,$add)
{
return $this->exec("insert into `$modul` (`name`,`time`,`msg`) values($add)");
}
function edit($modul,$edit,$where='')
{
return $this->exec("update `$modul` set $edit $where");
}
function del($modul,$d)
{
return $this->exec("delete from `$modul` where `id`='$d'");
}
}
$db = new db("mysql:host=$DB_HOST;dbname=$DB_BASE", $DB_USER, $DB_PASS);
$db->query('set charset utf8'); 
$db->query('SET names utf8'); 
$db->query('set character_set_client="utf8"'); 
$db->query('set character_set_connection="utf8"'); 
$db->query('set character_set_result="utf8"');
class book{
function down()
{
global $db;
$res = $db->open("book");
$_SESSION['book']['time']=date("Y-m-d H:i:s");
header('Content-type: application/json');
die(json_encode($res->fetchAll()));
}
function down1()
{
global $db;
$pr_msg=$_SESSION['book']['time'];
$res = $db->open_pr("book",$pr_msg);
$_SESSION['book']['time']=date("Y-m-d H:i:s");
header('Content-type: application/json');
die(json_encode($res->fetchAll()));
}
function add($name,$msg)
{
global $db;
if($msg!="" and $name!="")
{
$time=date("Y-m-d H:i:s");
$db->add("book","'$name','$time','$msg'");
}
}
function del($d)
{
global $db;
if($d!='')
{
$db->del("book",$d);
}
}
}
$book=new book();
if($_GET['act']=='add')$book->add($_POST['name'],$_POST['msg']);
if($_GET['act']=='down')$book->down();
if($_GET['act']=='down1')$book->down1();
if($_GET['act']=='del')$book->del($_POST['d']);
?>
Изменил: Михаил (17.04.2014 / 07:47)
М
Автор
Пришелец
0
<html>
<head>
<title>test</title>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<script type="text/javascript">
function del(del)
{$.ajax({
url: '?act=del',//адрес запроса
type: 'POST',
data: 'd='+ del,
success: function()
{
$("#msg_"+del).slideUp('slow');
}
})
};
$.ajax({
url: 'index.php?act=down',//адрес запроса
dataType: 'json',
success: function(obj) //ответ от сервера
{
$.each(obj, function( index, value ) 
{
addMessage(value)
})
setTimeout('javascript:down_msg1()', 10000)
}
})
function down_msg1()
{
$.ajax({
url: 'index.php?act=down1',//адрес запроса
dataType: 'json',
success: function(obj) //ответ от сервера
{
$.each(obj, function( index, value ) 
{
addMessage(value)
})
setTimeout('javascript:down_msg1()', 10000)
}
})
}
function add()
{
var name=$('#name').val()
var msg=$('#msg').val()
$.ajax({
url: 'index.php?act=add',//адрес запроса
type: 'POST',
data: 'name='+ name +'&msg='+ msg,
success: function() //ответ от сервера
{
down_msg1();
$('#msg').val('')
}
})
}
function addMessage(obj)
{
$('#mesage').prepend('<div style="display: none" id="msg_'+ obj.id +'">Добавил: '+ obj.name +'<br>Добавлено: '+ obj.time +'<br>Сообщение: '+ obj.msg +'<br><button OnClick="del('+ obj.id +')">удалить</button><hr></div>')
$('#msg_'+ obj.id).slideDown('slow')
}
</script>
Имя:<br>
<form action='?act=add' method='post'> 
<input name='name' id='name'><br/>
Сообщение:<br>
<input name='msg' id='msg'><br/>
<input type='button' onclick='add()' value='Добавить сообщение'><p>
</form>
<div id='mesage'>
</div>
</body>
</html>

Добавлено через 01:10 сек.
если еще кто-то предложит как еще можно упростить код буду только рад
N

Эцилопп сией тентуры
0
6. Mishutka, ну тогда делай как-то так:

<?php
function open($modul, $sort='id', $limit='', $desc='')
{
    $sql = 'select * from \'' . $modul . '\' ';
    $sql .= empty($sort)  ? '' : 'ORDER by `' . $sort . '` ';
    $sql .= empty($desc)  ? '' : 'DESC ';
    $sql .= empty($limit) ? '' : 'LIMIT \'' . $limit . '\'';

    return $this -> query($sql);  
}
Это как вариант, а там ты свои значения поставь...
Этот вариант более гибкий, для случаев когда надо будет что либо добавить или избавиться от лишнего.
Изменил: Nu3oN (17.04.2014 / 08:37)
М
Автор
Пришелец
0
а еще лучше чтобы все значения не прописывать записать все в моссив)) и проверять уже есть тот или иной моссив если есть то записываем))

Добавлено через 03:28 сек.
<?php 
function open($array') 
{ 
    $sql = 'select * from \'' . $modul . '\' '; 
    $sql .= empty($array[sort])  ? '' : 'ORDER by `' . $array[sort] . '` '; 
    $sql .= empty($array[desc])  ? '' : 'DESC '; 
    $sql .= empty($array[limit]) ? '' : 'LIMIT \'' . $array[limit] . '\''; 

    return $this -> query($sql);   
}
Изменил: Михаил (18.04.2014 / 08:10)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск