Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443

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

08.02.2018, 18:44. Показов 582. Ответов 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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru