Съвети...

_4efo_

Registered
Имам нужда от помоща ви...
Хванах се да правя нещо което не ми е още на 100% ясно какво ще бъде но...
Имам 1 база данни в която ще се нимрат регистрираните потребители в сайта ми и данни за тях.
Искам всеки потребител да може да пуска обяви да кажем...
Но се чудих, всяка обява ако има 5-6 компонента ще е добре да е в отделна таблца, за да може да се търсят ....
как мога да направя така че да ми взема постоянно стойност от едната база данни в другата.
Примерно ако съм потребител _4efo_ и това е ДБ1
и искам да напиша урок който урок се запазва в ДБ2
и когато търся уроци от _4efo_ да ми ги показва... ?
Благодаря
 
От две различни бази данни незнам но от една ето как може да стане:

SELECT text FROM obqvi
FROM obqvi join users on obqvi.author=users.name
WHERE name=_4efo_

Сега ще ти го обясня
SELECT text FROM obqvi: Извежда съдържанието на графа text в таблица obqvi
FROM obqvi join users: Добавя четене от друга таблица
on obqvi.author=users.name: проверява дали user-ите съвпадат
WHERE name=_4efo_: Извежда само текста в реда в който name е _4efo_

Сега при тебе може таблиците да не са obqvi и users ,както може и автора и юзърнейма да не са author и name ,но това вече ти си го настройваш
 
raiden каза:
От две различни бази данни незнам но от една ето как може да стане:

SELECT text FROM obqvi
FROM obqvi join users on obqvi.author=users.name
WHERE name=_4efo_

Сега ще ти го обясня
SELECT text FROM obqvi: Извежда съдържанието на графа text в таблица obqvi
FROM obqvi join users: Добавя четене от друга таблица
on obqvi.author=users.name: проверява дали user-ите съвпадат
WHERE name=_4efo_: Извежда само текста в реда в който name е _4efo_

Сега при тебе може таблиците да не са obqvi и users ,както може и автора и юзърнейма да не са author и name ,но това вече ти си го настройваш
Мм....става въпрос, че ако всичко ми е на 1 таблица няма ли да стане много тромаво....?
 
Да.
Идеята е добра и добре замислена.
Точно така трябва да се проектира базата данни.

Всички обекти трябва да са в отделна таблица.
Връзката между тях е лесна .
Търсенето също.

Значи ето като за начало няколко важни съвета.

Потребителите ги записваш в таблица user а уроците ще са в
таблица uroci .

Примерно говоря.

таблица user ще има полета свързани с потребителя:
user_id | user_name | user_password | user_mail | user_reg_data

таблица uroci ще е така:

uroci_id | user_id | zaglavie_urok | text_urok | data_urok |

Полетата в червено трябва да са primary key и auto_increment .

Забележи, че и в двете таблици има поле user_id .
В таблицата уроци обаче то не е primary key .
Това е връзката между таблиците и тя е най важното в случая.

Имай предвид, че в последствие може а добавяш полета към тези таблици.

След като направиш тези две таблици и системата за логване
ще трябва да направиш и няколко записа.
Правиш си скрипта с който потребителите ще качват уроците.
Във формуляра ще има
Заглавие на урока:
текст на урока:

Човека ги попълва и ги изпраща на скрипта който ще ги записва в базата данни.

Този скрипт ще запише в таблицата uroci следното:

id-> пореден номер , user_id -> id-то на потребителя който е написал урока, zaglavie_urok-> заглавието на урока и т.н.

След като всичко е готово пиши за да ти обясня заявките за търсене
по няколко (100) начина.
 
admin каза:
Да.
Идеята е добра и добре замислена.
Точно така трябва да се проектира базата данни.

Всички обекти трябва да са в отделна таблица.
Връзката между тях е лесна .
Търсенето също.

Значи ето като за начало няколко важни съвета.

Потребителите ги записваш в таблица user а уроците ще са в
таблица uroci .

Примерно говоря.

таблица user ще има полета свързани с потребителя:
user_id | user_name | user_password | user_mail | user_reg_data

таблица uroci ще е така:

uroci_id | user_id | zaglavie_urok | text_urok | data_urok |

Полетата в червено трябва да са primary key и auto_increment .

Забележи, че и в двете таблици има поле user_id .
Във таблицата уроци обаче то не е primary key .
Това е връзката между таблиците и тя е най важното в случая.

Имай предвид, че в последствие може а добавяш полета към тези таблици.

След като направиш тези две таблици и системата за логване
ще трябва да направиш и няколко записа.
Правиш си скрипта с който потребителите ще качват уроците.
Във формуляра ще има
Заглавие на урока:
текст на урока:

Човека ги попълва и ги изпраща на скрипта който ще ги записва в базата данни.

Този скрипт ще запише в таблицата uroci следното:

id-> пореден номер , user_id -> id-то на потребителя който е написал урока, zaglavie_urok-> заглавието на урока и т.н.

След като всичко е готово пиши за да ти обясня заявките за търсене
по няколко (100) начина.
Изключително много благодаря.
Ще възникнат и други въпроси сигурен съм, по време на работата, ще се надявам на помощ :)
 
_4efo_ каза:
raiden каза:
От две различни бази данни незнам но от една ето как може да стане:

SELECT text FROM obqvi
FROM obqvi join users on obqvi.author=users.name
WHERE name=_4efo_

Сега ще ти го обясня
SELECT text FROM obqvi: Извежда съдържанието на графа text в таблица obqvi
FROM obqvi join users: Добавя четене от друга таблица
on obqvi.author=users.name: проверява дали user-ите съвпадат
WHERE name=_4efo_: Извежда само текста в реда в който name е _4efo_

Сега при тебе може таблиците да не са obqvi и users ,както може и автора и юзърнейма да не са author и name ,но това вече ти си го настройваш
Мм....става въпрос, че ако всичко ми е на 1 таблица няма ли да стане много тромаво....?

Май не ме разбра.Имаш таблица users и таблица obqvi и някаква структура вече например
users
name | pass | email

obqvi
title | text | author

и търсачката ще ти изглежда така:

search.php

<form action="search.php" method="post">
<INPUT TYPE="text" NAME="search"><br>
<INPUT TYPE=submit value=Търси >
</FORM>
<?php include(config.php); \\да предположим че там се кънектваш към DB
$result=mysql_query("SELECT title , text FROM obqvi
FROM obqvi join users on obqvi.author=users.name
WHERE name like %$search%") or die ("Неможах да потърся!");

while ($row = mysql_fetch_array($result))
{
echo "Заглавие: ";
echo $row["title"];
echo "<br>";

echo "Текст: ";
echo $row["text"];
echo "<br>"; ?>
 
raiden кода ти работи но
винаги ползвай ключовете за връзката между таблиците.

Много е голяма разликата.
Няма как да я усетиш на таблици с по 1000 записа но при по големи таблици
ще стане проблем.
Наистина не трябва така.
Иначе кода си го бива но да е с Id за връзка.


_4efo_ имай предвид, че полета с фиксирана дължина са по-бързи.
Задавай дължината на полетата, когато можеш .
По възможност винаги. При текста на обявата може и да не задаваш но на
другите полета трябва да има фиксирана дължина.
Нека primary key ( в случая user_id)
да е от типа int и да е с фиксирана дължина (примерно 7).
 
admin каза:
raiden кода ти работи но
винаги ползвай ключовете за връзката между таблиците.

Много е голяма разликата.
Няма как да я усетиш на таблици с по 1000 записа но при по големи таблици
ще стане проблем.
Наистина не трябва така.
Иначе кода си го бива но да е с Id за връзка.


_4efo_ имай предвид, че полета с фиксирана дължина са по-бързи.
Задавай дължината на полетата, когато можеш .
По възможност винаги. При текста на обявата може и да не задаваш но на
другите полета трябва да има фиксирана дължина.
Нека primary key ( в случая user_id)
да е от типа int и да е с фиксирана дължина (примерно 7).

Благодаря, ще сядам след някой друг ден да го пиша, че сега мн неща са ми са се събрали...
 
Как да направя така, че всеки потребител да има нещо като статус на обявите. Да може да вижда какви обяви е пуснал да ги променя, да ги трие и т.н... :roll:
 
_4efo_ каза:
Как да направя така, че всеки потребител да има нещо като статус на обявите. Да може да вижда какви обяви е пуснал да ги променя, да ги трие и т.н... :roll:

Аз лично правя следното:
При логване му се появява допълнително меню. Примерно със следните възможности:
- добави обява - тва е ясно :)
- активни обяви (брой обяви) - кликайки тук му се зарежда списък с активните обяви (тези на които не им е изтекъл срока на валидност). Тук срещу всяка обява слагам и следните доп. инфо и доп. функции - уникален номер на обявата, дата на добавяне, валидна до, редактирай, изтрий обявата. (евентуално и разни други специфични като - добави/изтрий снимки и тн..)
- неактивни обяви (брой обяви) - като горното. евентуално бутон за активиране на обявата, но ако няма място може да си удължава срока на валидност и от редактирай обявата
- редактирай профил - промяна на личната информация + смяна на парола

за да изкараш само активните обяви слагаш в where следното условие - колонката с дата на публикуване>= CURDATE()
за неактивните: < CURDATE()

Съветвам те да добавиш оше една колонка в таблицата с обявите (пък в таблицата за юзерите си е направо задължително). Тази колонка си я кръщаваш както ти е кеф, примерно active и при добавяне на обява да се записва 1-ца. Навсякъде при селектване на обявите слагаш и още еднo условие active = 1. Така когато искаш да скриеш дадена обява, а не искаш да я триеш, просто упдейтваш active с стойност различна от 1.
 
_4efo_ каза:
Как да направя така, че всеки потребител да има нещо като статус на обявите. Да може да вижда какви обяви е пуснал да ги променя, да ги трие и т.н... :roll:



Това се не се прави толкова трудно.
В таблиците, които ти дадохa за пример се записва коя обява кой я е пуснал.

В полето user_id на таблицата за обявите се записва id -то на
потребителя, който я е пуснал.

С две думи ти може да разбереш кой потребител коя обява е пуснал.
След като потребителя се
логне ти ще разбереш неговотo id и при разглеждането на обявите
( за пример може да вземеш това )

ще вижда срещу всяка своя обява която е написал усер-а един бутон edit.

Ще може да променя само обяви за които в полето user_id стои неговия id.

Трябва да почнеш да правиш нещата постепенно.
Да дадеш демо до къде си стигнал за да може на нещо да стъпиме като
ти помагаме.

Сега на голо няма смисъл да си говориме.

Дай демо на системата с логин и листване на обявите.
Да има формуляр с който аз да кача една обява и дай кода
за да го разгледам и да направя корекции ако се наложи.

Колоната която предлага slavei е удобна но тя може да се добави
и по-късно.
 
Админ прав си за id-а той е доста важен за 1 сайт.Много по удобно е...
А за другото:
Tрябва да има нещо като user.php където да имаш достъп само ако си се логнал и там да сложиш някакъв код подобен на този:
Тук обаче се намесват cookies

Код:
$result=mysql_query("SELECT * FROM uroci WHERE author = $_COOKIE["user"] );

if(mysql_num_rows($result) == 0) {
echo "няма намерени резултати";exit;}


while ($row = mysql_fetch_array($result))
{

echo "Заглавие: ";
echo $row["title"];
echo "<br>";

echo "Текст: ";
echo$row["text"];
echo "<br>";

}

mysql_close();



ето за cookies примерен код:

Код:
<?php
include("config.php");

$accountid= stripslashes($_POST['user']);
$passwordid = stripslashes($_POST['pass']);


if (($accountid == NULL) || ($passwordid == NULL)) { 
die("error: some fields were left blank"); }

if ((eregi("[^a-zA-Z0-9_-]", $accountid)) || (eregi("[^a-zA-Z0-9\.@_-]", $passwordid)))
	{
	echo("Only letters (a-Z) and nums (0-9) are allowed");
        exit();
	}

$query = "Select name,pass From users WHERE name='$accountid'";
$result = mssql_query($query);
$row = mssql_fetch_row($result);

if (($row[1] != $passwordid) || ($row[0] != $accountid)) {
die("Critical error!<br> Login\password incorrect"); }

if (($row[1] = $passwordid) && ($row[0] = $accountid)) {
setcookie("user", "$row[0]", "0"); 
setcookie("pass", "$row[1]", "0"); 
}
?>

$_POST['user'] и $_POST['pass'] може да са различни, зависи от формата за login как си ги кръстил
 
Значи, това което имам за сега е логина
сега ще ви покайа как ми изглежда ДБ...


C_NUMBER C_TITLE C_FNAME C_SNAME C_ADDRESS C_ADDRESS2 C_TOWN C_COUNTY C_PCODE C_TEL_NUM C_EMAIL C_USER_NAME C_PWORD C_SECRET_Q C_SECRET_A C_ACTIVATE C_KEY C_MAIL_TYPE

Значи да вмъкна в началото едно поле C_ID
да направя другата таблица за обяви да ми бъде
C_obqvi_ID | C_NUMBER | C_No | C_dlyjnst | C_iziskvaniq | C_kategoriq | C_zaetost | C_srok | C_nivo | C_country | C_grad | C_zaplata | C_srok

?
 
Как ще стане номера всеки потребител да си има уникален статус.
Защото сега като се логна с ралични потребителски имена и ми показва един и все все един и същ статус...
Чудех се дали линк-а ще трябва да бъде от рода на status.php?=C_NUMBER=3
примерно, че status.php да се вижда различна ?
Надявам се че сте ме разбрали...
Благодаря
 
_4efo_ каза:
Значи, това което имам за сега е логина
сега ще ви покайа как ми изглежда ДБ...


C_NUMBER C_TITLE C_FNAME C_SNAME C_ADDRESS C_ADDRESS2 C_TOWN C_COUNTY C_PCODE C_TEL_NUM C_EMAIL C_USER_NAME C_PWORD C_SECRET_Q C_SECRET_A C_ACTIVATE C_KEY C_MAIL_TYPE

Значи да вмъкна в началото едно поле C_ID
да направя другата таблица за обяви да ми бъде
C_obqvi_ID | C_NUMBER | C_No | C_dlyjnst | C_iziskvaniq | C_kategoriq | C_zaetost | C_srok | C_nivo | C_country | C_grad | C_zaplata | C_srok

?

Няма да е зле първо да кажеш, какво искаш да направиш :) Или дай заданието, ако имаш за да ти кажем как е най-добре да си проектираш базата.
 
Ми какво искам...
рег, като си влезеш в акаунта да можеш да пускат обяви.. които да можеш да редактират, да се трият
това е горе долу...
 
_4efo_ каза:
Ми какво искам...
рег, като си влезеш в акаунта да можеш да пускат обяви.. които да можеш да редактират, да се трият
това е горе долу...

горе долу....:(

За регването:
- всеки да може да се регистира?
- нужно ли е да се одобряват регистираните потребители?
- само един тип потребители ли ще има? (не броя админа)
За обявата освен заглавие, текстова част, дата на публикуване и потребител други изисквания ще има ли? Като:
- добавяне на снимки към обявата?
- телефон и др. за обратна връзка ?
- валидност на обявата?
- ако има валидност на обявата какво ще става след като изтече? - ще праща ли майл на потребителя да го предупреди? Той ще може ли да си удължава срока на валидност? Ще може ли да трие обявата?
Обявите с изтекла валидност ще се пазят ли в архив или ще се изтриват? Този архив ще се вижда ли от потребителите или ще е скрит за тях и тн...
- колко обяви има право да пусне един потребител?
- само един тип ли ще са обявите? или няколко? - продавам, купувам, наемам, давам под наем, търся да купя, търся да наема тн....
- VIP обяви ще има ли?
Ако са някакви обяви с търговска цел може да има и обяви от рода на "Промоция", "спешно"
Тук ми хрумва, че ако е с комерсиална цел ще трябва да разрешаваш при заплащане от потребителя да може да пуска VIP, "промоция", "спешно". .... Е сега вече ми хрумнаха още една камара въпроси, които ще ми отнеме прекалено много време за да ги напиша! И Защо? Защото теб те мързи да кажеш кратко и ясно какво ти трябва :)
 
Готов ли си с регистрацията.
Дай демо да се регна.

Дай едно по едно.
Трябва нещо да е готово за да знам какъв код да ти дам.

Искам да се регна и да мога да видя обявите.
Евентуално и да мога да пусна една.

Накрая ще е това с едитването.
 

Горе