Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]autouzupełnienie
Sklep102
post 30.12.2019, 01:44:22
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Cześć,
Znalazłem w necie taki kod

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>Tag sys - mzielinski.pl</title>
  8.  
  9. <link href="css/bootstrap.min.css" rel="stylesheet">
  10. <link href="css/style.css" rel="stylesheet">
  11. <link href="css/autocomplete.css" rel="stylesheet">
  12. </head>
  13. <body>
  14. <div class="container">
  15. <div class="col-md-6 col-md-offset-3">
  16. <h1 class="text-center">TAG SYS - mzielinski.pl</h1>
  17. <p class="lead text-center">Simply tag system on MySQL.<br>Save or delete records.</p>
  18.  
  19. <form method="post" action="">
  20. <div class="row">
  21. <label>Tag:</label>
  22. <input class="form-control auto" type="text" id="tag" /> <br>
  23. <div class="btn btn-default" id="addTag">Add Tag</div>
  24. <div class="clearfix"></div><br>
  25. <div class="tagForm">
  26. <ul id="tagList">
  27. <? require('db.php');
  28. $tags = $mysqli->query("SELECT * FROM tags");
  29. if(mysqli_num_rows($tags) > 0) {
  30. while($tag = $tags->fetch_object()) {
  31.  
  32. echo "<li class=\"tag\" id=\"id_{$tag->id}\"> {$tag->tag} <button class=\"deleteTagExsit btn-warning\" id=\"id_{$tag->id}\">X</button></li>";
  33.  
  34. }
  35. }?>
  36. </ul>
  37. </div>
  38. <div class="buttons-box clearfix">
  39. <input class="btn btn-info btn-lg pull-right" type="submit" value="Save" name="save">
  40. </div>
  41. </div>
  42. </form>
  43.  
  44. <? if (isset($_POST['save'])) {
  45. if(!empty($_POST['multiTag'])) {
  46. foreach ($_POST['multiTag'] as $key=>$tag) {
  47.  
  48. $tag = mysqli_real_escape_string($mysqli,$tag);
  49. echo "Tag(s): ".$tag.", ";
  50.  
  51. $upTags = "INSERT INTO tags (tag) VALUES ('$tag')";
  52. if ($mysqli->query($upTags) === TRUE) echo "added to DB";
  53. header("Refresh:1");
  54. }
  55. }
  56. }?>
  57. <div class="footer text-center">Do you like it? Visit my page <a href="http://mzielinski.pl">mzielinski.pl</a> My work is usefull for you? Support me by BTC <div id="coinwidget-bitcoin-14Qaw1shp8ccg2n5jxzHD1DSfyTkYoKNqe"></div></div>
  58. </div>
  59. </div>
  60.  
  61. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  62. <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  63. <script src="js/bootstrap.min.js"></script>
  64. <script>
  65. $(function() {
  66. $( "#tag" ).autocomplete({
  67. source: 'autocomplete.php'
  68. });
  69. });
  70.  
  71. var id = 0;
  72. $("#addTag").click(function(){
  73. if($("#tag").val() ) {
  74.  
  75. id++;
  76. var li = document.createElement("li");
  77. li.className = "tag";
  78. li.setAttribute("id", id);
  79.  
  80. var i = document.createElement("INPUT");
  81. i.setAttribute("name","multiTag[]");
  82. i.setAttribute("type","hidden");
  83. i.setAttribute("id", id);
  84.  
  85. var tag = document.getElementById('tag').value;
  86.  
  87. li.innerHTML = " " + tag + ' <button class=\"deleteTag btn-warning\" id=\"'+id+'\">X</button>'
  88. i.setAttribute("value", tag);
  89.  
  90. $("#tagList").append(li)
  91. $("#tagList").append(i)
  92. $('#tag').val('');
  93. }});
  94.  
  95. $("#tagList").on('click', 'button.deleteTag', function() {
  96.  
  97. var idDiv = this.id;
  98. $("#"+idDiv).remove()
  99. $(":input[id='"+idDiv+"']").remove();
  100.  
  101. });
  102.  
  103. $("#tagList").on('click', 'button.deleteTagExsit', function() {
  104.  
  105. var del_id = this.id;
  106. var toDel = del_id.replace('id_', '');
  107. $("#id_"+toDel).remove();
  108. $.ajax({
  109. type:'POST',
  110. url:'delete_tag.php',
  111. data:'delete_id='+toDel
  112. });
  113.  
  114. });
  115. </script>
  116. <script src="//blockr.io/js_external/coinwidget/coin.js"></script>
  117. <script>
  118. CoinWidgetCom.go({
  119. wallet_address: '14Qaw1shp8ccg2n5jxzHD1DSfyTkYoKNqe',
  120. currency: 'bitcoin',
  121. counter: 'hide',
  122. lbl_button: 'Donate',
  123. lbl_count: 'donations',
  124. lbl_amount: 'BTC',
  125. lbl_address: 'Use address below to donate. Thanks!',
  126. qrcode: true,
  127. alignment: 'bl',
  128. decimals: 8,
  129. size: "big",
  130. color: "dark",
  131. countdownFrom: "1000",
  132. element: "#coinwidget-bitcoin-14Qaw1shp8ccg2n5jxzHD1DSfyTkYoKNqe",
  133. onShow: function(){},
  134. onHide: function(){}
  135. });
  136. </script>
  137. </body>
  138. </html>


link do strony osoby tworzącej skrypt : https://mzielinski.pl/tag-system-jquery-ajax-php-mysql/

chciałbym zapytać w jaki sposób można zablokować możliwość tworzenia nowych tagów i wykorzystywać tylko te które znajdują się w bazie danych? Dokładnie chodzi mi o to że po wpisaniu np test nie było możliwości wyboru/wpisania test1 ponieważ takiego takiego taga nie ma w bazie.
Go to the top of the page
+Quote Post
nospor
post 30.12.2019, 10:54:59
Post #2





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Chyba nie bardzo rozumiem.... skoro nie chcesz tworzyc nowych tagow, to wywal kod z INSERT INTO i juz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 30.12.2019, 13:03:30
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Wszystko fajnie ale, mam zdjęcie i chciałbym użyć tagu test jest on w bazie danych w tabeli tag id 1 i chciałbym aby ta liczba została zapisana do tabeli zdjecie tag_id 1
Go to the top of the page
+Quote Post
nospor
post 30.12.2019, 22:41:49
Post #4





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




No dobrze, wczesniej chciales nei dodawac do bazy to ci napisalem jak masz nie dodawac. Teraz chcesz wpisywac istniejace ID no to masz je na swojej liscie tagow razem z tagiem. Teraz jak slesz forma to slij razem z tym ID i juz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 1.01.2020, 01:39:05
Post #5





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Na podstawie twojej podpowiedzi zrobiłem coś takiego:

  1.  
  2. <?php if (isset($_POST['save'])) {
  3. if(!empty($_POST['multiTag'])) {
  4. foreach ($_POST['multiTag'] as $key=>$tag) {
  5.  
  6. $tag = mysqli_real_escape_string($mysqli,$tag);
  7.  
  8.  
  9.  
  10. $zapytanie = $pdo->prepare("SELECT * FROM tags WHERE tag like '".$tag."'");
  11. $zapytanie->execute();
  12. while($rekord = $zapytanie->fetch()) {
  13. $data = $rekord['id'];
  14. $pTags = "UPDATE `film` SET `tag_id`='$data' WHERE 1";
  15. if ($mysqli->query($pTags) === TRUE){ echo "";}
  16. echo "dodało:".$data;
  17.  
  18. }
  19. }
  20. }
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. }?>
  28.  


Mam pytanie odnośnie danych, ponieważ w chwili obecnej dodaje mi ostatni nr który się zgadza np. id 26 mimo to że jeśli dodam 2 tagi o id 21 oraz 26 to dodaje tylko 26 ktoś może wyjaśnić dlaczego tak się dzieje? Jeśli wyświetlam $data to pokazują oba nr mimo to w bazie pojawia się tylko jeden.

Ten post edytował Sklep102 1.01.2020, 02:58:15
Go to the top of the page
+Quote Post
trueblue
post 1.01.2020, 09:31:37
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Bo nie dodajesz do filmu nowych tagów tylko aktualizujesz istniejące, a właściwie jeden istniejący, który został wcześniej dodany.
Najpierw aktualizujesz id tego istniejącego tagu na 21, a następnie na 26. Powinieneś wstawiać tagi, przy czym w tej tabeli powinien być założony klucz unikalny na id filmu i id tagu.


--------------------
Go to the top of the page
+Quote Post
Sklep102
post 1.01.2020, 15:40:29
Post #7





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Cytat(trueblue @ 1.01.2020, 09:31:37 ) *
Bo nie dodajesz do filmu nowych tagów tylko aktualizujesz istniejące, a właściwie jeden istniejący, który został wcześniej dodany.
Najpierw aktualizujesz id tego istniejącego tagu na 21, a następnie na 26. Powinieneś wstawiać tagi, przy czym w tej tabeli powinien być założony klucz unikalny na id filmu i id tagu.


Chyba nie bardzo rozumiem, mam 2 tabele:

1. film
id
name
tag_id

2. tag
id
name

I teraz chciałbym pobrać id tagu z tabeli tag na podstawie name i zapisać do tabeli film do kolumny tag_id, tylko nie wiem czemu zamiast zapisywać id 21 oraz 26 jednocześnie zapisuje tylko ostatni nr. Może ktoś mnie nakierować w jaki sposób to wykonać?

Ten post edytował Sklep102 1.01.2020, 15:42:00
Go to the top of the page
+Quote Post
nospor
post 1.01.2020, 17:11:07
Post #8





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Po pierwsze: ja ci nie mowilem ze na podstawie tekstu masz pobierac ID tylko to ID masz od razu przesylac razem z formem. Ok, od wielkiej biedy twoje rozwiazanie tez ujdzie. srednio ladne ale ujdzie

Po drugie: w nawiazaniu do tego co napisal trueblue i twojej odpowiedzi:
Napisz mi prosze, swoimi slowami, co robi to zapytanie
"UPDATE `film` SET `tag_id`='$data' WHERE 1
Ja wiem co to robi, ale jak ty napiszesz a potem przeczytasz co napisales, to moze sam zrozumiesz jaka glupote tu robisz i zrozumiez to co napisal trueblue


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 3.01.2020, 16:42:50
Post #9





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Cytat(nospor @ 1.01.2020, 17:11:07 ) *
Po pierwsze: ja ci nie mowilem ze na podstawie tekstu masz pobierac ID tylko to ID masz od razu przesylac razem z formem. Ok, od wielkiej biedy twoje rozwiazanie tez ujdzie. srednio ladne ale ujdzie

Po drugie: w nawiazaniu do tego co napisal trueblue i twojej odpowiedzi:
Napisz mi prosze, swoimi slowami, co robi to zapytanie
"UPDATE `film` SET `tag_id`='$data' WHERE 1
Ja wiem co to robi, ale jak ty napiszesz a potem przeczytasz co napisales, to moze sam zrozumiesz jaka glupote tu robisz i zrozumiez to co napisal trueblue

Wiem w czym jest problem, ponieważ chce zaktualizować rekord w pętli dlatego dodaje tylko 1 id.

Poprawiłem trochę kod

  1. <?php if (isset($_POST['save'])) {
  2. if(!empty($_POST['multiTag'])) {
  3. foreach ($_POST['multiTag'] as $key=>$tag) {
  4.  
  5. $tag = mysqli_real_escape_string($mysqli,$tag);
  6.  
  7.  
  8. $tag1 = explode(" ", $tag);{
  9. $tag2 = implode( ", ", $tag1 );
  10. $zapytanie = $mysqli->query("SELECT * FROM tags WHERE tag like '".$tag2."'");
  11. if(mysqli_num_rows($zapytanie) > 0) {
  12. while($t1 = $zapytanie->fetch_object()) {
  13.  
  14. $t3 = "{$t1->id}";
  15.  
  16. }
  17.  
  18. }
  19.  
  20. }
  21.  
  22. $zap = $mysqli->query("UPDATE film SET `tag_id`='$t3' WHERE 1");
  23. echo $t3;
  24. }
  25.  
  26. }
  27. }?>


Próbuje zrobić to po za pętlą tylko że wtedy zamiast pobrać wszystkie id wybiera jedno :/
Może ktoś wyjaśnić jak to poprawić?
Go to the top of the page
+Quote Post
nospor
post 3.01.2020, 16:45:37
Post #10





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Nie odpowiedziales na moje pytanie, co robi
"UPDATE film SET `tag_id`='$t3' WHERE 1"


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 3.01.2020, 17:41:07
Post #11





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Cytat(nospor @ 3.01.2020, 16:45:37 ) *
Nie odpowiedziales na moje pytanie, co robi
"UPDATE film SET `tag_id`='$t3' WHERE 1"

Edytuje rekord.

Ponieważ w tej chwili chcę dodać całkiem nowe id_tag bez starych. Wybieram 3 tagi np. 1, 2, 3 i chce pobrać id tych nazw. Mam tylko problem z zapisem do bazy ponieważ zamiast 1, 2, 3 to zapisuje ostatni zamiast wszystkich 3. Rozumiem że robię to w pętli dlatego za każdym razem edytuje je i nie zostają stare. ale nie rozumiem dlaczego zapisuje id 3 zamiast 1, 2, 3 ponieważ sprawdzając $tag2 powinny być wszystkie 3.
Go to the top of the page
+Quote Post
nospor
post 3.01.2020, 17:47:06
Post #12





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004






1) UPDATE edytuje REKORDY w tabeli. Jak nie podasz warunku jaki rekord ma edytowac, to edytuje wszystkie, co ma wlasnie teraz miejsce u ciebie
2) No i caly ten twoj kod teraz to jedna wielka sieczka, nie wiem jakim cudem wpisuje ci nawet ostatni. Przeciez teraz szukasz tagu o nazwie "1,2,3". Naprawde masz taki tag w bazie?
3) Masz zla strukture bazy, bo tabela filmy nie powinna miec w sobie pola tag, tylko powinna byc dodakotwa tabela
FILM_TAG
z polami
film_id
tag_id

i poprostu do tej tabeli masz wkladac nowe tagi (INSERT) dla filmu


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 3.01.2020, 18:46:05
Post #13





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Wyszukiwanie id działa idealnie, w bazie mam 3 tagi:
Test
Test1
Test2
Pobieram id tagu: Test Test1 i wyświetla id 1, 2 wszystko super, problem pojawia sie przy próbie dodania tych wartości bezpośrednio do tabeli film przez $t3 ponieważ zapisuje ostatni rekord o id 2. W jaki sposob moge zapisac te 2 rekordy jeśli echo $t3 wyswietla 1, 2 A dodaje do bazy ostatni rekord wiem że robi to że względu na pętlę ale nie wiem jak zapisać oba...

3. Co do twojej sugestii. Rozumiem że każdy tag mam osobno przypisać do każdego filmu? Co w przypadku jeśli w bazie jest 300 filmów i każdy ma 10 tagow? Nie będzie problemu z przeszukaniem całej bazy?
Go to the top of the page
+Quote Post
nospor
post 3.01.2020, 18:56:33
Post #14





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
Co w przypadku jeśli w bazie jest 300 filmów i każdy ma 10 tagow? Nie będzie problemu z przeszukaniem całej bazy?
No wlasnie nie bedzie problemu. Wrecz przeciwnie. Przy twoim rozwiazaniu, gdzie tagi trzymasz w jednym polu to bedziesz mial problemy z wyszukiwaniem. Tak jak napisalem to tak sie wlasnie prawidlowo robi.

Co do twojego kodu to jestem juz zagubiony mowiac szczerze. po co to
$tag1 = explode(" ", $tag);{
$tag2 = implode( ", ", $tag1 );
i jednoczenie to
foreach ($_POST['multiTag'] as $key=>$tag) {
?

W jakij w koncu postaci wysylasz te tagi? Czy jest to tablica tagow w multiTag czy moze jest to jedno pole z wartosci tagow oddzielonych spacja?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 4.01.2020, 02:10:44
Post #15





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Mam prawie rozwiązanie, ale mam jeszcze 2 pytania.

1. Co do tabeli o której mówisz, czy powinno się dodawać name_tag i name_film, który będzie przechowywał nazwy filmów i tagów czy tego się nie robi tylko 2 zapytanie które wybiera nazwę filmu i tagu na podstawię id?

2. Jak można rozwiązać problem z tworzeniem nowego taga?
Dokładnie chodzi mi o to żeby dodać taga do konkretnego filmu muszę mieć jego id, tylko pytanie czy jest jakieś rozwiązanie aby to obejść? ponieważ zanim nie dodam filmu nie będę miał id. w tej chwili przychodzi mi tylko jedno rozwiązanie, najpierw dodać film do bazy później pobrać id na podstawię name i wtedy dopiero dodawać tagi? jest może jakieś inne rozwiązanie?


Odpowiadając na twoje pytanie, już usunąłem:

$tag1 = explode(" ", $tag);{
$tag2 = implode( ", ", $tag1 );

rzeczywiście niepotrzebny kod...
Go to the top of the page
+Quote Post
nospor
post 4.01.2020, 09:52:00
Post #16





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




ad1) Nie. Samo ID. Nie ma sensu duplikowac danych

ad2) Nie bardzo rozumiem problem chyba. Jesli jestes na etapie dodawania filmu, to przeciez mozesz juz na typ etapie wybrac tez tagi. Potem klikajac: ZAPISZ FILM idziesz do skryptu, ktore dodaje ten film, masz jego ID, i mozesz dodac tagi

Cytat
$tag1 = explode(" ", $tag);{
$tag2 = implode( ", ", $tag1 );

rzeczywiście niepotrzebny kod...

A widzisz, przez dlugi czas to mnie mylilo odnosnie tego jak dodajesz tagi i temu twoj kod nie mial sensu zadnego.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sklep102
post 4.01.2020, 11:13:43
Post #17





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 5.12.2019

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


Cytat(nospor @ 4.01.2020, 09:52:00 ) *
ad2) Nie bardzo rozumiem problem chyba. Jesli jestes na etapie dodawania filmu, to przeciez mozesz juz na typ etapie wybrac tez tagi. Potem klikajac: ZAPISZ FILM idziesz do skryptu, ktore dodaje ten film, masz jego ID, i mozesz dodac tagi

Właśnie skąd będę miał jego id muszę zrobić zapytanie które wybierze np. ostatnio dodany rekord dobrze rozumiem?
Go to the top of the page
+Quote Post
nospor
post 4.01.2020, 11:42:42
Post #18





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




https://www.php.net/manual/en/mysqli.insert-id.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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: 20.04.2024 - 00:40