Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] System Ulubionych - Wykonanie (2)
FlashSplash
post 17.08.2010, 09:33:16
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 16.08.2010

Ostrzeżenie: (0%)
-----


Pierwsza część tematu: Temat: PHPMySQL System Ulubionych Idea 1

Witam!
W poprzednim temacie podpowiedziano mi, jak stworzyć mini system ulubionych połączony z bazą danych użytkowników mojego forum SMF oparty o PHP oraz MySQL. Użytkownik Crozin podpowiedział mi by stworzyć osobną tabelę, która utworzy z tabelą użytkowników relację wiele-do-jednego (klik).

Osoba, która byłaby tak miła by napisać dla mnie takowy kod zostałaby nagrodzona kwotą co najmniej 10zł oraz dostałaby reklamę w wybranym okresie na stronie CartoonCenter.pl (która - przypomnę - nawet w okresie BETA miała miejscami 2000 UU wyświetleń).

Opis systemu
Moim poprzednim pomysłem było stworzenie osobnej tabeli dla każdego użytkownika który będzie chciał używać systemu ulubionych, ale podobno 10'000 tabel dla 10'000 użytkowników to kiepski pomysł haha.gif
Niestety tak jak osobne tabele byłem w stanie stworzyć i rozumiałem to, tak utworzenie osobnej tabeli która utworzy z tabelą użytkowników relację wiele-do-jednego jest po prostu czarną magią.

Rozumiem, że mają bazę danych (nazwijmy ją cc_db) i mając tam 50 różnych tabel forum (SimpleMachinesForum) jedną z nich jest forum_members, w której są wszyscy użytkownicy, oczywiście z unikalnym ID, które w php mogę otrzymać dzięki komendzie $user_id = $context['user']['id'] . Następnie mam utworzyć nową tabelę, np. ulubione i co dalej?

Chcę, aby użytkownik wchodząc na podstronę CartoonCenter na której jest możliwość dodania tego URL do ulubionych klikał ikonkę, która byłaby tak naprawdę ukrytym submit i wysyłał do bazy danych URL i PageTitle.

  1. function curPageURL() {
  2. $pageURL = 'http';
  3. if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
  4. $pageURL .= "://";
  5. if ($_SERVER["SERVER_PORT"] != "80") {
  6. $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
  7. } else {
  8. $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
  9. }
  10. return $pageURL;
  11. }
  12.  
  13. function curPageName() {
  14. return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
  15. }
  16.  
  17. $PageURL = curPageURL();
  18. $PageTitle = curPageName();

  1. <form action="add_fav.php" method="post">
  2. <input type="hidden" name="fav-url" value="'. $PageURL .'" />
  3. <input type="hidden" name="fav-title" value="'. $PageTitle .'" />
  4. <input type="submit" id="submit" />


Wysyłając dane do pliku add_fav.php chciałbym by php sprawdzało, czy w tabeli 'ulubione' nie ma już przypadkiem takiego URL i jeśli jest to wysyłać komunikat o tym, że podany adres już jest w ulubionych, a jeśli nie ma takowego to go dodać (lub możemy to uprościć - by jeśli pozycja znajduje się już w bazie danych to ikonka dodawania do ulubionych jest nieaktywna, a jeśli nie ma to aktywna - z tym że to już oczywiście nie w plik add_fav.php tylko bezpośrednio na stronie którą użytkownik zamierza dodać). Potem niezbędna jest opcja przeglądania wszystkich ulubionych z możliwością usunięcia pojedynczych adresów z tabeli (zakładam że to z DELETE FROM ulubione WHERE PageURL = $PageURL czy coś tego typu).

Czy ktokolwiek byłby w stanie mi pomóc? Z góry dzięki za pomoc.
Pozdrawiam,
Newbie FlashSplash

Ten post edytował FlashSplash 17.08.2010, 09:35:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sebekzosw
post 17.08.2010, 12:15:42
Post #2





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


tu masz dodawanie do ulubionych:

  1. $id = mysql_result(mysql_query("SELECT `id` FROM `PageUrl` WHERE `PageUrl` = '".mysql_real_escape_string($_POST['fav-url']).""),0);
  2. if(empty($id))
  3. {
  4. mysql_query("INSERT INTO `PageUrl` (`PageUrl`, `PageName`) VALUES ('".mysql_real_escape_string($_POST['fav-url'])."' , '".mysql_real_escape_string($_POST['fav-title'])."');");
  5. $id = mysql_insert_id();
  6. }
  7. mysql_query("INSERT INTO `ulubione` (`id_member`, `page_id`) VALUES ('".$user_id."' , '".$id."');");


a tutaj masz formularz, tylko zapytanie jest pisane z palca więc nie wiem czy jest poprawne:

  1. $fav = mysql_fetch_assoc(mysql_query("SELECT * FROM `PageUrl` AS `pu`
  2. LEFT JOIN `ulubione` AS `u` ON `u`.`page_id`=`pu`.`id`
  3. WHERE `u`.`id_member` = '$user_id' AND `pu`.`PageUrl` = '".mysql_real_escape_string($PageURL)."'"));
  4.  
  5. if(empty($fav))
  6. {
  7. echo '<form action="add_fav.php" method="post">
  8. <input type="hidden" name="fav-url" value="'. $PageURL .'" />
  9. <input type="hidden" name="fav-title" value="'. $PageTitle .'" />
  10. <input type="submit" id="submit" />';
  11. }


Ten post edytował sebekzosw 17.08.2010, 12:17:08
Go to the top of the page
+Quote Post
FlashSplash
post 17.08.2010, 12:40:01
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 16.08.2010

Ostrzeżenie: (0%)
-----


Cytat(sebekzosw @ 17.08.2010, 13:15:42 ) *
tu masz dodawanie do ulubionych:

  1. $id = mysql_result(mysql_query("SELECT `id` FROM `PageUrl` WHERE `PageUrl` = '".mysql_real_escape_string($_POST['fav-url']).""),0);
  2. if(empty($id))
  3. {
  4. mysql_query("INSERT INTO `PageUrl` (`PageUrl`, `PageName`) VALUES ('".mysql_real_escape_string($_POST['fav-url'])."' , '".mysql_real_escape_string($_POST['fav-title'])."');");
  5. $id = mysql_insert_id();
  6. }
  7. mysql_query("INSERT INTO `ulubione` (`id_member`, `page_id`) VALUES ('".$user_id."' , '".$id."');");


a tutaj masz formularz, tylko zapytanie jest pisane z palca więc nie wiem czy jest poprawne:

  1. $fav = mysql_fetch_assoc(mysql_query("SELECT * FROM `PageUrl` AS `pu`
  2. LEFT JOIN `ulubione` AS `u` ON `u`.`page_id`=`pu`.`id`
  3. WHERE `u`.`id_member` = '$user_id' AND `pu`.`PageUrl` = '".mysql_real_escape_string($PageURL)."'"));
  4.  
  5. if(empty($fav))
  6. {
  7. echo '<form action="add_fav.php" method="post">
  8. <input type="hidden" name="fav-url" value="'. $PageURL .'" />
  9. <input type="hidden" name="fav-title" value="'. $PageTitle .'" />
  10. <input type="submit" id="submit" />';
  11. }


Super! Jak tylko jeszcze usunę wszystkie błędy i będzie działał to z przyjemnością poproszę o Twoje GG tongue.gif
Mały problem: Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/cartoonc/public_html/add_fav.php on line 29
Something is wrong in your syntax obok ''' w linii 1
  1. $id = mysql_result(mysql_query("SELECT `id` FROM `pageURL` WHERE `PageUrl` = ".mysql_real_escape_string($_POST['fav-url']).""),0); echo mysql_error();


Cytat(thek @ 17.08.2010, 13:36:38 ) *
Sebekzosw...
W relacji N-N istnieją 3 tabele z polami:
forum_members: (różne kolumny) + member_id
pageUrl: id, pageUrl, pageName
user_page: id_url, id_user

Teraz mając formularz, możesz go wysłać i po stronie php sprawdzasz, czy taki url znajduje się wśród rekordów tego usera. Jak? Przypuśćmy, że masz w sesji przechowywany id tego usera (częsta praktyka) robisz JOINa między pageUrl i user_page, gdzie pageUrl.id = user_page.id_url i ograniczasz do tych rekordów WHERE user_page.id_user = id_usera z sesji smile.gif Masz w ten sposób wszystkie jego fav(!) i dodatkowo możesz nawet już teraz w WHERE oprócz id_usera walnąć sprawdzenie czy pageUrl.pageUrl jest równy adresowi z formularza. Jeśli zapytanie zwróci 0 wyników - jesteś w domu -> nie ma tego fava jeszcze i dodaj. Jest coś w wyniku -> link już jest w ulubionych. To samo będzie tyczyć dodawania i edycji. Sprawdzasz wpierw czy taki istnieje w fav. Jeśli nie, sprawdzasz czy taki url istnieje już w pageUrl. Jeśli tak wyciągasz jego id. Jeśli nie - dodajesz pozycję do tabeli i wyciągasz id. Uwaga na edycję! Tutaj nie sprawdzasz czy dany id już istnieje, ale czy taki link istnieje. Jest to niejako "powtórzenie" tego samego co przy insert winksmiley.jpg Edycja powiedzie się tylko gdy takiego linku nie ma wśród już będących fav, a na dodatek "edytowany" fav, przy całej operacji usuwa swoje połączenie z tabeli user_page smile.gif Robi to dlatego, by się nie zdublować, a dodatkowo jeśli adres url ulegnie zmianie, nie zostawi on "starego" ulubionego na liście. Zauważ też, że nie możesz usunąć nic z tabeli pageUrl, gdyż inni userzy mogą ten link mieć w swoich ulubionych. Możesz tylko usunąć samo powiązanie. Usunięcie zaś linka z ulubionych to proste usunięcie owego "łącznika" z tabeli user_page


Łał. Jesteś w stanie napisać kod z twoimi myślami? smile.gif
Go to the top of the page
+Quote Post

Posty w temacie
- FlashSplash   [PHP][MySQL] System Ulubionych - Wykonanie (2)   17.08.2010, 09:33:16
- - sebekzosw   KodSELECT * FROM `ulubione` WHERE `use...   17.08.2010, 09:43:26
|- - FlashSplash   Cytat(sebekzosw @ 17.08.2010, 10:43:2...   17.08.2010, 10:07:59
- - sebekzosw   KodCREATE TABLE `ulubione` ( `id...   17.08.2010, 10:12:59
- - thek   Tworzy Ci ją sama struktura tabeli ulubionych Ma...   17.08.2010, 10:29:56
- - FlashSplash   Hmm rozumiem trochę. Tylko czy ja miałem wstawić ...   17.08.2010, 10:34:42
- - sebekzosw   w tabeli `ulubione` zamieniasz `PageUR...   17.08.2010, 10:38:45
|- - FlashSplash   Cytat(sebekzosw @ 17.08.2010, 11:38:4...   17.08.2010, 10:48:57
- - thek   Dodajesz 2 tabele. Jedną podał Ci sebekzosw. Druga...   17.08.2010, 10:51:13
|- - FlashSplash   Cytat(thek @ 17.08.2010, 11:51:13 ) D...   17.08.2010, 11:24:05
- - sebekzosw   1)Wysyłasz formularz 2) Z tabeli `PageUrl...   17.08.2010, 11:35:24
|- - FlashSplash   Cytat(sebekzosw @ 17.08.2010, 12:35:2...   17.08.2010, 11:47:09
- - sebekzosw   tu masz dodawanie do ulubionych: [PHP] pobierz, p...   17.08.2010, 12:15:42
|- - FlashSplash   Cytat(sebekzosw @ 17.08.2010, 13:15:4...   17.08.2010, 12:40:01
- - thek   Sebekzosw... W relacji N-N istnieją 3 tabele z pol...   17.08.2010, 12:36:38
- - thek   Jestem w stanie, ale właśnie dlatego ładnie napisa...   17.08.2010, 13:14:34
|- - FlashSplash   Cytat(thek @ 17.08.2010, 14:14:34 ) J...   17.08.2010, 13:22:51
- - thek   Podam skrócony opis słowny 1. Przefiltruj url 2. P...   17.08.2010, 14:14:35


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:32