Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите найти ошибку

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
atm87
Отправлено: 03 Февраля, 2013 - 16:12:54
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Здравствуйте, Уважаемые! Причина:
Существует файл установщик приложения: atm_install.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. @error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
  3. @ini_set ( 'display_errors', true );
  4. @ini_set ( 'html_errors', false );
  5. @ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
  6.  
  7. define('ROOT_DIR', dirname (__FILE__));
  8. define('ADMIN_DIR', ROOT_DIR.'/atm_admin');
  9.  
  10. header("Content-type: text/html; charset=utf-8");
  11. require_once(ADMIN_DIR.'/data/dataprocessing.php');
  12. require_once(ADMIN_DIR.'/msg.php');
  13.  
  14. /* Если нажата кнопка отправить */
  15. if(isset($_POST['submit_install_cms'])){
  16.     if(!preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $_POST['db_name'])){
  17.         $db_name = $_POST['db_name'];
  18.     }else{
  19.         $message_error .= $msg['error_bd_name'];
  20.     }
  21.     $db_user = clearData($_POST['db_user']);
  22.     if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['db_email'])){
  23.         $message_error .= $msg['error_db_email'];
  24.     }else{
  25.         $db_email = $_POST['db_email'];
  26.     }
  27.     $db_pass = clearData($_POST['db_pass']);
  28.     $db_pass_confirm = clearData($_POST['db_pass_confirm']);
  29.     $db_host = clearData($_POST['db_host']);
  30.  
  31.     if($db_name != "" && $db_user != "" && $db_pass != "" && $db_pass_confirm != "" && $db_host != ""){
  32.         if($db_pass === $db_pass_confirm){
  33.            
  34. $dbconfig = <<<HTML
  35. <?PHP
  36. define ("DBHOST", "{$db_host}");
  37. define ("DBNAME", "{$db_name}");
  38. define ("DBUSER", "{$db_user}");
  39. define ("DBPASS", "{$db_pass}");
  40. \$db = new db;
  41. ?>
  42. HTML;
  43.  
  44.             $con_file = fopen("atm_admin/data/dbconfig.php", "w+") or die ("Извините, но невозможно создать файл <b>.atm_admin/data/dbconfig.php</b>.<br />Проверьте правильность проставленного CHMOD!");
  45.             fwrite($con_file, $dbconfig);
  46.             fclose($con_file);
  47.             @chmod("atm_admin/data/dbconfig.php", 0666);
  48.    
  49.             /* Создаём файл настроек ATM-CMS */
  50.             $conf = fopen("atm_admin/atm_config.php","w+") or die ("Невозможно создать файл <b>.atm_admin/atm_config.php</b>.<br />Проверьте правильность проставленного CHMOD!");
  51.             $data = "Дата установки: "."date('Y-m-d H:i:s')\n\r";
  52.             fwrite($conf, $data);
  53.             @chmod("atm_admin/atm_config.php", 0666);
  54.             fclose($conf);
  55.    
  56.             /* Создаем таблицы в БД */
  57.             $sql = array();
  58.             $sql[] = "CREATE TABLE IF NOT EXISTS `atm_config` (
  59.                    `id` int(11) NOT NULL AUTO_INCREMENT,
  60.                    `template` varchar(50) NOT NULL,
  61.                    PRIMARY KEY (`id`)
  62.                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  63.    
  64.                    INSERT INTO `atm_config` VALUES (NULL, 'default');";
  65.    
  66.             include ADMIN_DIR."/classes/mysqli.class.php";
  67.             include ADMIN_DIR."/data/dbconfig.php";
  68.    
  69.             foreach($sql as $table){
  70.                 $result = $db->connectDB($db_host, $db_user, $db_pass, $db_name);
  71.                 $db->mysqli_query($result, $table);//ошибка. не определена функция
  72.             }
  73.    
  74.             /* Отправка email */
  75.             $from = 'atm87@mail.ru';
  76.             $subject = 'Установлена ATM-CMS';
  77.             $message = 'Была установлена ATM-CMS. E-mail пользователя: '.$db_email;
  78.             mail($db_email, $subject, $message, 'From: '.$from);
  79.    
  80.             header('Location: index.php');
  81.         }else{
  82.             $message_error .= $msg["db_pass_confirm"];
  83.         }
  84.     }else{
  85.         $message_error .= $msg["error_input"];
  86.     }
  87. }
  88. ?>
  89. <!doctype html>
  90. <html>
  91. <head>
  92. <title>Установка ATM-CMS</title>
  93. <link rel='stylesheet' type='text/css' href='atm_admin/css/style.css' />
  94. </head>
  95. <body>
  96. <table class="atm_install_form">
  97.     <tr>
  98.         <td>
  99.         <center>
  100.             <h1>Установка ATM-CMS</h1>
  101.             Введите информацию для подключения к базе данных. <a href="">Инструкция для установки.</a><br />            <?PHP echo($message_error != '') ? "<h2>".$message_error."</h2>" : ''; ?>
  102.             <form action='atm_install.php' method='post'>
  103.                 Имя базы данных (не более 20 символов):                <input type='text' name='db_name' maxlength="55" value="<?PHP echo @$db_name; ?>" /><br />                Имя пользователя (не более 20 символов):                <input type='text' name='db_user' maxlength="55" value="<?PHP echo @$db_user; ?>" /><br />                E-mail (не более 20 символов):                <input type='text' name='db_email' maxlength="55" value="<?PHP echo @$db_email; ?>" /><br />                Пароль (не более 20 символов):                <input type='password' name='db_pass' maxlength="55" /><br />                Подтверждение пароля:                <input type='password' name='db_pass_confirm' maxlength="55" /><br />                Сервер базы данных (не более 20 символов):                <input type='text' name='db_host' maxlength="55" value="<?PHP echo @$db_host; ?>" /><br />                <input type='submit' value='Отправить' name='submit_install_cms' class="input" />            </form>
  104.         </center>
  105.         </td>
  106.     </tr>
  107. </table>
  108. </body>
  109. </html>


При нажатии на кнопку "Отправить", браузер выдаёт ошибку: Fatal error: Call to undefined method DB::mysqli_query() in Z:\home\atm-cms.ru\www\atm_install.php on line 71

Как видно из кода выше, в начале файла я подключаю файл dataprocessing.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /* обработка входящих данных */
  3. function clearData($data){
  4.     $data = htmlspecialchars(trim($data));
  5.     return addslashes($data);
  6. }
  7. ?>


Что не так? Однако
 
 Top
DelphinPRO
Отправлено: 03 Февраля, 2013 - 16:16:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




очевидно, что в классе DB не определен метод mysqli_query


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
atm87
Отправлено: 03 Февраля, 2013 - 16:22:00
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




А как его определить?

Мне нужно, чтобы данные сработали, т.е создалась таблица:
PHP:
скопировать код в буфер обмена
  1. $sql = array();
  2.             $sql[] = "CREATE TABLE IF NOT EXISTS `atm_config` (
  3.                   `id` int(11) NOT NULL AUTO_INCREMENT,
  4.                   `template` varchar(50) NOT NULL,
  5.                   PRIMARY KEY (`id`)
  6.                   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  7.  
  8.                   INSERT INTO `atm_config` VALUES (NULL, 'default');";

(Добавление)
Т.е. нужно создать функцию в файле dataprocessing.php

PHP:
скопировать код в буфер обмена
  1.  
  2. function query(){
  3.          а здесь что прописать?
  4. }
  5.  

(Отредактировано автором: 03 Февраля, 2013 - 16:23:30)

 
 Top
NoPaper
Отправлено: 03 Февраля, 2013 - 16:36:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




mysqli_query используется в процедурном стиле, т.е. не $db->mysqli_query, а mysqli_query($db,'запрос');
Для ооп будьте добры юзать метод query: $db->query

(Отредактировано автором: 03 Февраля, 2013 - 16:38:24)

 
 Top
atm87
Отправлено: 03 Февраля, 2013 - 18:33:10
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Пробовал $db->query
Та же самая ошибка.
 
 Top
etoYA
Отправлено: 03 Февраля, 2013 - 18:54:48
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




atm87, что в классе DB?
 
 Top
NoPaper
Отправлено: 03 Февраля, 2013 - 19:15:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




atm87, php же написал, что нету в классе db нужного метода, нужен код класса db
 
 Top
etoYA
Отправлено: 03 Февраля, 2013 - 19:53:52
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Очень тупо, делать класс, чтоб вызвать другой класс, но раз Вы уже так поступили, то:

PHP:
скопировать код в буфер обмена
  1.  
  2. class DB{
  3.         static $mysqli;
  4.         CONST
  5.                 HOST = 'localhost',
  6.                 USER = 'root',
  7.                 PASS = '',
  8.                 DB = 'db';
  9.         private static function connect(){
  10.                 self::$mysqli = new mysqli(self::HOST,self::USER,self::PASS,self::DB);
  11.         }
  12.         private static function disconnect(){
  13.                 if (is_object(self::$mysqli)) mysqli_close(self::$mysqli);
  14.         }
  15.         public static function query($sql){
  16.                 if (!is_object(self::$mysqli)){
  17.                         self::connect();
  18.                 }
  19.                 $r = self::$mysqli->query($sql);
  20.                 self::disconnect();
  21.                 return $r;
  22.         }
  23. }
  24.  


P.S не проверял.

(Отредактировано автором: 03 Февраля, 2013 - 19:57:05)

 
 Top
atm87
Отправлено: 03 Февраля, 2013 - 20:00:07
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




etoYA пишет:
atm87, что в классе DB?


Только это:
PHP:
скопировать код в буфер обмена
  1. class DB{
  2.     function connectDB(){
  3.         $connect = @mysqli_connect($db_host, $db_user, $db_pass, $db_name);
  4.         if ($connect){
  5.             return $connect;
  6.         }
  7.     }
  8. }

(Добавление)
etoYA пишет:
Очень тупо, делать класс, чтоб вызвать другой класс, но раз Вы уже так поступили, то:


Не понятно... Где?
 
 Top
etoYA
Отправлено: 03 Февраля, 2013 - 20:08:56
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




atm87 пишет:
Не понятно... Где?

клас mysqli уже существует...


Ясно, используйте класс, который дал я. Только проверьте сначала)
Использовать так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $r = DB::query("SELECT * FROM `tbl`");
  3. print_r($r->fetch_assoc());
  4. ?>

про остальные методы mysqli почитайте в гугле
 
 Top
LIME
Отправлено: 03 Февраля, 2013 - 20:09:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




вот это караул))
 
 Top
etoYA
Отправлено: 03 Февраля, 2013 - 20:11:41
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




LIME, Ха-ха
 
 Top
DelphinPRO
Отправлено: 03 Февраля, 2013 - 20:21:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




atm87 пишет:
$db->mysqli_query($result, $table);//ошибка. не определена функция


поменяй на


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
etoYA
Отправлено: 03 Февраля, 2013 - 20:30:58
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




DelphinPRO пишет:
поменяй на

или так)
 
 Top
atm87
Отправлено: 03 Февраля, 2013 - 20:33:25
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




[quote=DelphinPRO][/quote]

Попробовал. Не робит. Сейчас код выглядит так:
atm_install.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. @error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
  3. @ini_set ( 'display_errors', true );
  4. @ini_set ( 'html_errors', false );
  5. @ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
  6.  
  7. define('ROOT_DIR', dirname (__FILE__));
  8. define('ADMIN_DIR', ROOT_DIR.'/atm_admin');
  9.  
  10. header("Content-type: text/html; charset=utf-8");
  11. require_once(ADMIN_DIR.'/data/dataprocessing.php');
  12. require_once(ADMIN_DIR.'/msg.php');
  13.  
  14. /* Если нажата кнопка отправить */
  15. if(isset($_POST['submit_install_cms'])){
  16.     if(!preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $_POST['db_name'])){
  17.         $db_name = $_POST['db_name'];
  18.     }else{
  19.         $message_error .= $msg['error_bd_name'];
  20.     }
  21.     $db_user = clearData($_POST['db_user']);
  22.     if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['db_email'])){
  23.         $message_error .= $msg['error_db_email'];
  24.     }else{
  25.         $db_email = $_POST['db_email'];
  26.     }
  27.     $db_pass = clearData($_POST['db_pass']);
  28.     $db_pass_confirm = clearData($_POST['db_pass_confirm']);
  29.     $db_host = clearData($_POST['db_host']);
  30.  
  31.     if($db_name != "" && $db_user != "" && $db_pass != "" && $db_pass_confirm != "" && $db_host != ""){
  32.         if($db_pass === $db_pass_confirm){
  33.            
  34. $dbconfig = <<<HTML
  35. <?PHP
  36. define ("DBHOST", "{$db_host}");
  37. define ("DBNAME", "{$db_name}");
  38. define ("DBUSER", "{$db_user}");
  39. define ("DBPASS", "{$db_pass}");
  40. \$db = new DB();
  41. ?>
  42. HTML;
  43.  
  44.             $con_file = fopen("atm_admin/data/dbconfig.php", "w+") or die ("Извините, но невозможно создать файл <b>.atm_admin/data/dbconfig.php</b>.<br />Проверьте правильность проставленного CHMOD!");
  45.             fwrite($con_file, $dbconfig);
  46.             fclose($con_file);
  47.             @chmod("atm_admin/data/dbconfig.php", 0666);
  48.    
  49.             /* Создаём файл настроек ATM-CMS */
  50.             $conf = fopen("atm_admin/atm_config.php","w+") or die ("Невозможно создать файл <b>.atm_admin/atm_config.php</b>.<br />Проверьте правильность проставленного CHMOD!");
  51.             $data = "Дата установки: "."date('Y-m-d H:i:s')\n\r";
  52.             fwrite($conf, $data);
  53.             @chmod("atm_admin/atm_config.php", 0666);
  54.             fclose($conf);
  55.    
  56.             /* Создаем таблицы в БД */
  57.             $sql = array();
  58.             $sql[] = "CREATE TABLE IF NOT EXISTS `atm_config` (
  59.                    `id` int(11) NOT NULL AUTO_INCREMENT,
  60.                    `template` varchar(50) NOT NULL,
  61.                    PRIMARY KEY (`id`)
  62.                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  63.    
  64.                    INSERT INTO `atm_config` VALUES (NULL, 'default');";
  65.    
  66.             include ADMIN_DIR."/classes/mysqli.class.php";
  67.             include ADMIN_DIR."/data/dbconfig.php";
  68.    
  69.             foreach($sql as $table){
  70.                 $db->query($table);
  71.             }
  72.    
  73.             /* Отправка email */
  74.             $from = 'atm87@mail.ru';
  75.             $subject = 'Установлена ATM-CMS';
  76.             $message = 'Была установлена ATM-CMS. E-mail пользователя: '.$db_email;
  77.             mail($db_email, $subject, $message, 'From: '.$from);
  78.    
  79.             header('Location: index.php');
  80.         }else{
  81.             $message_error .= $msg["db_pass_confirm"];
  82.         }
  83.     }else{
  84.         $message_error .= $msg["error_input"];
  85.     }
  86. }
  87. ?>
  88. <!doctype html>
  89. <html>
  90. <head>
  91. <title>Установка ATM-CMS</title>
  92. <link rel='stylesheet' type='text/css' href='atm_admin/css/style.css' />
  93. </head>
  94. <body>
  95. <table class="atm_install_form">
  96.     <tr>
  97.         <td>
  98.         <center>
  99.             <h1>Установка ATM-CMS</h1>
  100.             Введите информацию для подключения к базе данных. <a href="">Инструкция для установки.</a><br />            <?PHP echo($message_error != '') ? "<h2>".$message_error."</h2>" : ''; ?>
  101.             <form action='atm_install.php' method='post'>
  102.                 Имя базы данных (не более 20 символов):                <input type='text' name='db_name' maxlength="55" value="<?PHP echo @$db_name; ?>" /><br />                Имя пользователя (не более 20 символов):                <input type='text' name='db_user' maxlength="55" value="<?PHP echo @$db_user; ?>" /><br />                E-mail (не более 20 символов):                <input type='text' name='db_email' maxlength="55" value="<?PHP echo @$db_email; ?>" /><br />                Пароль (не более 20 символов):                <input type='password' name='db_pass' maxlength="55" /><br />                Подтверждение пароля:                <input type='password' name='db_pass_confirm' maxlength="55" /><br />                Сервер базы данных (не более 20 символов):                <input type='text' name='db_host' maxlength="55" value="<?PHP echo @$db_host; ?>" /><br />                <input type='submit' value='Отправить' name='submit_install_cms' class="input" />            </form>
  103.         </center>
  104.         </td>
  105.     </tr>
  106. </table>
  107. </body>
  108. </html>


mysqli.class.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class DB{
  3.     function connect($db_host, $db_user, $db_pass, $db_name){
  4.         $connect = @mysqli_connect($db_host, $db_user, $db_pass, $db_name);
  5.         if ($connect){
  6.             return $connect;
  7.         }
  8.     }
  9. }
  10. ?>
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB