Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не вводятся данные в базу из PHP скрипта
 
 автор: Тимофей77   (24.02.2009 в 19:53)   письмо автору
 
 

Дабрый день помогите неучу Изучаю PHP на примерах Куперина Романа. Есть проблема со скриптом ввода рубрики в базу данных. В общем всё работает нармально. только при отработке скрипта добавления рубрики в базу данных зти рубрики не вносятся. PHP ни каких ошибок не выдает. Причем скрипт вывода списка существующих рубрик отрабатывает нормально. Тоесть связь с базой нармальная и операции с внутренними переменными базы проходят нормально. Подскажите пожалуста где искать собаку а то я скоро начну курочить аппаратную часть.:)

  Ответить  
 
 автор: newProgrammer   (24.02.2009 в 20:21)   письмо автору
 
   для: Тимофей77   (24.02.2009 в 19:53)
 

Не, аппаратную часть пока не трогай. Дай-ка сначала на код взглянуть, на тот что добавляет рубрики в базу. Если не разберемся в нем, то тогда уж можно будет и в аппаратную часть лезть.

  Ответить  
 
 автор: Dimka31   (24.02.2009 в 20:23)   письмо автору
 
   для: Тимофей77   (24.02.2009 в 19:53)
 

чаще мои ошибки с добавлением в базу данных, это раставление скобок или несовпадение количества полей.
Тестирую так вывожу полностью запрос копирую вставляю в phpmyadmin а он мне уже отвечает на все))

  Ответить  
 
 автор: Тимофей77   (24.02.2009 в 21:28)   письмо автору
 
   для: Dimka31   (24.02.2009 в 20:23)
 

Извиняюсь
Выкладываю тело скриптов отвечающие за формирование запросов на проверку существования и добавление рубрики

var $in_cat_name;

function in_cat_add_check()
{
// добавление слешей перед управляющими символами .
$this->in_cat_name=AddSlashes($this->in_cat_name);

// проверка на кол-во символов
if(strlen($this->in_cat_name)==0) return(21);
if(strlen($this->in_cat_name)>50) return(22);

// проверяем на существование такой рубрики
$this->sql_res="select c_id from tbl_cats where c_name='".$this->in_cat_name."'";
$this->sql_execute();
if($this->sql_err) return(11);
if(mysql_num_rows($this->sql_res)) return(23);

return(0);
}
function in_cat_add()
{
// Проверяем данные на корректность
$err=$this->in_cat_add_check();
if($err) return($err);

// Формируем запрос в БД
$this->sql_query="insert into tbl_cats (c_name) values('".$this->in_cat_name."')";
/$this->sql_execute();
//
if($this->sql_err) return(11);

return(0);

Общая информация
Скрипты разбиваются на классы переменная in_cat_name вводится в форме как $name и присваивается in_cat_name в теле исполнительного скрипта перед исполнением in_cat_add()
Дополнительно даю тело скриптов отвечающих за связь с базой и отправки запроса
var $sql_login="root";
var $sql_passwd="123";
var $sql_database="roma";
var $sql_host="localhost";

var $conn_id;
var $sql_query;
var $sql_err;
var $sql_res;

function sql_connect()
{
$this->conn_id=mysql_connect($this->sql_host,$this->sql_login,$this->sql_passwd);
$this->conn_log_id=mysql_connect($this->sql_host,$this->sql_login,$this->sql_passwd);
mysql_select_db($this->sql_database);
mysql_query("set character_set_client='cp1251'");
mysql_query("set character_set_results='cp1251'");

}

function sql_close()
{
mysql_close($this->conn_id);
}

function sql_execute()
{
$this->sql_res=mysql_query($this->sql_query,$this->conn_id);
$this->sql_err=mysql_error();
}
Проверял вводить в ручную данные запросы нормально вводятся а из скриптов не в какую
Заранее блогодарен

  Ответить  
 
 автор: newProgrammer   (24.02.2009 в 21:57)   письмо автору
 
   для: Тимофей77   (24.02.2009 в 21:28)
 

Как-то запутано ты все это дело запостил. Если не сложно, отредактируй: используй тэги "code" для выделения своего кода, перед кодом поставь "<?php" тэг для его подсветки. Так, все быстрее разберутся в твоем коде и помогут.

  Ответить  
 
 автор: Тимофей77   (24.02.2009 в 22:37)   письмо автору
 
   для: newProgrammer   (24.02.2009 в 21:57)
 

code

<?php
var $in_cat_name;

function in_cat_add_check()
{
// добавление слешей перед управляющими символами .
$this->in_cat_name=AddSlashes($this->in_cat_name);

// проверка на кол-во символов
if(strlen($this->in_cat_name)==0) return(21);
if(strlen($this->in_cat_name)>50) return(22);

// проверяем на существование такой рубрики
$this->sql_res="select c_id from tbl_cats where c_name='".$this->in_cat_name."'";

b //первое проблемное место смотреть в верх : ) /b

$this->sql_execute();
if($this->sql_err) return(11);
if(mysql_num_rows($this->sql_res)) return(23);

return(0);
}
function in_cat_add()
{
// Проверяем данные на корректность
$err=$this->in_cat_add_check();
if($err) return($err);

// Формируем запрос в БД

$this->sql_query="insert into tbl_cats (c_name) values('".$this->in_cat_name."')";

b// второе проблемное место /b

/$this->sql_execute();
//
if($this->sql_err) return(11);

return(0);
?>

/code

Да вот пришло в голову следующие причины
1 Несовпадает кодировка
2 неработают некоторые возможности апача на виндовс платформе
3 проблемы с настройками таблиц в мускуле
Если не трудно можете подсказать талковые пути проверки данных вариантов.

  Ответить  
 
 автор: newProgrammer   (24.02.2009 в 23:40)   письмо автору
 
   для: Тимофей77   (24.02.2009 в 22:37)
 

Не те тэги написал :) Есть специальные тэги при написании сообщения [ code ][ / code ] (только без пробелов).
По теме: явно проблема в коде. Например, вот это:
<?php
$this
->sql_query="insert into tbl_cats (c_name) values('".$this->in_cat_name."')";
$this->sql_execute();
?>

Я так понимаю, что метод sql_execute() и есть тот метод, который, в данном случае, добавляет рубрику в базу. Но почему "$this->" стоит перед этим методом? "$this->" означает, что метод относится именно к тому классу, из которого вызывается. Но судя по коду, этот метод определен в другом классе. Это во-первых. А во-вторых, логично будет предположить, что строка запроса должна быть передана в метод в качестве параметра.
Примерно это будет выглядеть так:
<?php
//составляем строку запроса
$this->sql_query "insert into tbl_cats ($c_name) values('".$this->in_cat_name."')";
//создаем объект класса, определения которого нет в коде, а должно было быть
$con = new ClassName//примерное наимнование класса
$con->sql_execute($this->sql_query);
?>

И таких ляпов в коде много. Короче говоря, проще для тебя писать не классами, а обычными функциями.

  Ответить  
 
 автор: Тимофей77   (25.02.2009 в 02:46)   письмо автору
 
   для: newProgrammer   (24.02.2009 в 23:40)
 

Вы полностью правы. Мой промах. Я забыл указать что все классы наследуются друг от друга тоесть in класс ( класс формирования запроса) наследует возможности класса msql (класс отправки запроса) тоесть на сколько я понимаю что в принципе их можно считать одним классом ( от общего к деталям) в принципе мня это и заинтересовало.
Ранее я обмолвился о функции выборки данных из базы


var $out_cat_list;
 function out_cat_list()
 {
  $this->sql_query="select c_id, c_name from tbl_cats order by c_name";

  $this->sql_execute();
  if($this->sql_err) return(11);

  while(list($id, $name)=mysql_fetch_row($this->sql_res))
  {
   $this->out_cat_list.="<a href=/cat/?cat=$id>$name</a><br>\n";
  }

  return(0);
 }
var $out_cat_list;
 function out_cat_list()
 {
  $this->sql_query="select c_id, c_name from tbl_cats order by c_name";

  $this->sql_execute();
  if($this->sql_err) return(11);

  while(list($id, $name)=mysql_fetch_row($this->sql_res))
  {
   $this->out_cat_list.="<a href=/cat/?cat=$id>$name</a><br>\n";
  }

  return(0);
 }

которая при этой конструкции работает без отдельного определения класса в котором находится метод $this->sql_execute();
А ошибка действительно в коде прописал в чистых функциях всё работает. но всё таки хочется разжевать классы. Не подскажете где более доходчиво они описаны.

За ранее блогодарен.

  Ответить  
 
 автор: newProgrammer   (25.02.2009 в 13:19)   письмо автору
 
   для: Тимофей77   (25.02.2009 в 02:46)
 

Дейтсвительно, очень сложно что-либо говорить когда не видишь, где начинаются и где кончаются классы, какой из них наследует какой, к какому именно классу прнадлежит тот или иной метод. В таком случае ничего однозначного сказать не получится.

Сам недавно начал учить ООП. В интернете есть статьи, но среди них мало таких, которые бы походили на случаи из реальной жизни. Поэтому нельзя забывать и про книги.
Из статей советую эти:
-на русском
http://www.softtime.ru/info/articlephp.php?id_article=108
http://php.su/learnphp/phpoo/?php5
http://www.phpworld.ru/php5/index.php

-на английском
http://serialize.us/?p=44

Из книг, скачал недавно книгу на английском в рунете, ничего так, много полезного прочитал, называется Object-Oriented Programming with PHP5 (Hasin Hayder). Правда, не помню откуда скачал. Попробуй поискать по названию...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования