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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
atm87
Отправлено: 05 Января, 2013 - 08:32:59
Post Id


Новичок


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


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




Здравствуйте! Существует база данных: "atm-cms". Есть 2 файла:
1. Файл с формой отправки данных пользователя. (atm_install.php)
2. Файл - обработчик. (dataprocessing.php)
Пользователь вводит в форму данные для подключения к БД (). Нажимает отправить. Браузер ошибок не выдаёт, якобы всё нормально, но в БД таблица atm_admin не создаётся. Вопрос: почему?

Файл atm_install.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Content-type: text/html; charset=utf-8");
  3. require_once($_SERVER['DOCUMENT_ROOT'].'/atm_admin/library/dataprocessing.php');
  4.  
  5. /* Если нажата кнопка отправить */
  6. if(isset($_POST['submit_install_cms'])){
  7.     if(!preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $_POST['db_name'])){
  8.         $db_name = $_POST['db_name'];
  9.     }else{
  10.         $msg .= "Не верно введено название базы данных.\n\r";
  11.         return false;
  12.     }
  13.     $db_user = trim(stripslashes($_POST['db_user']));
  14.     if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['db_mail'])){
  15.         $msg .= "Не верно введён e-mail.\n\r";
  16.         return false;
  17.     }else{
  18.         $db_email = $_POST['db_mail'];
  19.     }
  20.     $db_pass = trim(stripslashes($_POST['db_pass']));
  21.     $db_pass_confirm = trim(stripslashes($_POST['db_pass_confirm']));
  22.     $db_host = trim(stripslashes($_POST['db_host']));
  23.  
  24.     if($db_name != "" && $db_user != "" && $db_pass != "" && $db_pass_confirm != "" && $db_host != ""){
  25.         if($db_pass == $db_pass_confirm){
  26.             /* Соединяемся с базой. В ней создаём таблицу */
  27.             $conn = connectDB($db_host, $db_user, $db_pass, $db_name);
  28.                 $sql = "CREATE TABLE IF NOT EXISTS `atm_admin` (
  29.                        `id` int(11) NOT NULL AUTO_INCREMENT,
  30.                        `db_name` varchar(50) NOT NULL,
  31.                        `db_user` varchar(50) NOT NULL,
  32.                        `db_pass` varchar(50) NOT NULL,
  33.                        `db_host` varchar(50) NOT NULL,
  34.                        PRIMARY KEY (`id`)
  35.                        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  36.  
  37.                        INSERT INTO `atm_admin` (`id`, `db_name`, `db_user`, `db_pass`, `db_host`) VALUES
  38.                        (1, $db_name, $db_user, $db_pass, $db_host);";
  39.                 if(mysqli_query($conn, $sql)){
  40.                     $msg .= "Таблица atm_admin успешно создана.\n\r";
  41.                 }
  42.                 mysqli_close($conn);
  43.    
  44.             /* Создаём файл настроек ATM-CMS */
  45.             $fp = fopen("atm_admin/atm_config.php","a") or die ("Невозможно создать файл <b>.atm_admin/atm_config.php</b>.<br />Проверьте правильность проставленного CHMOD!");
  46.             $date_install = "Дата установки: ".date("Y-m-d H:i:s");
  47.             /* записываем дату установки ATM-CMS */
  48.             fwrite($fp, $date_install) or die ('Не удалось записать данные в файл atm_config.');
  49.             @chmod("atm_admin/atm_config.php", 0666);
  50.             fclose($fp);
  51.  
  52.             /* Отправка email */
  53.             $from = 'atm87@mail.ru';
  54.             $subject = 'Установлена ATM-CMS';
  55.             $message = 'Была установлена ATM-CMS. E-mail пользователя: '.$db_mail;
  56.             mail($db_mail, $subject, $message, 'From: '.$from);
  57.  
  58.             header('Location: index.php');
  59.         }else{
  60.             $msg .= "Пароли не совпадают.\n\r";
  61.         }
  62.     }else{
  63.         $msg .= "Заполнены не все поля.\n\r";
  64.     }
  65. }
  66. ?>
  67. <!doctype html>
  68. <html>
  69. <head>
  70. <title>Установка ATM-CMS</title>
  71. <link rel='stylesheet' type='text/css' href='../atm_admin/css/style.css' />
  72. </head>
  73. <body>
  74. <table class="atm_install_form">
  75.     <tr>
  76.         <td>
  77.         <center>
  78.             <h1>Установка ATM-CMS</h1>
  79.             <strong>Введите информацию для подключения к базе данных. <a href="">Инструкция по установке.</a></strong><br />            <?PHP if(isset($msg)){ echo "<center><h2>".$msg."</h2></center><br />"; } ?>
  80.             <form action='atm_install.php' method='post'>
  81.                 Имя базы данных (не более 20 символов):                <input type='text' name='db_name' maxlength="55" /><br />                Имя пользователя (не более 20 символов):                <input type='text' name='db_user' maxlength="55" /><br />                E-mail (не более 20 символов):                <input type='text' name='db_mail' maxlength="55" /><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" /><br />                <input type='submit' value='Отправить' name='submit_install_cms' class="input" />            </form>
  82.         </center>
  83.         </td>
  84.     </tr>
  85. </table>
  86. </body>
  87. </html>


Файл dataprocessing.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /* подключение к БД */
  3. function connectDB(){
  4.     $connect = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
  5.     if (!$connect){
  6.         return $msg_error .= "Невозможно подключиться к базе данных.\n\r";
  7.     }else{
  8.         return $connect;
  9.     }
  10. }
  11.  
  12. function clearData($data){
  13.     $data = substr(htmlspecialchars(trim($data)), 0, 20);
  14.     return addslashes($data);
  15. }
  16.  
  17. /* проверка на вредоносные символы */
  18. function checkUserData($var){
  19.     $res = htmlspecialchars($var, ENT_QUOTES);
  20.     return addslashes($res);
  21. }
  22.  
  23. function checkUserNumber($number){
  24.     $patt = '[[:alpha:]]|[[:punct:]]|[[:cntrl:]]|[[:space:]]';
  25.     $replace = '';
  26.     return @ ereg_replace($patt, $replace, $number);
  27. }
  28.  
  29. /* поиск логина в базе данных */
  30. function findLogin($login){
  31.     $conn = connectDB();
  32.     $result = mysqli_query("SELECT user_id FROM users WHERE user_login = '$login'");
  33.     $colich_result = mysqli_num_rows($result);
  34.     return $colich_result;
  35. }
  36.  
  37. /* поиск email'a в базе данных */
  38. function findEmail($email){
  39.     $conn = connectDB();
  40.     $result = mysqli_query("SELECT user_id FROM users WHERE user_email = '$email'");
  41.     $colich_result = mysqli_num_rows($result);
  42.     return $colich_result;
  43. }
  44. ?>
 
 Top
alnik-75
Отправлено: 05 Января, 2013 - 08:41:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


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




не изучал весь код, только пробежался глазами по нему и увидел, что в обработчике используется неправильный синтаксис mysqli_query
 
 Top
atm87
Отправлено: 05 Января, 2013 - 10:55:53
Post Id


Новичок


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


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




Блин.., а мне не видно, где подвох?
 
 Top
alnik-75
Отправлено: 05 Января, 2013 - 11:01:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $conn = connectDB();
  3. $result = mysqli_query("SELECT user_id FROM users WHERE user_login = '$login'");
  4.  

а нужно:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $conn = connectDB();
  4. $result = mysqli_query($conn,"SELECT user_id FROM users WHERE user_login = '$login'");
  5.  
 
 Top
atm87
Отправлено: 05 Января, 2013 - 13:22:44
Post Id


Новичок


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


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




Это - то понятно, но я эти функции даже не вызываю. В файле dataprocessing.php вызывается только одна функция connectDB(); Т.е. эту функцию вызывает страница atm_install.php
На остальные же функции можно пока не обращать внимания, т.к. пока они не учавствуют в разработке - всего лишь наброски.
 
 Top
keltstr
Отправлено: 05 Января, 2013 - 14:00:32
Post Id


Новичок


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


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




включите отображение всех ошибок
display_errors = On
error_reporting = E_ALL

проверьте права пользователя БД

Отлавливайте результаты возвращаемые функциями mysqli
и вызываются ли они вообще
 
 Top
alnik-75
Отправлено: 05 Января, 2013 - 14:11:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


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




А пути до обработчика правильно прописаны ?

(Отредактировано автором: 05 Января, 2013 - 14:11:38)

 
 Top
keltstr
Отправлено: 05 Января, 2013 - 14:22:46
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1. $filename=$_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'atm_admin'.DIRECTORY_SEPARATOR.'library'.DIRECTORY_SEPARATOR.'dataprocessing.php';
  2.  
  3. if (file_exists($filename)) { //если путь к файлу правильный и файл существует
  4.     require_once($filename); //подключаем код из файла
  5. } else { //если файла не существует
  6.     die( "Путь к файлу указан не верно. $filename");//останавливаем скрипт и выдаем сообщение об ошибке
  7. }

(Отредактировано автором: 05 Января, 2013 - 14:23:22)

 
 Top
atm87
Отправлено: 05 Января, 2013 - 14:54:06
Post Id


Новичок


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


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




Жееееесть!!! Таблица создалась, оказывается, нужно вместо mysqli_query использовать mysqli_multi_query Сейчас страница выглядит так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Content-type: text/html; charset=utf-8");
  3. require_once($_SERVER['DOCUMENT_ROOT'].'/atm_admin/library/dataprocessing.php');
  4.  
  5. /* Если нажата кнопка отправить */
  6. if(isset($_POST['submit_install_cms'])){
  7.     if(!preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $_POST['db_name'])){
  8.         $db_name = $_POST['db_name'];
  9.     }else{
  10.         $msg .= "Не верно введено название базы данных.\n\r";
  11.         return false;
  12.     }
  13.     $db_user = trim(stripslashes($_POST['db_user']));
  14.     if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['db_mail'])){
  15.         $msg .= "Не верно введён e-mail.\n\r";
  16.         return false;
  17.     }else{
  18.         $db_email = $_POST['db_mail'];
  19.     }
  20.     $db_pass = trim(stripslashes($_POST['db_pass']));
  21.     $db_pass_confirm = trim(stripslashes($_POST['db_pass_confirm']));
  22.     $db_host = trim(stripslashes($_POST['db_host']));
  23.  
  24.     if($db_name != "" && $db_user != "" && $db_pass != "" && $db_pass_confirm != "" && $db_host != ""){
  25.         if($db_pass == $db_pass_confirm){
  26.             /* Соединяемся с базой. В ней создаём таблицу */
  27.             $conn = connectDB($db_host, $db_user, $db_pass, $db_name);
  28.                 $sql = "CREATE TABLE IF NOT EXISTS `atm_admin` (
  29.                        `id` int(11) NOT NULL AUTO_INCREMENT,
  30.                        `db_name` varchar(50) NOT NULL,
  31.                        `db_user` varchar(50) NOT NULL,
  32.                        `db_pass` varchar(50) NOT NULL,
  33.                        `db_host` varchar(50) NOT NULL,
  34.                        PRIMARY KEY (`id`)
  35.                        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  36.  
  37.                        INSERT INTO `atm_admin` (`id`, `db_name`, `db_user`, `db_pass`, `db_host`) VALUES
  38.                        (NULL, '$db_name', '$db_user', '$db_pass', '$db_host');";
  39.                 if(mysqli_multi_query($conn, $sql)){
  40.                     $msg .= "Таблица atm_admin успешно создана.\n\r";
  41.                 }else echo mysqli_error($conn);
  42.                 mysqli_close($conn);
  43.    
  44.             /* Создаём файл настроек ATM-CMS */
  45.             $fp = fopen("atm_admin/atm_config.php","a") or die ("Невозможно создать файл <b>.atm_admin/atm_config.php</b>.<br />Проверьте правильность проставленного CHMOD!");
  46.             $date_install = "Дата установки: ".date("Y-m-d H:i:s");
  47.             /* записываем дату установки ATM-CMS */
  48.             fwrite($fp, $date_install) or die ('Не удалось записать данные в файл atm_config.');
  49.             @chmod("atm_admin/atm_config.php", 0666);
  50.             fclose($fp);
  51.  
  52.             /* Отправка email */
  53.             $from = 'atm87@mail.ru';
  54.             $subject = 'Установлена ATM-CMS';
  55.             $message = 'Была установлена ATM-CMS. E-mail пользователя: '.$db_mail;
  56.             mail($db_mail, $subject, $message, 'From: '.$from);
  57.  
  58.             header('Location: index.php');
  59.         }else{
  60.             $msg .= "Пароли не совпадают.\n\r";
  61.         }
  62.     }else{
  63.         $msg .= "Заполнены не все поля.\n\r";
  64.     }
  65. }
  66. ?>
  67. <!doctype html>
  68. <html>
  69. <head>
  70. <title>Установка ATM-CMS</title>
  71. <link rel='stylesheet' type='text/css' href='../atm_admin/css/style.css' />
  72. </head>
  73. <body>
  74. <table class="atm_install_form">
  75.     <tr>
  76.         <td>
  77.         <center>
  78.             <h1>Установка ATM-CMS</h1>
  79.             <strong>Введите информацию для подключения к базе данных. <a href="">Инструкция по установке.</a></strong><br />            <?PHP if(isset($msg)){ echo "<center><h2>".$msg."</h2></center><br />"; } ?>
  80.             <form action='atm_install.php' method='post'>
  81.                 Имя базы данных (не более 20 символов):                <input type='text' name='db_name' maxlength="55" /><br />                Имя пользователя (не более 20 символов):                <input type='text' name='db_user' maxlength="55" /><br />                E-mail (не более 20 символов):                <input type='text' name='db_mail' maxlength="55" /><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" /><br />                <input type='submit' value='Отправить' name='submit_install_cms' class="input" />            </form>
  82.         </center>
  83.         </td>
  84.     </tr>
  85. </table>
  86. </body>
  87. </html>

(Отредактировано автором: 05 Января, 2013 - 15:01:45)

 
 Top
esterio
Отправлено: 05 Января, 2013 - 16:19:53
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




atm87 пишет:
Жееееесть!!! Таблица создалась, оказывается, нужно вместо mysqli_query использовать mysqli_multi_query Сейчас страница выглядит так:

Почему жесть, Вы ж сами написали 2 запроса в строке!
PHP:
скопировать код в буфер обмена
  1. $sql = "CREATE TABLE IF NOT EXISTS `atm_admin` (
  2.                       `id` int(11) NOT NULL AUTO_INCREMENT,
  3.                       `db_name` varchar(50) NOT NULL,
  4.                       `db_user` varchar(50) NOT NULL,
  5.                       `db_pass` varchar(50) NOT NULL,
  6.                       `db_host` varchar(50) NOT NULL,
  7.                       PRIMARY KEY (`id`)
  8.                       ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  9.  
  10.                       INSERT INTO `atm_admin` (`id`, `db_name`, `db_user`, `db_pass`, `db_host`) VALUES
  11.                       (NULL, '$db_name', '$db_user', '$db_pass', '$db_host');";
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB