|
|
|
| Я плохо понял, подскажите пожалуйста, когда именно нужно использовать функцию sqlite_escape_string и для каких целей?
И ещё, что нельзя записывать в БД (SQLite) (например, одинарные кавычки, двойные и т.д.)? | |
|
|
|
|
|
|
|
для: as67ji
(12.07.2009 в 19:59)
| | Из мануала следует, что эту функцию создали затем, чтобы в запросах к этой БД можно было применять строки с любыми символами.
Какое место Вы поняли плохо? | |
|
|
|
|
|
|
|
для: Trianon
(12.07.2009 в 20:39)
| | Тоесть, какую бы я не записал информацию, она (информация) не будет опасной? Она работает как htmlspecialchars? Выходит, ей пользоваться всешда перед записью? | |
|
|
|
|
|
|
|
для: As67ji
(12.07.2009 в 21:39)
| | не бывает информация опасной.
Бывают опасными методы её обработки.
Точнее, ошибки в методах обработки приводят к тому, что опасности подвергается исполняемый процесс.
Нет, она работает не как htmlspecialchars.
Собственно, как она работает детально - я не в курсе.
Просто у меня нет оснований не верить мануалу - такие функции не бином Ньютона.
А ващще всегда ей нужно пользоваться не [только] перед записью, а в процессе формирования любой строки, как синтаксического элемента SQLite-запроса. | |
|
|
|
|
|
|
|
для: Trianon
(12.07.2009 в 21:59)
| | >> А ващще всегда ей нужно пользоваться не [только] перед записью, а в процессе формирования любой строки, как синтаксического элемента SQLite-запроса.
Это я и хотел услышать :) Спасибо большое. | |
|
|
|
|
|
|
|
для: as67ji
(12.07.2009 в 19:59)
| | Хм, а почему у меня этот код
<?
$db = sqlite_open("userdb.db");
if (!$db) exit("Не удалось создать базу данных!");
$query_table = sqlite_query($db, "CREATE TABLE user(id INTEGER PRIMARY KEY,
login TEXT,
sex TEXT,
group TEXT,
name TEXT,
info TEXT,
hous TEXT,
contact TEXT,
homepage TEXT,
floor TEXT,
regdate TEXT,
pos TEXT),
style TEXT);
");
if (!$query_table) exit("Невозможно создать таблицу в базе данных!");
?>
|
выдаёт ошибку?
Warning: sqlite_query() [function.sqlite-query]: near "group": syntax error in index.php on line 21
Невозможно создать таблицу в базе данных!
|
| |
|
|
|
|
|
|
|
для: as67ji
(12.07.2009 в 19:59)
| | Если я вместо group напишу gp, то ошибка уже другая:
Warning: sqlite_query() [function.sqlite-query]: near ",": syntax error in index.php on line 21
Невозможно создать таблицу в базе данных!
|
| |
|
|
|
|
|
|
|
для: As67ji
(12.07.2009 в 22:46)
| | group - ключевое слово. Поэтому нельзя.
а что до запятой, то здесь явная ошибка синтаксиса. Смотрите внимательно. В конце запроса. | |
|
|
|
|
|
|
|
для: Trianon
(12.07.2009 в 22:57)
| | Аааа, где она? Я не пойму куда ставить запятую (или убрать). Ибо писал как тут:
$query_table = sqlite_query($db, "CREATE TABLE table1
(id INTEGER PRIMARY KEY,
/* id автоматически станет автоинкрементным */
field1 TEXT,
field2 TEXT);
");
|
(Информационный портал
«SoftTime-INFO») | |
|
|
|
|
автор: . (13.07.2009 в 00:07) |
|
|
для: As67ji
(12.07.2009 в 23:01)
| | Убрать нужно не запятую, а одну лишнюю закрывающую скобку. | |
|
|
|
|
|
|
|
для: Trianon
(12.07.2009 в 22:57)
| | Мне стыдно(((( Не бейте меня))) | |
|
|
|
|
|
|
|
для: as67ji
(12.07.2009 в 19:59)
| |
Warning: sqlite_query() [function.sqlite-query]: unrecognized token: ":" in /home/index.php on line 362
|
Что это за ошибка? | |
|
|
|
|
|
|
|
для: As67ji
(13.07.2009 в 09:36)
| | не видя запроса?
Что-то я не понимаю. Вам просто перевод фразы нужен чтоли? | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 09:51)
| | Ммм, нет, вот:
$query=sqlite_query($db, "INSERT INTO user (login, sex, gp, name, info,
hous, contact, homepage, floor, regdate, pos, style) VALUES ($user[$i], $sex,
$group, $name, $info, $hous, $contact, $homepage, $floor, $regdate, $pos, $style);");
|
| |
|
|
|
|
|
|
|
для: As67ji
(13.07.2009 в 10:30)
| | Это не текст запроса. Это текст оператора php , который этот запрос формирует.
Нужен же текст запроса. Т.е.результат выполнения
echo "INSERT INTO user ...";
[Horisontal scrolling ЛАП off] | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 10:50)
| |
<?php
$db = sqlite_open(DB_CATALOG."/userdb.db");
if (!$db) exit("Не удалось создать/открыть базу данных!");
include 'allusers.php';
for($i=1;$i<=sizeof($user);$i++)
{
include "users/{$user[$i]}.php";
include "setting/{$user[$i]}.php";
$style="body{}";
$query=sqlite_query($db, "INSERT INTO user (login, sex, gp, name, info,
hous, contact, homepage, floor, regdate, pos, style) VALUES ($user[$i], $sex,
$group, $name, $info, $hous, $contact, $homepage, $floor, $regdate, $pos, $style);");
if(!$query) exit('Запись не добавлена!');
}
print 'Успешно!';
?>
|
Вот нужный кусок. Но я ошибку найти не могу. | |
|
|
|
|
|
|
|
для: As67ji
(13.07.2009 в 11:05)
| | и я не могу .
пока Вы его не оформите хотя бы так:
$query="INSERT INTO user (login, sex, gp, name, info, hous, contact, homepage, floor, regdate, pos, style)
VALUES ($user[$i], $sex, $group, $name, $info, $hous, $contact, $homepage, $floor, $regdate, $pos, $style);";
$result = sqlite_query($db, $query);
if(!$result) exit('Запись не добавлена!<br>'. htmlspecialchars($query));
|
| |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 11:16)
| |
Warning: sqlite_query() [function.sqlite-query]: unrecognized token: ":" in /home/index.php on line 35
Запись не добавлена!
INSERT INTO user (login, sex, gp, name, info, hous,
contact, homepage, floor, regdate, pos, style) VALUES (neylon, Мужской, Домовладелец,
Евгений, <font color=red>Администратор этого ресурса.</font>, Волгоград,
ICQ: 2955292<br /> Mail: neylony@gmail.com, site, 1, , , body{background-color:yellow;padding:0px;margin:0px;font-family:Book Antiqua;
background-image: url(img/bg/puff.jpg);}.link{color:firebrick;font-family:Book Antiqua;
text-decoration:none;font-size:14px;}.link:hover{color:firebrick;font-size:14px;
text-decoration:underline;}.text{font-size:14px;padding:0px;margin:0px;
color:black;font-family:Book Antiqua;}.top{font-weight: bold; font-size: 19px;
color: black; font-style: italic; text-align: center;font-family:Book Antiqua;});
|
| |
|
|
|
|
|
|
|
для: As67ji
(13.07.2009 в 11:42)
| | Если Вы до сих пор не видите ошибок в запросе, то мне добавить нечего.
Вообще же складывается впечатление, что (12.07.2009 в 22:09) отвечали не Вы. | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 11:44)
| | Нет, это я отвечал. Просто... Видите ли, до этого (и сейчас) мой сайт работает на файлах. В них всё хранится. БД (например, MySQL) я не использую, причин много. А совсем недавно я наткнулся в книге на раздел про SQLite. Оценив всё что нужно, я понял, что это мне подходит в самый раз... В SQLite (как и в других БД) я, хм, чайник. Поэтому такие вопросы задаю. Trianon, я извиняюсь, что создаю столько неудобств Вам. Но иначе спросить не у кого, а быть на других форумах не хочется. | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 11:44)
| |
<?php
$login=sqlite_escape_string($user[$i]);
$pw=sqlite_escape_string($password);
$sex=sqlite_escape_string($sex);
$group=sqlite_escape_string($group);
$name=sqlite_escape_string($name);
$info=sqlite_escape_string($info);
$hous=sqlite_escape_string($hous);
$contact=sqlite_escape_string($contact);
$homepage=sqlite_escape_string($homepage);
$floor=sqlite_escape_string($floor);
$regdate=sqlite_escape_string($regdate);
$pos=sqlite_escape_string($pos);
$style=sqlite_escape_string($style);
$query="INSERT INTO user (login, pw, sex, gp, name, info,
hous, contact, homepage, floor, regdate, pos, style)
VALUES ($login, $pw, $sex, $group, $name, $info, $hous,
$contact, $homepage, $floor, $regdate, $pos, $style);";
$result = sqlite_query($db, $query);
if(!$result) exit('Запись не добавлена!<br>'. htmlspecialchars($query));
?>
|
Warning: sqlite_query() [function.sqlite-query]: unrecognized token: ":" in /home/index.php on line 51
Запись не добавлена!
INSERT INTO user (login, pw, sex, gp, name, info, hous, contact, homepage, floor,
regdate, pos, style) VALUES (neylon, 7ecd070e6h2h9af07a07c32e7267051f, Мужской,
Домовладелец, Евгений, <font color=red>Администратор этого ресурса.</font>, Волгоград,
ICQ: 2955292<br /> Mail: neylony@gmail.com, http://www..ru/, 1, , ,
body{background-color:yellow;padding:0px;margin:0px;font-family:Book Antiqua;
background-image: url(http://www..ru/img/bg/puff.jpg);}.link{color:firebrick;font-family:Book Antiqua;
text-decoration:none;font-size:14px;}.link:hover{color:firebrick;font-size:14px;
text-decoration:underline;}.text{font-size:14px;padding:0px;margin:0px;color:black;
font-family:Book Antiqua;}.top{font-weight: bold; font-size: 19px;color: black; font-style: italic;
text-align: center;font-family:Book Antiqua;});
|
| |
|
|
|
|
|
|
|
для: As67ji
(13.07.2009 в 12:08)
| | Горе луковое...
$login=sqlite_escape_string($user[$i]); $login = "'$login'";
| и т.д. | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 12:26)
| | Ух ты, а ведь работает!!!!))))
Спасибо!
P.S. Вряд ли это последний вопрос, но я буду стараться... | |
|
|
|
|
|
|
|
для: as67ji
(12.07.2009 в 19:59)
| | После работы скрипта всегда выводится следующий результат:
У вас кнатов (0 галлеонов, 0 сиклей и 0 кнатов).
|
Никаких ошибок нет. Вот сам код:
<?php
require_once('system.php');
top("Главная страница");
$db=@sqlite_open("many.db");
if(!$db)
exit('База данных не доступна, поэтому корректное отображение страницы невозможно.');
$floor=sqlite_escape_string($_COOKIE['floor']);
$query=@sqlite_query($db, "SELECT * FROM many WHERE floor=$floor;");
/*
Если поля не существуем, значит, пользователь только что зарегистрировался.
Его нужно записать в БД для последующего использования:
*/
if(!$query)
{
$floor="'$floor'";
$query_insert=@sqlite_query($db, "INSERT INTO many (floor, knats) VALUES ($floor, 4930);");
if(!$query_insert)
exit('Не удалось записать в БД');
$knats=4930;
}
else
$knats=sqlite_column($query, "knats");
$tmp[1]=$knats/29;
$tmp[1]=floor($tmp[1]);
$tmp[2]=$tmp[1]*29;
$tmp[3]=$knats-$tmp[2];
$tmp[2]=$tmp[1]/17;
$tmp[2]=floor($tmp[2]);
$tmp[4]=$tmp[2]*17;
$tmp[1]=$tmp[1]-$tmp[4];
print "У вас $knats кнатов ({$tmp[2]} галлеонов, {$tmp[1]} сиклей и {$tmp[3]} кнатов).";
down();
?>
|
Насколько я понял,
$knats=sqlite_column($query, "knats");
| возвращает пустое значение (Фрагмент
$tmp[1]=$knats/29;
$tmp[1]=floor($tmp[1]);
$tmp[2]=$tmp[1]*29;
$tmp[3]=$knats-$tmp[2];
$tmp[2]=$tmp[1]/17;
$tmp[2]=floor($tmp[2]);
$tmp[4]=$tmp[2]*17;
$tmp[1]=$tmp[1]-$tmp[4];
| работает правильно) | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 19:45)
| | Мне вот интересно, как Вы дотягиваетесь до кнопки "Ответить"?
Я, например, с трудом. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 19:56)
| | Trianon, не понял... | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 20:00)
| | Что именно? | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:01)
| | Мне вот интересно, как Вы дотягиваетесь до кнопки "Ответить"? | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 20:02)
| | вот именно. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:03)
| | Блин, я не пойму) Вы можете объяснить свой вопрос? | |
|
|
|
|
 29.2 Кб |
|
|
для: As67ji
(17.07.2009 в 20:04)
| | Что непонятного в вопросе?
Чтобы добавить очередную реплику в этом форуме, нужно нажать на кнопку "ответить".
На экране её нет. см. аттач. Она справа, в области горизонтального скроллинга.
Туда нужно тянуться этим самым скроллингом.
Что непонятного? | |
|
|
|
|
 53.3 Кб |
|
|
для: Trianon
(17.07.2009 в 20:11)
| | Ха) Тогда ясно) А теперь смотрите как у меня) | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 20:21)
| | Ага, понял.
Отвечать по существу вопроса Вам будет юзающий Оперу.
Адью :) | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:22)
| | Жду :)
Version 10.00 Beta 2, не ошибитесь. Предыдущая с кукиз плохо (очень) работает. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 20:25)
| | Вы, однако, наивны, предположив, что это буду я. :) | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:31)
| | Хм *задумался*
В таком случае да, наверное... *вздохнул* | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 20:33)
| | Но Вы не отчаивайтесь так.
Я тоже оказался достаточно наивен, решив вдруг, что Вы осознаете, просветлеете, и приведете в порядок посты, которые из-за размещения неадекватно длинных строк в теге [code] рвут ленту.
Так что мы квиты. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:37)
| | А, вот в чем причина...
В таком случае прошу прощения, больше так поступать не буду. Но и вы поймите меня правильно, я же не знал, что так происходит.
Больше так не буду... | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 20:40)
| | 1
2
3
4
И?
А то ситуация напоминает известный анекдот.
Партсобрание. Чехвостят алкоголика. Выговор, все дела...
Последнее слово
-Простите меня товарищи! Больше пить не буду.... Но и меньше тоже не буду! | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:50)
| | Исправил все, не только эти четыре. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 19:45)
| | >if(!$query)
Здесь Вы проверяете, что запрос был выполнен корректно. А не сколько строк этот запрос вернул.
Если строк не нашлось, корректный запрос вернет 0 строк. Смысла применять sqlite_column() в этом случае нет никакого.
Так что sqlite_num_rows()
Ремарку про Луч Анального Поноса сейчас сниму. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:57)
| | В таком случае,
<?php
$query=@sqlite_query($db, "SELECT * FROM many WHERE floor=$floor;");
if($query)
if(sqlite_column($query, "knats")!="")
{
$floor="'$floor'";
$query_insert=@sqlite_query($db, "INSERT INTO many (floor, knats)
VALUES ($floor, 4930);");
if(!$query_insert)
exit('Не удалось записать в БД');
$knats=4930;
}
else
$knats=sqlite_column($query, "knats");
else
exit('Ошибка в запросе.');
?>
|
Но всё равно та же ситуация.
Trianon, Вы профессионал, я у Вас прошу помощи... Вы не можете мне нормально ответиль? Если не знаете в чём дело, так и скажите. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 21:08)
| | Я ж написал - выполняйте проверку с помощью
if(sqlite_num_rows($query) > 0)
Если это не помогло включайте полную диагностику ошибок
error_reporting(-1); в начале скрипта | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 20:57)
| | >Так что sqlite_num_rows()
Нулевое значение никак не может вернуть. В каждой ячейке обязательно хранится информация. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 21:12)
| | Но Вы же пишете : если строки не нашлось - значит её надо добавить.
Вот это и есть случай нулевого значения. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 21:18)
| | Поражаюсь своей, хм, тупости... Ладно, сделаем скидку на возраст (хотя это не оправдание!)...
<?php
$query=@sqlite_query($db, "SELECT * FROM many WHERE floor=$floor;");
if($query)
if(sqlite_num_rows($query)<2)
{
$floor="'$floor'";
$query_insert=@sqlite_query($db, "INSERT INTO many (floor, knats)
VALUES ($floor, 4930);");
if(!$query_insert)
exit('Не удалось записать в БД');
$knats=4930;
}
else
$knats=sqlite_column($query, "knats");
else
exit('Ошибка в запросе.');
?>
|
Изменил. Работает:
У вас 4930 кнатов (10 галлеонов, 0 сиклей и 0 кнатов).
|
| |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 21:27)
| | почему если меньше 2 ?
А одна строка чем не?
Что заставили работать - респект. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 21:34)
| | Почему меньше двух? Ну потому, что два значения просто обязаны быть. Не спорю, можно было и одну указать, но это для наглядности. Я так всегда и везде пишу, поэтому точно знаю сколько должго возвращаться.
Что заставили работать - респект.
Я вам надоел? Увы, не у кого спросить больше. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 21:38)
| | не сколько значений, а сколько строк.
Или floor - не уникальный ключ? | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 21:40)
| | Подождите. Вроде же floor округляет число до ближайшего меньшего целого? | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 21:43)
| | :-D
floor - это пол. По английски. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 21:44)
| | Слушайте, что Вы меня путаете всегда?)))))))))
Вы сейчас про что?
Я же выше писал где-то
VALUES ($login, $pw, $sex, $group, $nam
| У меня пол - sex. И так в паспорте написано) И никак не php функция floor)))) | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 21:40)
| | >Или floor - не уникальный ключ?
Вот запрос на создание:
<?php
$db = sqlite_open("many.db");
if (!$db) exit("Невозможно создать базу данных!");
$query_table = sqlite_query($db, "CREATE TABLE many
(id INTEGER PRIMARY KEY,
floor TEXT,
knats TEXT);
");
if (!$query_table) exit("Невозможно создать таблицу в базе данных!");
?>
|
floor здесь переводится как "этаж")) | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 22:08)
| | $query_insert=@sqlite_query($db, "INSERT INTO many (floor, knats) VALUES ($floor, 4930);");
Вот у Вас оператор, добавляющий данные, так?
Почему Вы считаете, что он добавляет пару строрк? | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 22:10)
| | Нет, я считаю, что добавляет два значения в одно поле. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 22:12)
| | Этот запрос добавляет одну строку.
Согласно описанию таблицы (CREATE TABLE) поскольку таблица состоит из трех столбцов, любая её строка состоит из трех соответствующих полей. В каждом поле может быть ( а может и не быть) записано одно значение.
Двумя не пахнет никак. | |
|
|
|
|
|
|
|
для: Trianon
(17.07.2009 в 22:25)
| | Книга, по которой я учился, строку называет полем, поэтому я так привык тоже говорить. Хотя да, не правильно говорят, я это только сейчас понял. | |
|
|
|
|
|
|
|
для: As67ji
(17.07.2009 в 22:28)
| | шо за книга? | |
|
|
|
|
|
|
|
для: Valick
(17.07.2009 в 23:19)
| | Хм, я не помню уже, она в электронном формате была... | |
|
|
|
|