Вобщем сколько не читал статьи по ООП и не читал учебник до меня так и не дошло как передать что то через простейшую форму и записать это в БД.
Там само собой это не написано.
Я честно насиловал моск очень долгое время и вышло что то этакое:
Код
<?
class Test
{
function Add()
{
require("connect_sql.php");
$script = $db->Execute("Update Limitation SET [cap]='$this->cap',[lvl]='$this->lvl',[nlvl]='$this->nlvl'");
}
}
$add = new Test;
$add->cap = $_POST['cap'];
$add->lvl = $_POST['lvl'];
$add->nlvl = $_POST['nlvl'];
$add->Add();
?>
//Далее идет хтмл со всеми формами...
class Test
{
function Add()
{
require("connect_sql.php");
$script = $db->Execute("Update Limitation SET [cap]='$this->cap',[lvl]='$this->lvl',[nlvl]='$this->nlvl'");
}
}
$add = new Test;
$add->cap = $_POST['cap'];
$add->lvl = $_POST['lvl'];
$add->nlvl = $_POST['nlvl'];
$add->Add();
?>
//Далее идет хтмл со всеми формами...
Выдает вот такую вот ошибку Fatal error: Call to a member function Execute() on a non-object
Подскажите мне дураку в чем моя ошибка, подтолкните так сказать к решению проблемы, очень прошу.
Спустя 2 дня, 14 часов, 11 минут, 15 секунд (26.08.2008 - 15:35) SiFaust написал(а):
Стыдно но все еще не понял почему так) Буду благодарен если кто обьяснит)
Спустя 11 минут, 14 секунд (26.08.2008 - 15:46) zona7o написал(а):
тебе внутри класса Test объявить переменные:
Код
class Test
{
var $cap;
var $lvl;
var $nlvl;
function Add()
{
require("connect_sql.php");
$script = $db->Execute("Update Limitation SET [cap]='$this->cap',[lvl]='$this->lvl',[nlvl]='$this->nlvl'");
}
}
{
var $cap;
var $lvl;
var $nlvl;
function Add()
{
require("connect_sql.php");
$script = $db->Execute("Update Limitation SET [cap]='$this->cap',[lvl]='$this->lvl',[nlvl]='$this->nlvl'");
}
}
Спустя 36 минут, 32 секунды (26.08.2008 - 16:23) SiFaust написал(а):
Всеравно та же ошибка что и раньше... Может подключение к БД какое то особенное должно быть?
Спустя 5 минут, 21 секунда (26.08.2008 - 16:28) Viking написал(а):
$db не является объектом, где оно у тебя где объявляется? в connect_sql.php ? значит там ошибка
Спустя 28 минут, 18 секунд (26.08.2008 - 16:56) zona7o написал(а):
Содержимое connect_sql.php покажешь?
Спустя 1 час, 59 минут, 57 секунд (26.08.2008 - 18:56) SiFaust написал(а):
Viking, обьявил $db обьектом, итог тот же.
Содержимое connect_sql.php:
Содержимое connect_sql.php:
Код
<?php
$dblocation = "localhost";
$dbname = "Turney";
$dbuser = "root";
$dbpasswd = "";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P>В настоящий момент база данных не доступна, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
?>
$dblocation = "localhost";
$dbname = "Turney";
$dbuser = "root";
$dbpasswd = "";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P>В настоящий момент база данных не доступна, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
?>
Спустя 47 минут, 32 секунды (26.08.2008 - 19:44) Viking написал(а):
слишком тихо объявил значит, в ошибке ясно сказано, что он не объект
Спустя 22 минуты, 47 секунд (26.08.2008 - 20:07) SiFaust написал(а):
В єтот раз кричал и обьявлял как можно громче)) Жаль оно меня не услышало )))
Код
<?
class Test
{
var $dblocation = "localhost";
var $dbname = "Turney";
var $dbuser = "root";
var $dbpasswd = "";
var $db;
var $cap;
var $lvl;
var $nlvl;
var $dbcnx;
var $dbsel;
function Sql()
{
$this->dbcnx->mysql_connect($this->dblocation,$this->dbuser,$this->dbpasswd);
$this->dbsel->mysql_select_db($this->dbname, $this->dbcnx);
}
function Add()
{
$this->Sql();
$this->db->Execute("Update Limitation SET [cap]='$this->cap',[lvl]='$this->lvl',[nlvl]='$this->nlvl'");
}
}
$add = new Test;
$add->cap = 5;
$add->lvl = 5;
$add->nlvl = 5;
$add->Add();
?>
class Test
{
var $dblocation = "localhost";
var $dbname = "Turney";
var $dbuser = "root";
var $dbpasswd = "";
var $db;
var $cap;
var $lvl;
var $nlvl;
var $dbcnx;
var $dbsel;
function Sql()
{
$this->dbcnx->mysql_connect($this->dblocation,$this->dbuser,$this->dbpasswd);
$this->dbsel->mysql_select_db($this->dbname, $this->dbcnx);
}
function Add()
{
$this->Sql();
$this->db->Execute("Update Limitation SET [cap]='$this->cap',[lvl]='$this->lvl',[nlvl]='$this->nlvl'");
}
}
$add = new Test;
$add->cap = 5;
$add->lvl = 5;
$add->nlvl = 5;
$add->Add();
?>
Спустя 25 минут, 57 секунд (26.08.2008 - 20:33) Viking написал(а):
оно тебя просто не поняло, и это не удивительно
ты объявляешь $db СВОЙСТВОМ (переменной) класса тест
при этом ты вызываешь метод Execute ОБЪЕКТА $db , а он у тебя не объект а переменная и такого метода у него нет и быть не может
видимо ты эту строчку скопировал откудато потеряв контекст
ты объявляешь $db СВОЙСТВОМ (переменной) класса тест
при этом ты вызываешь метод Execute ОБЪЕКТА $db , а он у тебя не объект а переменная и такого метода у него нет и быть не может
видимо ты эту строчку скопировал откудато потеряв контекст
Спустя 1 час, 58 минут, 7 секунд (26.08.2008 - 22:31) zona7o написал(а):
а где метод Execute?..
и ещё такая идея - использовать наследование либо полиморфизм. не знаю что лучше.
если я правильно понимаю наследование, то Test extends db позволит классу Тест использовать Execute метод родительского класса дб.
хм.. подождите, я что-то вообще не вижу здесь класса DB
и ещё такая идея - использовать наследование либо полиморфизм. не знаю что лучше.
если я правильно понимаю наследование, то Test extends db позволит классу Тест использовать Execute метод родительского класса дб.
хм.. подождите, я что-то вообще не вижу здесь класса DB

Спустя 19 минут, 53 секунды (26.08.2008 - 22:51) SiFaust написал(а):
Спасибо всем, буду думать дальше ))
Всетаки логика ООП для меня сложна и пока малопонятна, такие легкие вещи становятся такими сложными...
Основывался я на эту статью, так как даже не представлял как работать с БД в ОПП, но видимо очень много недопонял)))
Всетаки логика ООП для меня сложна и пока малопонятна, такие легкие вещи становятся такими сложными...
Основывался я на эту статью, так как даже не представлял как работать с БД в ОПП, но видимо очень много недопонял)))
Спустя 19 минут, 55 секунд (26.08.2008 - 23:11) Viking написал(а):
Цитата(zona7o @ 26.8.2008, 23:31) [snapback]47061[/snapback]
а где метод Execute?..
и ещё такая идея - использовать наследование либо полиморфизм. не знаю что лучше.
если я правильно понимаю наследование, то Test extends db позволит классу Тест использовать Execute метод родительского класса дб.
хм.. подождите, я что-то вообще не вижу здесь класса DB
и ещё такая идея - использовать наследование либо полиморфизм. не знаю что лучше.
если я правильно понимаю наследование, то Test extends db позволит классу Тест использовать Execute метод родительского класса дб.
хм.. подождите, я что-то вообще не вижу здесь класса DB

ты так человека еще больше запутаешь
тут дб это объект, т.е. экземпляр неизвестного класса, а не сам класс
проблема как раз в том что самого класса, чьим объектом является дб тут и вовсе нет
Спустя 1 минута, 13 секунд (26.08.2008 - 23:12) Viking написал(а):
Цитата(SiFaust @ 26.8.2008, 23:51) [snapback]47063[/snapback]
Спасибо всем, буду думать дальше ))
Всетаки логика ООП для меня сложна и пока малопонятна, такие легкие вещи становятся такими сложными...
Основывался я на эту статью, так как даже не представлял как работать с БД в ОПП, но видимо очень много недопонял)))
Всетаки логика ООП для меня сложна и пока малопонятна, такие легкие вещи становятся такими сложными...
Основывался я на эту статью, так как даже не представлял как работать с БД в ОПП, но видимо очень много недопонял)))
вот в той статье объявление дб
Код
Напомним, что параметр $db – это экземпляр класса DataBase. Можно поступить и так:
<?php
public function setDb($db)
{
$this->db = new DataBase(‘login’,’password’,’host’,’database’); // Параметры – значения подключения к базе данных.
}
?>
<?php
public function setDb($db)
{
$this->db = new DataBase(‘login’,’password’,’host’,’database’); // Параметры – значения подключения к базе данных.
}
?>
Спустя 2 часа, 38 минут, 1 секунда (27.08.2008 - 01:50) SiFaust написал(а):
Огромное всем спасибо, я попутал свойства с обьектам и получилась каша)
Viking, проблема в том что я не могу понять КАК это работает, вот в процедурном все просто, для БД есть свои команды, такая то команда посылает запрос, такая то соединяет, а как это все работает в ООП я просто не понимаю ((
Ни в одной книжке, ни в одной статье на это не дают ответов, наверное они настолько очевидные...
Извиняюсь за свое тугодумство, но может кто то обьяснить как это все работает?
Заранее спасибо.
Viking, проблема в том что я не могу понять КАК это работает, вот в процедурном все просто, для БД есть свои команды, такая то команда посылает запрос, такая то соединяет, а как это все работает в ООП я просто не понимаю ((
Ни в одной книжке, ни в одной статье на это не дают ответов, наверное они настолько очевидные...
Извиняюсь за свое тугодумство, но может кто то обьяснить как это все работает?
Заранее спасибо.
Спустя 4 часа, 55 минут, 13 секунд (27.08.2008 - 06:45) Viking написал(а):
ну все это как раз работает в ООП точно так же как и в других местах
а сами принципы ООП достаточно хорошо изложены во многих книгах да и статей в инете наверняка достаточно
а сами принципы ООП достаточно хорошо изложены во многих книгах да и статей в инете наверняка достаточно
Спустя 6 часов, 53 минуты, 45 секунд (27.08.2008 - 13:39) SiFaust написал(а):
Ура! Заработало! Спасибо большое всем) Моя ошибка была в том что я пытался заставить делать обьекты то что делают свойства. Уважаемый Viking мне об этом сказал но я не правильно сделал выводы и вместо того что бы исправить я просто начал создавать обьекты)
Вот как все получилось, надеюсь другим поможет мой горький опыт:
Еще раз всем спасибо вы мне очень помогли.
Вот как все получилось, надеюсь другим поможет мой горький опыт:
Код
<?
class Test
{
var $connect;
var $query;
function connect()
{
$this->connect = mysql_connect("localhost", "root", "");
mysql_select_db("Turney", $this->connect);
}
function query()
{
$this->connect();
$this->query=mysql_query("INSERT INTO TurneyLimitation (cap, lvl, nlvl) VALUES('123', '11', '23')");
return $this->query;
}
}
$add = new Test;
$add->query();
?>
class Test
{
var $connect;
var $query;
function connect()
{
$this->connect = mysql_connect("localhost", "root", "");
mysql_select_db("Turney", $this->connect);
}
function query()
{
$this->connect();
$this->query=mysql_query("INSERT INTO TurneyLimitation (cap, lvl, nlvl) VALUES('123', '11', '23')");
return $this->query;
}
}
$add = new Test;
$add->query();
?>
Еще раз всем спасибо вы мне очень помогли.
Спустя 17 минут, 15 секунд (27.08.2008 - 13:56) zona7o написал(а):
предлагаю ввести изменения в код - такие:)
по-моему нигде не ошибся)
Код
<?
class Test
{
var $connect;
var $query;
var $base;
//конструктор
function Test($host,$base,$user,$pass)
{
$this->base=$base;
$this->connect=mysql_connect("$host", "$user", "$pass");
mysql_select_db("$this->base", $this->connect);
}
function query($cap,$lvl,$nlvl)
{
$this->query=mysql_query("INSERT INTO ".$this->base." (cap, lvl, nlvl) VALUES('$cap', '$lvl', 'nlvl')");
return $this->query;
}
}
$add = new Test('localhost','basename','root','');
$add->query($_POST['cap'],$_POST['lvl'],$_POST['nlvl']);
?>
class Test
{
var $connect;
var $query;
var $base;
//конструктор
function Test($host,$base,$user,$pass)
{
$this->base=$base;
$this->connect=mysql_connect("$host", "$user", "$pass");
mysql_select_db("$this->base", $this->connect);
}
function query($cap,$lvl,$nlvl)
{
$this->query=mysql_query("INSERT INTO ".$this->base." (cap, lvl, nlvl) VALUES('$cap', '$lvl', 'nlvl')");
return $this->query;
}
}
$add = new Test('localhost','basename','root','');
$add->query($_POST['cap'],$_POST['lvl'],$_POST['nlvl']);
?>
по-моему нигде не ошибся)
Спустя 1 час, 13 минут, 17 секунд (27.08.2008 - 15:09) SiFaust написал(а):
Да, так и правда удобней ))
Правда одна ошибочка всетаки есть ))
строка:
Там мы выбираем нужную нам таблицу, а вместо этого там стоит выбранная БД )
Правда одна ошибочка всетаки есть ))
строка:
Код
$this->query=mysql_query("INSERT INTO ".$this->base." (cap, lvl, nlvl) VALUES('$cap', '$lvl', 'nlvl')");
Там мы выбираем нужную нам таблицу, а вместо этого там стоит выбранная БД )
Спустя 10 минут, 24 секунды (27.08.2008 - 15:20) zona7o написал(а):
точно:) совсем загнался)
но думаю общий смысл ясен.
но думаю общий смысл ясен.
Спустя 18 дней, 17 часов, 24 минуты, 56 секунд (16.09.2008 - 08:45) Dezigo написал(а):
_____________
Всегда стремлюсь вперед, но почему то спотыкаюсь и падаю o.O