Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/76: Рейтинг темы: голосов - 76, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 8
1

Запрос к БД mysqli_query()

29.06.2016, 10:22. Показов 14705. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Изучаю PHP.
Пишу простой скрипт авторизации.
Столкнулся с проблемой при выборе ячейки таблицы
PHP
1
2
3
4
5
6
7
8
9
10
<?
$connect = mysqli_connect('localhost', 'root', '');
$nik="user";
$pass="pasword";
$submit=$_REQUEST['submit'];
if($submit){
    $nik=$_REQUEST['nik'];
    $pass=$_REQUEST['pass'];
$result = mysqli_query( $connect,"SELECT name FROM `user2`WHERE nik=$nik");
?>
В $result ничего не записывается если `WHERE nik=$nik заменить на `WHERE nik='user', всё работает
Подскажите в чём может быть проблема в переменной $nik записана нужная строка
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2016, 10:22
Ответы с готовыми решениями:

Запрос рабочий но mysqli_query выдает ошибку Warning: mysqli_query(): Couldn't fetch mysqli in [Мой_Файл]
Фой код генерирует запрос INSERT INTO `users`(`login`, `email`, `password`, `lname`, `fname`,...

Запрос mysqli_query
Нужно с помощью запроса mysqli_query добавить в базу строку &lt;img src=&quot;переменная&quot;&gt;.Как правильно...

Mysqli_query не отправляет запрос
Здравствуйте, нужна помощь с кодом. Есть форма с вводом переменных и их валидацией. После проверки...

Запрос mysqli_query - при попытке отправить данные ничего не происходит
Здравствуйте, мне нужно создать форму регистрации которая будет отправлять данные на MySQL сервер,...

12
4 / 4 / 3
Регистрация: 01.04.2016
Сообщений: 136
29.06.2016, 10:35 2
Точно не знаю, но, предполагаю, дело в следующем:

-функция mysqli_connect требует 4 параметра, из которых указано 3. Четвертый параметр - название БД:

PHP
1
$connect = mysqli_connect('localhost', 'root', '', 'имя_базы_данных');
Именно из-за этого (не указано имя БД) в $result ничего не выводится.

P.S. - недочет: не рекомендуется вставлять апострофы в запросе - нужно их убрать ('user2' заменить на user2):
PHP
1
$result = mysqli_query( $connect,"SELECT name FROM user2 WHERE nik=$nik");
Думаю, это еще одна причина.
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
29.06.2016, 11:05 3
Строки в SQL-запросах нужно обрамлять кавычками:
PHP
1
mysqli_query( $connect,"SELECT name FROM `user2`WHERE nik = '$nik'");
Добавлено через 1 минуту
Цитата Сообщение от senek Посмотреть сообщение
P.S. - недочет: не рекомендуется вставлять апострофы в запросе - нужно их убрать ('user2' заменить на user2):
Не рекомендуется кем? Апострофы использовать желательно, а в некоторых случаях обязательно (например, если название поля совпадает с названием какой-нибудь функции MySQL).
1
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 8
29.06.2016, 11:18  [ТС] 4
товарищи, читайте вопрос целиком, пожалуйста.
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
29.06.2016, 11:44 5
Green62, прочитал вопрос целиком. Ничего не изменилось. У вас по-прежнему 2 ошибки, делающие скрипт нерабочим.
0
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 8
29.06.2016, 12:53  [ТС] 6
Вопрос в следующем в условии `WHERE если вместо переменной nik=$nik написать nik='user', данные из БД записываются в $result. Если вместо строки использовать переменную возникает ошибка. С переменной проблем нет, в ней записана нужная строка
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
29.06.2016, 13:14 7
Лучший ответ Сообщение было отмечено Green62 как решение

Решение

Цитата Сообщение от Jodah Посмотреть сообщение
Строки в SQL-запросах нужно обрамлять кавычками:
Вам же уже ответили, переменную помещайте в кавычки, WHERE `nik` = '$nik'
1
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 8
29.06.2016, 14:17  [ТС] 8
Спасибо всем, кто откликнулся
0
Web Programmer
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
29.06.2016, 15:39 9
Green62, Держите целиком готовый код.

db.sql
SQL
1
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `users` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(80) NOT NULL,
  `password` VARCHAR(32) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
PHP/HTML
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<?php
 
session_start();
 
define(DB_HOST, 'localhost');
define(DB_USER, 'root');
define(DB_PASS, '');
define(DB_NAME, 'dbname');
 
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
mysqli_query($db, 'SET CHARSET UTF8');
 
$class = 'error';
$title_result = 'Ошибка!';
$message_result = '';
 
if(isset($_POST['btn_login'])) {
    $username = isset($_POST['username']) ? trim($_POST['username']) : '';
    $password = isset($_POST['password']) ? trim($_POST['password']) : '';
    if(empty($username) or empty($password)) $message_result = 'Введите логин и пароль!';
    if(empty($message_result)) {
        $username = mysqli_real_escape_string($db, $username);
        $sql = "SELECT `id`, `password` FROM `users` WHERE `username`='{$username}' LIMIT 1";
        $result = mysqli_fetch_assoc(mysqli_query($db, $sql));
        if(!is_null($result)) {
            if($result['password'] === md5($password)) {
                $_SESSION['id'] = $result['id'];
                header("Location: /");
                exit;
            }else $message_result = 'Неверный логин или пароль!';
        }else $message_result = 'Неверный логин или пароль!';
    }
}
 
if(isset($_POST['btn_reg'])) {
    $username = isset($_POST['username']) ? trim($_POST['username']) : '';
    $password = isset($_POST['password']) ? trim($_POST['password']) : '';
    $r_password = isset($_POST['r_password']) ? trim($_POST['r_password']) : '';
    if(empty($username) or empty($password) or empty($r_password)) $message_result = 'Все поля объязательны для заполнения!';
    if($password !== $r_password) $message_result = 'Пароли не совпадают!';
    if(empty($message_result)) {
        $username = mysqli_real_escape_string($db, $username);
        $sql = "SELECT `id` FROM `users` WHERE `username`='{$username}' LIMIT 1";
        $query = mysqli_query($db, $sql);
        if(mysqli_num_rows($query) > 0) $message_result = 'Пользователь с таким логином занят!';
        else
            if(mysqli_query($db, "INSERT INTO `users`(`username`,`password`) VALUES('{$username}','" . md5($password) . "')")) {
                $class = 'success';
                $title_result = 'Успех';
                $message_result = 'Вы успешно зарегистрировались!';
            }else $message_result = 'Неизвестная ошибка!';
    }
}
 
if(isset($_POST['btn_logout'])) {
    if(isset($_SESSION['id'])) unset($_SESSION['id']);
    header("Location: /");
    exit;
}
 
?>
<!DOCTYPE html>
<html>
<head>
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<style type="text/css">
* {margin: 0;padding: 0;font-family: "Arial", Helvetica, Sans-Serif;}
table {margin: 5px;}
td h1 {font-size: 16px;}
td label {float: right;font-size: 13px;}
td table {padding: 10px;border: 1px solid rgba(200,200,200,1);background-color: rgba(240,240,240,1);}
td button {float: right;margin-top: 10px;padding: 6px;cursor: pointer;}
.error {padding: 6px;color: rgba(200,20,20,1);background-color: rgba(255,230,230,1);}
.error p {color: rgba(200,100,100,1);}
.success {padding: 6px;color: rgba(20,180,20,1);background-color: rgba(230,255,230,1);}
.success p {color: rgba(100,200,100,1);}
.message_result {font-size: 16px;}
.message_result p {font-size: 13px;}
.userinfo {float: left;margin: 1em;padding: 0.5em 1em;background-color: rgba(238,238,238,1);}
</style>
 
</head>
<body>
 
<?php if(isset($_SESSION['id'])) {
 
$sql = "SELECT `username` FROM `users` WHERE `id`='{$_SESSION['id']}' LIMIT 1";
$userdata = mysqli_fetch_assoc(mysqli_query($db, $sql));
echo '<div class="userinfo">
    <div class="username">Привет, ' . $userdata['username'] . '</div>
    <form method="POST">
        <div class="logout">
            <button name="btn_logout">Выход</button>
        </div>
    </form>
</div>';
 
}else{ ?>
<table>
    <?php if(!empty($message_result)) { ?>
    <tr>
        <td colspan="2">
            <div class="message_result <?=$class?>">
                <?=$title_result?>
                <p><?=$message_result?></p>
            </div>
        </td>
    </tr>
    <?php } ?>
    <tr>
        <td valign="top">
            <form method="POST">
            <table>
                <tr>
                    <td colspan="2">
                        <h1>Войти</h1>
                    </td>
                </tr>
                <tr>
                    <td>
                        <label>Логин:</label>
                    </td>
                    <td>
                        <input type="text" name="username" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <label>Пароль:</label>
                    </td>
                    <td>
                        <input type="password" name="password" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <button name="btn_login">Войти</button>
                    </td>
                </tr>
            </table>
            </form>
        </td>
        <td valign="top">
            <form method="POST">
            <table>
                <tr>
                    <td colspan="2">
                        <h1>Регистрация</h1>
                    </td>
                </tr>
                <tr>
                    <td>
                        <label>Логин:</label>
                    </td>
                    <td>
                        <input type="text" name="username" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <label>Пароль:</label>
                    </td>
                    <td>
                        <input type="password" name="password" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <label>Повторить пароль:</label>
                    </td>
                    <td>
                        <input type="password" name="r_password" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <button name="btn_reg">Регистрация</button>
                    </td>
                </tr>
            </table>
            </form>
        </td>
    </tr>
</form>
</table>
<?php } ?>
 
</body>
</html>
1
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 8
29.06.2016, 18:31  [ТС] 10
Спасибо, но готовый код не нужен. Я учусь.
0
Web Programmer
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
29.06.2016, 23:49 11
Green62, Так его можно просто потестить и понять работу, будет более лучше.
0
Software Developer
287 / 247 / 52
Регистрация: 23.09.2014
Сообщений: 823
30.06.2016, 00:21 12
Green62, https://github.com/mvcbox/sql-... /README.md

PHP
1
$rows = qb()->table('user2')->where(['nik' => $nik])->all();
0
79 / 48 / 22
Регистрация: 30.06.2016
Сообщений: 187
30.06.2016, 06:57 13
Данные пришедшие от пользователя нельзя прямиком вставлять в запрос как Вы это делаете в 9 стоке
$result = mysqli_query( $connect,"SELECT name FROM `user2`WHERE nik=$nik");
. Это чревато SQL-инъекцией и какой-нибудь шутник может удалить вам все таблицы или украсть пароли всех пользователей. Чтобы обезопаситься нужно экранировать данные пришедшие из вне специальной функцией. В данном случае т.к. Вы используете mysqli, Вам нужно перед подстановкой переменной $nik в SQL-запрос, обработать ее функцией mysqli_real_escape_string
1
30.06.2016, 06:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2016, 06:57
Помогаю со студенческими работами здесь

Mysqli_query не работает
Добрый день! Есть бд с таблицей `Question` в php написал следующий код: $res =...

Ошибка в mysqli_query
При попытке соединиться к БД SQL Выходит ошибка mysqli_query() expects parameter 1 to be mysqli,...

Ошибка с mysqli_query
У меня в базе данных есть таблица postmini со значением text. $qqqq=mysqli_query($db,...

Ошибка mysqli_query()
КАК ИСПРАВЫТЬ ЕТУ ОШИБКУ&gt; mysqli_query() expects at least 2 parameters, 1 given in...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru