21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443

Не могу загрузить данные в БД

08.02.2018, 18:44. Показов 621. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, я начинающий PHP программист прошу у Вас помощи.
Есть форма которая принимает логин и пароль, я его обрабатываю , все работает хорошо, но при попытке через дочерний класс добавить данные в БД, у меня вызывается ошибка,
tal error: Uncaught Error: Call to a member function prepare() on null
Проверял функцию mysqli prepare(), но все же не смог понять.
Пожалуйста, подскажите мне где здесь ошибка?

index.php в котором создаются объекты, а также дочерний класс от родительского user

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html>
<html>
<head>
    <title>Работа с PHP ООП</title>
</head>
<body>
<center>
<fieldset>
    <legend>Регистрация</legend>
 
    <?php
    include('index2.php');
    include('user.php');
 
 
 
    class user_db extends user{
        PUBLIC $table = 'user';
        PUBLIC function insert_user() {
            $res = $this->mysqli->prepare("INSERT INTO {$this->table} (login,pass) VALUES (?,?)");
            $res->bind_param('ss',$this->par1,$this->par2);
            !($res->execute()) ? : header("location: ".$_SERVER['PHP_SELF']);
        }
    }
 
 
    
    if(isset($_POST['sub'])) {
        $user = new user($_POST['login'],$_POST['pass']);
        $prov = $user->prov_str();
        if(is_array($prov) && !empty($prov)) {
            $user_db = new user_db($_POST['login'],$_POST['pass']);
            echo $user_db->insert_user();
        } else {
            echo 'Пожалуйста, заполните поля<br/>';
        }
 
    }
    ?>
    <form action=<?php echo $_SERVER['PHP_SELF']; ?> method="post">
    <p>Логин<br/>
        <input type="text" name="login"/>
    </p>
    <p>Пароль<br/>
        <input type="password" name="pass"/>
    </p>
    <p>
        <input type="submit" name="sub" value="Войти"/>
    </p>
</form>
<a href="index2.php">Регистрация</a>
</fieldset>
</center>
</body>
</html>
user.php которая обрабатывает поля
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
class user{
    PROTECTED $par1, $par2;
    PUBLIC $str = array('?',';','"','^','%','$','#','*','>','<');
 
    PUBLIC function __construct($var1,$var2) {
        $this->par1 = self::prov_said($var1);
        $this->par2 = self::prov_said($var2);
    }
 
    PUBLIC function prov_said($var) {
        return str_replace($this->str,'',strip_tags(trim(filter_var($var,FILTER_SANITIZE_STRING))));
    }
 
    PUBLIC function prov_str() {
        return (empty($this->par1) || empty($this->par2)) ? false : array('login'=>$this->par1,'pass'=>$this->par2);
    }
}
?>
index2.php соединение с БД
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
define('HOST','localhost');
define('USER','user');
define('PASS','12345');
define('BASE','bd1');
 
class connect {
    PUBLIC $mysqli;
    public function __construct($h,$u,$p,$d) {
        $this->mysqli = new mysqli($h,$u,$p,$d);
        ($this->mysqli)?:die('Ошибка подключения<br/>');
        return $this->mysqli;
    }
}
$connect = new connect(HOST,USER,PASS,BASE);
 
?>
Думал ошибка в свойстве mysqli , потом поставил спецификатор доступа PUBLIC тоже самая ошибка(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2018, 18:44
Ответы с готовыми решениями:

Разработка приложения "Столбчатая диаграмма": заполнить данные DataGridView загрузить данные в программу
Пожалуйста, мне нужно заполнить данные DataGridView для диаграммы и загрузить данные в диаграмму.

Загрузить данные
Смотрите! Хочу, чтоб при загрузке программы загружались данные из файла, что приходит по почте &quot;Аналитика&quot;... Чтоб брались...

Не могу загрузить XP
всем привет при загрузке внизу пишет MBR Error 1 Press any key to boot floppy и дальше не грузится на f8 не реагирует беда в том что нет...

7
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
08.02.2018, 18:54
Цитата Сообщение от maxoun Посмотреть сообщение
$this->mysqli->prepare
А откуда у этого класса взялось свойство mysqli?
0
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
08.02.2018, 18:58  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
А откуда у этого класса взялось свойство mysqli?
В классе connect где соединение с БД index2.php ,
PUBLIC $mysqli;
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
08.02.2018, 19:04
Цитата Сообщение от maxoun Посмотреть сообщение
class user
PHP
1
class user extends connect
0
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
08.02.2018, 19:08  [ТС]
Цитата Сообщение от ytf Посмотреть сообщение
1
class user extends connect
Скажите пожалуйста спецификатор доступа PUBLIC как я читал доступен по всему скрипту, почему в моем случае я должен наследовать класс connect? Объясните пожалуйста)
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
08.02.2018, 19:15
Цитата Сообщение от maxoun Посмотреть сообщение
В классе connect где соединение с БД index2.php ,
А причём тут класс connect? Он не имеет никакого отношения к классам user и user_db.
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
08.02.2018, 19:48
Цитата Сообщение от maxoun Посмотреть сообщение
спецификатор доступа PUBLIC как я читал доступен по всему скрипту
нет, свойства класса объявлены внутри класса и обращаться к ним можно только внутри класса
0
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
09.02.2018, 16:34  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
А причём тут класс connect? Он не имеет никакого отношения к классам user и user_db.
В нем хранится дескриптор подключения, я использую MySQLi мне он нужен для дальнейших оперций.

Добавлено через 4 минуты
Цитата Сообщение от ytf Посмотреть сообщение
нет, свойства класса объявлены внутри класса и обращаться к ним можно только внутри класса
Я решил проблему).
Я унаследовал connect, и спокойно использовал дескриптор подключения, а при выводе, передаваемых параметров я поставил массив, который я получал от класса user, где все параметры и фильтруются, а вместо передаваемых параметров я использую уже готовый массив.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
include 'index2.php';
class User{
     PUBLIC $str = array('>','<','&','^','"',"'",'%',';');
     PROTECTED $par1;
     PROTECTED $par2;
 
     PUBLIC function __construct($var1,$var2) {
        $this->par1 = self::funct1($var1);
        $this->par2 = self::funct1($var2);
     }
 
     PUBLIC function funct1($var) {
        return str_replace($this->str,'',strip_tags(trim(filter_var($var,FILTER_SANITIZE_STRING))));
     }
 
     PUBLIC function funct2() {
        return (empty($this->par1) || empty($this->par2)) ? false : array('param1' => $this->par1,'param2' => $this->par2);
     }
 
}
 
 
    class s2 extends connect {
        PUBLIC function insert_s($var1,$var2,$table) {
            $sql = "INSERT INTO ".$table." (login,pass) VALUES (?,?)";
            $res = $this->link->prepare($sql);
            $res->bind_param('ss',$var1,$var2);
            ($res->execute()) ? header('location: '.$_SERVER['PHP_SELF']) : die('Ошибка при добавлении данных<br/>');
       }
 
       PUBLIC function close_link() {
             return $this->link = close();
           }
    }
И ВОТ ИТОГ
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
include 'user.php';
 
 
 
    if(isset($_POST['sub'])) {
 
        $user = new User($_POST['login'],$_POST['pass']);
        $f2 = $user->funct2();
 
        if(is_array($f2) && !empty($f2)) {
            $s2 = new s2(HOST,USER,PASS,DB);
            $2->insert_s($f2['param1'],$f2['param2'],'user');
            $s2->close_link();
        } else {
            echo 'Пожалуйста, заполните все поля<br/>';
        }
 
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2018, 16:34
Помогаю со студенческими работами здесь

Не могу загрузить ОС!!!!!
Чипе помогите плиз кто может.Вобщем имеется сервак.На нем стоит соболь.Таблетку потеряли а пароль не помним.Короче снял я соболь ,но сервак...

Загрузить данные в таблицу
Как подобным методом загрузить данные в таблицу, но при этом название таблицы мы берем из TextBox? ...

Загрузить данные в структуру
Добрый день!!! Очень нужна помощь!Помогите пожалуйста! Надо загрузить данные в структуру,данные в eсxel в виде таблицы Постоянно выдаёт...

Асинхронно загрузить данные
Есть личный кабинет, при входе отображается имя пользователя и в скобочках его балас(считается в 1с) Как сделать чтобы баланс загружался...

Загрузить данные из БД по Ajax
Не понимаю, почему не загружаются данные по клику на .referal1. Код Ajax запроса Jquery ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru