[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Автоматическая связка таблиц Mysql по средствам PHP
ratatue
Существует 2 таблицы, к примеру так:

1. Клиент
id
name
lastname
add_date

2. Список проэктов
id
id_client
name_project
add_date

Вопрос, как автоматически заставить при добавлении нового проэкта клиенту поле id_client быть равным полю id клиента ?
Если у кого-то был подобный опыт пожалуйста не сочтите за труд оставить коментарий или пример такого запроса. Спасибо.



Спустя 20 минут, 4 секунды (6.10.2008 - 19:35) Ghost написал(а):
mysql_query('insert into tab ....')
mysql_query('select LAST_INSERT_ID() from tab')

Спустя 8 минут, 9 секунд (6.10.2008 - 19:44) ratatue написал(а):
Цитата(Ghost @ 6.10.2008, 20:35) [snapback]50549[/snapback]
mysql_query('insert into tab ....')
mysql_query('select LAST_INSERT_ID() from tab')



Спасибо. clapping.gif

Спустя 2 месяца, 16 дней, 10 часов, 57 минут (23.12.2008 - 07:41) novice написал(а):
Есть 2 таблицы
users и shinobi_info, в юзерс создаётся имя, пароль а в шиноби_инфо доплнительные параметры такие как сила, атака и.т.д.
как сделать что бы при регистрации между этими таблицами была связь, т.е. после того как регистрируется юзер в таблице шиноби_инфо к нему по id вбивались сразу определённые значение сила 1, атака 1 и.т.д.
PHP
<?
 include_once(
"inc/connect.php");
if (isset(
$_POST['submit']))
{
    if(empty(
$_POST['login']))
    {
    echo 
'                 ';
    }
    elseif(empty(
$_POST['password']))
    {
    echo 
'                  ';
    }
    elseif(empty(
$_POST['password2']))
    {
    echo 
'                                ';
    }
    elseif(
$_POST['password'] != $_POST['password2'])
    {
    echo 
'                             ';
    }
    elseif(empty(
$_POST['email']))
    {
    echo 
'            E-mail';
    }
    else
        {
        
$login $_POST['login'];
        
$password $_POST['password'];
        
$password2 $_POST['password2'];
        
$email $_POST['email'];
          
$query "SELECT `id`
        FROM `users`
        WHERE `login`='{$login}' AND `password`='{$password}'
        "
;
        
$sql mysql_query($query) or die(mysql_error());
        if (
mysql_num_rows($sql) > 0)
        {
        echo 
'                          ';
        }
        
        else
        {
            
$query "INSERT INTO users(login , password , email, rdata, ip )
            VALUES ('$login', '$password', '$email', "
.time().", '".$_SERVER['REMOTE_ADDR']."')";

insert into shinobi_info(idlifemaxlifechakramaxchakrastrongstrongchakraattackdefenceattackchakradefencechakraudachalevel
values('ХЗ что воодить сюда','1000','100','1000','100','1','1','1','1','1','1','1','1');
 
            
$result mysql_query($query) or die(mysql_error());;
            echo 
'                          ';
        }
    }
}

Спустя 1 час, 9 минут, 50 секунд (23.12.2008 - 08:50) kirik написал(а):
PHP
$query "INSERT INTO users
                (login , password , email, rdata, ip )
                VALUES
                ('$login', '$password', '$email', "
.time().", '".$_SERVER['REMOTE_ADDR']."')";

        
$result mysql_query($query) or die(mysql_error());

        
$query mysql_query("INSERT INTO shinobi_info
        (id, lifemax, life, chakramax, chakra, strong, strongchakra, attack, defence, attackchakra, defencechakra, udacha, level) 
        VALUES
        ("
.mysql_insert_id($result).",'1000','100','1000','100','1','1','1','1','1','1','1','1')");

            echo 
'                          ';

Спустя 10 минут, 35 секунд (23.12.2008 - 09:01) novice написал(а):
Не записывает, выдаёт ошибку
Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in
в этой строке
(".mysql_insert_id($result).",'1000','100','1000','100','1','1','1','1','1','1','1','1')");

Спустя 1 минута, 29 секунд (23.12.2008 - 09:02) kirik написал(а):
сори.. просто mysql_insert_id()

Спустя 16 минут, 28 секунд (23.12.2008 - 09:19) novice написал(а):
Да, помогло, спасибо : )
Теперь слеудющии запрос я могу аналогично сделать т.е. есть таблица госпиталь, но в неё уже не нужно добавлять параметры, значит я просто делаю их пустыми '', кроме первого значения ".mysql_insert_id()." Правильно???

$query = mysql_query("INSERT INTO hospital
(id, lifemax, life, chakramax, chakra, time_beg, time_end )
VALUES
(".mysql_insert_id().",'','','','','')");

Спустя 20 минут, 33 секунды (23.12.2008 - 09:40) novice написал(а):
Цитата (novice @ 23.12.2008 - 06:19)
Да, помогло, спасибо : )
Теперь слеудющии запрос я могу аналогично сделать т.е. есть таблица госпиталь, но в неё уже не нужно добавлять параметры, значит я просто делаю их пустыми '', кроме первого значения ".mysql_insert_id()." Правильно???

$query = mysql_query("INSERT INTO hospital
(id, lifemax, life, chakramax, chakra, time_beg, time_end )
VALUES
(".mysql_insert_id().",'','','','','')");

Этот вопрос можно проигноривать.

Спустя 3 часа, 22 минуты, 46 секунд (23.12.2008 - 13:02) novice написал(а):
Сделал ещё одну таблицу
SQL
CREATE TABLE `shinobi_stat` (
`id` int(10) default NULL,
`fight` smallint(5) default '0',
`win` smallint(5) default '0',
`lose` smallint(5) default '0',
`money` int(11) default '0',
`exp` tinyint(5) unsigned default '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Добавил снизу ещё один запрос
PHP
$query mysql_query("INSERT INTO shinobi_info
        (id, lifemax, life, chakramax, chakra, strong, strongchakra, attack, defence, attackchakra, defencechakra, udacha, level) 
        VALUES
        ("
.mysql_insert_id($result).",'1000','100','1000','100','1','1','1','1','1','1','1','1')");

        
$query mysql_query("INSERT INTO shinobi_stat
        (id, fight, win, lose, money, exp) 
        VALUES
        ("
.mysql_insert_id().",'0','0','0','10','0')");

Регистрация проходит нормально, данные добавляет, но в таблице shinobi_stat id ставит всё время 0.

Спустя 1 час, 50 минут, 42 секунды (23.12.2008 - 14:53) novice написал(а):
И попутно, сделал в форме авторизации, что бы когда успешно входил, заносил сразу своё имя и ip в отдельную таблицу shinobi_online, что бы в дальнеишем можно было вывести сколько людей в онлайне.
PHP
if (session_is_registered("valid_user"))
{
        
$query mysql_query("INSERT INTO shinobi_online
        (id, login, ip) 
        VALUES
        ("
.mysql_insert_id().",'$login', '".$_SERVER['REMOTE_ADDR']."')");


Всё прекрасно заносится, теперь следующии шаг, надо же что бы при выходе теперь удалялись эти строки с ником. Что бы потом в онлайне не отображался.
У меня есть файл logout.php c такими данными. Добавляю в конец запрос на удаление, не знаю правильно так будет или нет и что прописать под id, WHERE id = '".$_GET['id']."????

<?
// session start в другом файле у меня отрабатывается, так что не обращаите //внимания
session_unregister("valid_user");
session_destroy() ;
mysql_query("DELETE FROM shinobi_online WHERE id = здес id не знаю как прописать");
echo "<html><head> <meta http-equiv='Refresh' content='0; URL=index.php'> </head></html>";
?>

Спустя 4 часа, 10 минут, 14 секунд (23.12.2008 - 19:03) kirik написал(а):
Цитата (novice @ 23.12.2008 - 05:02)
Регистрация проходит нормально, данные добавляет, но в таблице shinobi_stat id ставит всё время 0.

Если у тебя несколько INSERT запросов подряд, а IDшник нужен от первого, то записывай его в переменную, чтобы потом юзать в следующих запросах-
PHP
INSERT ....
$id mysql_insert_id();
INSERT (`id`, ....) VALUES ($id, ...)
INSERT (`user_id`, ....) VALUES ($id, ...)


Цитата (novice @ 23.12.2008 - 06:53)
не знаю правильно так будет или нет

У тебя юзер из онлайн листа удаляется по id?
Впринципе верно.. только перед тем как вставить переменную ГЕТ в запрос, проверь ее, является-ли она числом..

PHP
if(!empty($_GET['id']) && is_numeric($_GET['id']))
{
   
mysql_query("DELETE FROM shinobi_online WHERE id = ".((int) $_GET['id'])."");
}

Спустя 1 час, 41 минута, 27 секунд (23.12.2008 - 20:45) Sylex написал(а):
p.s. ."" и скобки необязательны wink.gif

novice, нужно переходить на работу с массивом $_SESSION

Спустя 10 часов, 13 минут (24.12.2008 - 06:58) novice написал(а):
Да, есть отдельная таблица для юзеров онлайн
SQL
CREATE TABLE `shinobi_online` (
`id` int(255) NOT NULL auto_increment,
`login` varchar(255) NOT NULL,
`ip` varchar(16) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=27 ;

И только сеичас заметил, что когда в эту таблицу заносит, то id ставит другие, потом когда перезаходишь то id идёт по нарастающей 21, 22, 23 и.т.д.
Потом в logout.php ставлю удаление строки при выходе
PHP
session_unregister("valid_user");
session_destroy() ;
</
head></html>";
if(!empty($_GET['id']) && is_numeric($_GET['id']))
{
   mysql_query("
DELETE FROM shinobi_online WHERE id ".((int) &

И не удаляет строку, наверное из за того что при входе id изначально неправильно ставится.

C этим не догнал, после того как в первом запросе вызвали id, потом его записываем в переменную и в следующих запросах просто ставим $id?
PHP
$query mysql_query("INSERT INTO shinobi_info
        (id, lifemax, life, chakramax, chakra, strong, strongchakra, attack, defence, attackchakra, defencechakra, udacha, level) 
        VALUES
        ("
.mysql_insert_id($result).",'1000','100','1000','100','1','1','1','1','1','1','1','1')");
$id mysql_insert_id();

mysql_query("insert into shinobi_stat(id, fight, win, lose, money, exp) values($id, '0','0','0','10','0')");
и.т.д.???

Спустя 1 час, 51 минута, 16 секунд (24.12.2008 - 08:49) kirik написал(а):
В твоем случае это не прокатит, потому как `id` int(255) NOT NULL auto_increment
Нужно убрать инримет автоматический с этого поля =)

ЗЫ. int(255) ???!
INT Minimum Value (Signed/Unsigned): -2147483648/0, Maximum Value (Signed/Unsigned): 2147483647/4294967295. Итого 10 знаков при учете беззнакового значения. Тебе вполне MEDIUMINT Unsigned (до 16777215) хватит =) Если конечно у тебя не миллион юзеров =))

ЗЫ2. `ip` varchar(16) можно ограничится типом INT Unsigned и записывать айпишки через INET_ATON();

Спустя 7 часов, 59 минут, 3 секунды (24.12.2008 - 16:48) novice написал(а):
To kirik: В общем плюнул на свои заготовки лажовые, взял готовую здесь на форуме форму регистрации, прикрутил к своему каркасу, переделал заново таблицы и вроде как всё ок, получилось, надеюсь не вылезит опять чего нибудь.
To Sylex: там как раз используется массив $_SESSION
Спасибо за оказанную помощь, копаю пока дальше, ждите новых вопросов : )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.