Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   phpmysql. (http://forum.oszone.net/showthread.php?t=47037)

slaine 23-03-2005 00:09 309150

phpmysql.
 
hail.
Объясните я не пойму.
в
$db_connect = @mysql_connect($dblocation, $dbuser,$dbpassword);
что должно находится в переменой $dblocation, я так понял имя компьютера?
И, что в $dbuser, какой логин, логин для чего?
и здесь $dbpassword, что мне здесь писать, какой пароль, для чего?

Объясните пожалуцта, мне в одиночку разбираться трудновато,
я только вчера открыл книжку.

vadimiron 23-03-2005 00:58 309160

$dblocation: адрес базы данных (например айпи адрес)
$dbuser, $dbpassword - соответственно логин и пароль пользователя, чтобы в базу данных не каждый залезть смог бы, админ устанавливает пароли и раздаёт права пользователям
Насколько я понимаю, у вас база данных на локальной машине?? То есть дома??
Если так, то обычно достаточно $dblocation="localhost", а в $dbuser и $dbpassword - ничего не надо, то есть "", можно ещё попробывать в $dbuser написать "root" и никакого пароля.

slaine 23-03-2005 02:00 309168

А вот при таком коде:
<?
$dblocation ="127.0.0.1";
$dbname = "test";
$dbuser = "root";
$dbpassword = "";

if ($db_connect = mysql_connect($dblocation, $dbuser,$dbpassword)){
echo "OK";
}
?>
мне пишут вот это:

Fatal error: Call to undefined function mysql_connect() in E:\x\xxx.php on line 7

чё мне не делать?

Prisoner 23-03-2005 08:46 309224

Глядеть в php.ini на предмет включения модуля mysql. Ибо он, как говорится, имеет место наличия отсутствия. Или не подключен, или не вкомпилирован, или не настроен - все зависит от версии используемого интерпретатора.

slaine 23-03-2005 11:58 309282

Вот, что у меня написано в ini d php5.

[MySQL]

mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off


slaine 23-03-2005 16:02 309365

Всё моё время уходит на насторйки, и не могу занятся программированием.
Может мне поставить "denwer", что скажете?

vadimiron 23-03-2005 18:14 309411

Я его поставил в первый же день и потом занялся сразу программированием :)
Просто знание, как там всё в сервере устроено по началу не нужно - так что если цель - научиться писать скрипты, то Денвер то, что нужно
А уже потом, написав солидное количество работающих строк, уже будет легче самому что то настраивать и изменять на сервере, так как придёт понимание
Кстати денвер - это русский Вариант, есть ещё и другие аналогичные пакеты (но попробовав Денвер, я сразу к нему привык и другие мне показались неинтересными - но то кому как....)

Dutchman Mihel 23-03-2005 18:51 309418

slaine

В пхп 5 поддержка mysql по умолчанию выключена. Чтобы включить в php.ini в разделе Dynamic Extensions убери ; перед строкой extension=php_mysql.dll. В разделе Paths and Directories должен быть прописан путь к extensions'ам. На всякий можно скопировать в php_mysql.dll в папку windows\system32. Должно работать.

slaine 31-03-2005 19:20 311786

Спасибо всем.

А, что значат вот такие вот команды:

id_forum int(6) not null auto_increment
pos int(6) default null
name varchar(10) not null
) TYPE=MyISAM;

Prisoner 31-03-2005 20:43 311800

Это кусок команды создания таблицы определенного типа. Каждая строка в скобках есть описание поля таблицы в формате имя тип атрибуты. Подробнее тут.

slaine 07-04-2005 19:16 313770

Спасибо.

А как мне вытащить из базы данных только последнее сообщение?
как будет выглядеть запрос?

Prisoner 07-04-2005 21:13 313804

Необходимо поле по которому будет производиться сортировка для выявления последней строки (строк). Это может быть автоинкрементное поле (ID) или же дата, в общем все что угодно из мысли "последние чего_то_там". Тогда так:
Код:

SELECT
  field1, field2, field3, ...
FROM
  table
ORDER BY
  some_field
LIMIT
  some_limit

Смысл: выбрать some_limit строк с необходимыми полями из таблицы table с сортировкой по полю some_field (необязательно из списка полей после SELECT). Причем сортировку необходимо указать в зависимости от нужд: по возрастанию или по убыванию.

slaine 15-04-2005 16:21 315972

спасибо всё прекрасно работает.
И ещё я хотел спрорсить как мне в таблице обнулить 'm_id int unique auto_increment' ?
я делаю запрос 'delete from table_name', а 'm_id int unique auto_increment остаётся' прежним.

Prisoner 16-04-2005 08:39 316152

ЕМНИП, TRUNCATE TABLE table_name - быстрое удаление всех записей, обнуление поля auto_increment и многое другое. Намного быстрее чем DELETE т.к. просто удаляет таблицу и воссоздает ее заново.

slaine 26-04-2005 13:37 319312

А как мне использовать данные из двух таблиц?
Например:
table1:
name

table2:
name

select table1.name table2.name from table1, table2;
-так правильно?
и как сделать их вывод на зкран в php?

Prisoner 26-04-2005 14:08 319317

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

SELECT
  table1.some_field1, table1.some_field2, ... , table2.some_field1, table2.some_field2, ...
FROM
  table1,
  table2
WHERE
  table1.relation_field = table2.relation_field

Условием в WHERE мы задаем связь по какому-то полю двух таблиц.
Если второй вариант, то обратите внимание на такую штуку запроса как JOIN.

slaine 26-04-2005 15:35 319337

В моей базе есть две таблицы:

ENTER:
======
m_id,
login,
passw.

LINKS:
======
m_id,
name,
mesg.

мне нужно вывести 'login' из ENTER и 'mesg' из LINKS.

Код:

$a = mysql_query(" ??? ");
while ($b = mysql_fetch_array($a)){
echo $b['login'];
echo $b['mesg'];

}

какой мне сделать запрос?


mar 26-04-2005 18:20 319393

Маленькая поправка:
таблица1 JOIN таблица2 ON условие
- то же, что и
SELECT что-то FROM таблица1, таблица2 WHERE условие

mar 26-04-2005 18:23 319394

slaine
Цитата:

В моей базе есть две таблицы:
ENTER:
======
m_id,
login,
passw.

LINKS:
======
m_id,
name,
mesg.

мне нужно вывести 'login' из ENTER и 'mesg' из LINKS.
если они связаны по m_id, то
Код:

SELECT e.login, l.mesg FROM ENTER e, LINKS l WHERE e.m_id  = l.m_id
Если ни по чему не связаны, то бессмысленно

slaine 26-04-2005 21:44 319451

А если мне надо будет сделать так:

Код:


$a = mysql_query(" SELECT e.login, l.login FROM ENTER e, LINKS l WHERE e.m_id  = l.m_id");

где в таблицах одинаковые столбы login.

то что мне писать здесь?

Код:


while ($b = mysql_fetch_array($a)){
echo $b['???'];
echo $b['???'];


Vlad Drakula 26-04-2005 22:28 319466

slaine
$a = mysql_query(" SELECT e.login as LoginE, l.login as LiginL FROM ENTER e, LINKS l WHERE e.m_id = l.m_id");

while ($b = mysql_fetch_array($a))
{
echo $b['LoginE'];
echo $b['LoginL'];
}

slaine 10-06-2005 11:41 331732

Салют всем.

Помогите разобратся.

у меня две таблицы(к примеру):

t1
======

m_id int not null unique auto_increment primary key,
name char(30) not null

t2
======

id int not null unique auto_increment primary key,
m_id int not null,
mess text

Они связаны по m_id.
Чтобы подсчитать сколько сообщений у пользователя я делаю так:

SELECT t1.name AS nameN, count(*) FROM t1,t2 WHERE t1.m_id = t2.m_id GROUP BY t1.name;

А как мне сделать записьб тоесть добавлять новые сообщения в t2, как мне
быть со внешним ключём(m_id), только если вручную добавлять m_id пользователя?
INSERT INTO t1 values ('', '???', '$message')"

Объсните, а то в книгах любят писать всё не до конца.


vadimiron 10-06-2005 12:19 331757

Скажите, а у вас имена пользователей всегда разные?? То есть не разрешается добавлять пользователя с именем, которое уже есть в базе?? Если так, то поле m_id не нужно. Одна таблица должна содержать все данные о пользователе (имя пользователя в качестве ключа), а таблица с сообщениями будет вместо m_id содержать просто имя добавившего сообщение юзера.
Это было просто предложение.....

В вашем случае наверно нужно искать в таблице с юзерами соотетствующий номер по имени
SELECT m_id FROM t1 WHERE name='$name' (подобный запрос не нужен если использовать имя юзера в качестве ключа), и потом этот m_id использовать в запросе-вставке

slaine 10-06-2005 15:07 331818

Спасибо.
ещё хотел спросить, как сделать, чтобы COUNT(*) показывал
пользвателей(t1.name) = 0, у которых t2.mess пусто, ато он их просто
игнорирует.

vadimiron 10-06-2005 19:34 331879

Цитата:

как сделать, чтобы COUNT(*) показывал пользвателей(t1.name) = 0, у которых t2.mess пусто
Сори, я не очень понял: если mess пуст, то зачем добавлять подобную запись в таблицу сообщений??

slaine 10-06-2005 20:50 331920

Да я не про таблицу сообщений, ну её.

Я имел ввиду подсчитать сколько собщений сделал юзер, например:

юзер1 = 1(сообщений)
юзер2 = 2(сообщений)
юзер3 = 24(сообщений)
юзер4 = 0(сообщений) - так вот у кого ноль COUNT(*) его игнорирует, непоказывает, что у него '0'.
Что мне можно предпринять?

Prisoner 10-06-2005 22:25 331947

Код:

SELECT
  u_name,
  COUNT(u_message)
FROM
  messages
GROUP BY
  u_name

u_name - имя пользователя
u_message - текст сообщения.
Конечно, в таблице сущности "сообщения" могут быть иные поля.

slaine 11-06-2005 17:09 332126

Спасибою,
Ноя всё хочу добится того, чтоб если у 'u_user' поле 'u_message' пусто, то COUNT()
выводил бы '0',
а в итоге выводят '1'

messages
========
id int auto_increment,
u_user char(30) not null,
u_message text

В форумах, в списках пользователей ведб так и есть.

vadimiron 11-06-2005 17:34 332129

А почему должен быть юзер в таблице с сообщениями, если он ни одного сообщения не написал???
Это перемешивание концепций:
У вас есть две таблицы. В таблице users должна быть собрана вся информация о юзерах. В табице messages в свою очередь должна быть собрана вся информация о сообщениях. Последствием этого является то, что пока юзер не создал сообщение, он никаким образом не отбразиться в таблице с сообщениями, поэтому и нулевых полей (где message пустой) не должно быть.
В этом случае ситуация, описанная вами, не возникнет и можно спокойно использовать запрос, написанный Prisoner-ом.
Ещё одно предложение: если вам часто нужно выводить количество сообщений каждого юзера, то это будет накладно каждый раз делать запрос. чтобы подсчитать количество сообщений, а лучше будет сделать отдельное поле в таблице с юзерами, в котором будете держать число сообщений каждого юзера (как бы одна из характеристик юзера). Это число нужно будет просто каждый раз при добавлении нового сообщения инкрементировать, а при создании юзера ставить по умолчанию 0. Такая схема будет быстрей работать

vadimiron 11-06-2005 17:38 332130

Цитата:

а в итоге выводят '1'
Естественно, ведь используется оператор COUNT(),который подсчитывает КОЛИЧЕСТВО. Если вы записали юзера с пустым сообщением в таблицу с сообщенияеми, то он там ОДИН раз присутствует, отсюда и 1.

slaine 11-06-2005 19:08 332135

Цитата:

Это число нужно будет просто каждый раз при добавлении нового сообщения инкрементировать
А, как оно будет инкрементировать для каждого пользователя в отдельности ?
Не могли бы вы мне показать кусочек такой таблицы?

vadimiron 11-06-2005 21:27 332168

Цитата:

А, как оно будет инкрементировать для каждого пользователя в отдельности ?
Не могли бы вы мне показать кусочек такой таблицы?
При добавлении нового сообщения вытаскиваем значение "количество сообщений" добавляющего юзера (естественно из таблицы "Юзеры"), потом количество сообщений=количество сообщений+1, и далее записываем это значение вместо сторого (то есть UPDATE)

slaine 12-06-2005 15:07 332309

Спасибо за идею, а то я зациклился на COUNТ()-е.
Всё замечательно работает!

slaine 05-07-2005 00:22 338391

Скажите, почему здесь нет слэшей перед кавычками?

mysql_query("insert into r1 values ('".addslashes($user)."')");

$auth = mysql_query("select name from r1");

while ($print = mysql_fetch_array($auth)){

echo $print['name']."<BR>";
}


Prisoner 05-07-2005 02:12 338407

Внутри открывающей и закрывающей кавычек одного рода (двойные) можно использовать сколь угодно большое число кавычек второго рода (одинарные).

slaine 05-07-2005 11:52 338519

Я имел ввиду, когда я ввоже данные типа asd"asd"fasf" на выходе нет слэшей перед
кавычками. Ведь там стоит addslashes, а stipslashes я специально убрал.

vadimiron 05-07-2005 13:02 338537

а так идёт??
PHP код:

mysql_query("insert into r1 values ('addslashes($user)')"); 


archy 05-07-2005 13:08 338540

Потому что слеш нужен для правильной передачи параметров, во время записи они убираются, вот если сделать
Код:

echo addslashes($user);
то слеши будут. Читайте мануалы внимательней.

slaine 05-07-2005 16:22 338595

Vadimironв таком виде мне выдают как строку.

Archy
Цитата:

При использовании функции Addslashes() строка будет сохранена в базе данных
с символами косой черты. При получении строки нужно не забыть удалить символы
косой чертыю Это можно сделать функцией Stripslashes().
Я пробовал так с текстовыми БД слэши остаются, а с MySQL нету, почему? мне очень интересно.
magic_quotes_gps - off.

И ещё если я ставлю перед записью в MySQL символ '<', то после него вообще он ничего не
воспринимает, незаписывает. Теги у меня не фильтруются вообще.

Может у меня какието настройки стоят специальные?

И ещё хотел спросить функцию htmlspecialchars() надо использовать до или после записи в БД?

slaine 06-07-2005 16:50 338903

Всё спасибо разобрался!


Время: 12:03.

Время: 12:03.
© OSzone.net 2001-