29.12.2018 / 17:31 | |
aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| wRadchuk, ой, у тебя тут несколько проблем. 1. mysql_query. Это настолько устаревший модуль, что в 2к18 упоминаний о нём не должно быть, не говоря уж об использовании. Есть mysqli, есть PDO. Пока не поздно, переходи на них. 2. Проблема с sql в целом. SELECT * FROM users WHERE login=wRadchuk
-- невалидный запрос. Если ты ищешь текст, то он в кавычках должен быть. Правильно так: SELECT * FROM users WHERE login="wRadchuk"
3. Тут же проблема с безопасностью. Если вместо логина подставить $request[2] = "1 ; DROP TABLE users", тебе будет очень весело. Почитай, что такое SQL инъекция. Для её предотвращения служат функции экранирования, в PDO это quote. __________________
let live |
29.12.2018 / 18:24 | |
wRadchuk Пользователь Сейчас: Offline
Имя: Владимир Откуда: Метрополис Регистрация: 24.06.2014
| aNNiMON, спасибо, я на PHP с 2014 не писал. На счет PDO и mysqli слышал и в дальнейшем буду использовать. За кавычки спасибо, знаю что так можно запустить sql инъекцию, писал так для теста.
|
29.12.2018 / 19:10 | |
wRadchuk Пользователь Сейчас: Offline
Имя: Владимир Откуда: Метрополис Регистрация: 24.06.2014
| Пробую через PDO сделать запрос и столкнулся с проблемой. Вот код. $sql = 'SELECT id,login,password FROM users WHERE id='.$request[3].'';
# создаем запрос
$STH = $DBH->query($sql);
# выбираем режим выборки
$STH->setFetchMode(PDO::FETCH_OBJ);
# выводим результат
while($row = $STH->fetch())
{
echo $row->id . "\n";
echo $row->login . "\n";
echo $row->password . "\n";
}
Как передавать в запрос параметры? не работает из-за этого WHERE id='.$request[3].'';
Так работает |
29.12.2018 / 20:12 | |
aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| wRadchuk, посмотри, что тебе в $request[3] приходит. Или выведи для себя содержимое sql-запроса, а потом посмотри, работает ли он в phpmyadmin. Ну и лучше prepared statement использовать, иначе опять дыры будут. $stmt = $DBH->prepare('SELECT id, login, password FROM users WHERE id = ?');
$stmt->execute([$request[3]]);
$stmt->setFetchMode(PDO::FETCH_OBJ);
while($row = $stmt->fetch()) {
// ...
}
__________________
let live |
30.12.2018 / 03:08 | |
wRadchuk Пользователь Сейчас: Offline
Имя: Владимир Откуда: Метрополис Регистрация: 24.06.2014
| Дико извиняюсь, но я опять в тупике. В результате выполнения ловлю ответ сервера 500. <?php
require_once('core/db.php'); // Коннект к базе
require_once('core/utils.php'); // Различные функции типа wEscapeDecode($text)
// Константы ошибок.
define(COMMAND_DOES_NOT_EXIST, 'Команда не существует');
define(DOES_NOT_HAVE_PARAMETERS, 'Не имеет параметров');
$request = explode("/", $_SERVER['REQUEST_URI']); // Наш запрос
$responce = array(); // Готовим место под ответ.
// Функция для реализации любого типа выборки данных
// $_my_prepare - запрос на выборку чего либо из базы
// $_my_array - набор данных, которые мы будем вставлять в выборку
// на выходе получаем JSON, если у нас есть доступ для данной выборке
function dataSelection($_my_prepare, $_my_array)
{
$request = explode("/", $_SERVER['REQUEST_URI']); // Наш запрос
$my_size = count($request)-2; // Узнаём наличие параметров
// отнимаем от размера $request[1] = user_ssid и команду = $request[2].
if($my_size>=0)
{
// команда на выборку данных
try {
$STH = $DBH->prepare($_my_prepare);
$STH->execute($_my_array);
$row = $STH->fetchAll(PDO::FETCH_ASSOC);
$responce[] = $row;
echo wEscapeDecode(json_encode($responce));
}catch(PDOException $e) {
echo "Хьюстон, у нас проблемы.";
file_put_contents('PDOErrors.txt', $e->getMessage().'\n', FILE_APPEND);
}
}
else // Если не имеет параметров то отработает данный блок
echo wEscapeDecode(json_encode(DOES_NOT_HAVE_PARAMETERS));
}
switch($request[2])
{
case 'getUserInfo':
$my_prepare = 'SELECT * FROM users WHERE id=:id';
$my_array = array('id' => $request[3]);
dataSelection($my_prepare, $my_array);
break;
// Если команда не существует
default:echo wEscapeDecode(json_encode(COMMAND_DOES_NOT_EXIST));
}
?>
P.S. Все данные в массиве $request[] верны. В чем может быть проблема? З.Ы. Если была бы ошибка, то решил бы, а я вижу лишь это: HTTP ERROR 500 Изменено wRadchuk (30.12 / 03:13) (всего 1 раз) |
30.12.2018 / 10:56 | |
aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| wRadchuk, ini_set('display_errors', 1);
error_reporting(E_ALL);
Это включит отображение ошибок. __________________
let live |
30.12.2018 / 21:37 | |
wRadchuk Пользователь Сейчас: Offline
Имя: Владимир Откуда: Метрополис Регистрация: 24.06.2014
| aNNiMON, спасибо. Ошибка была в объекте PDO. Пришлось всю инициализацию работы с БД перенести в функцию реализующую запрос. С PDO работать оказалось куда труднее чем я представлял.
|
20.02.2019 / 11:44 | |
miha Пользователь Сейчас: Offline
Регистрация: 14.01.2010
| Как можно реализовать такую конструкцию? Выглядит так: на странице два текстовых поля и форма выбора файла для загрузки на сервер. Надо чтобы загружать можно было только картинки и чтобы название картинки в итоге состояло из значений этих двух текстовых полей. Например, в первое поле написал text1, во второе word1, в итоге картинка загрузилась и название будет text1_word1.png.
|
20.02.2019 / 12:41 | |
HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| miha, В чём именно проблема?
__________________
Да, детка, я - Король Ящериц!!! |
20.02.2019 / 16:39 | |
miha Пользователь Сейчас: Offline
Регистрация: 14.01.2010
| Ни в чем, сам разобрался.
|