Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][SQL]Tagowanie newsa
Forum PHP.pl > Forum > Przedszkole
viamarimar
Problem jest nastepujacego typu:
funkcja o nazwie mysql_insert_id(); ktora powinna zwracac id poprzednie inserta zweraca zero i pytanie do was dlaczego tak jest?

  1. $zapytanie=mysql_query("INSERT INTO ".$prefix."news (`news_id`, `news_users_id`, `news_tytul`, `news_tresc`, `news_kategorie_id`, `news_aktywny`, `news_dataDodania`, `news_dataWygasniecia`)
  2. VALUES('','".$user."','".$tytul."','".$tresc."', '".$kategoria."','".$aktywny."',NOW(), '".$datawygasniecia."')") or die(mysql_error());
  3. $result=mysql_query($zapytanie);
  4.  
  5. printf("Last inserted record has id %d\n", mysql_insert_id());
  6. $news = mysql_insert_id();
  7.  
  8.  
  9. $ile_wykonac = 0;
  10. $tag=explode(',', $tag);
  11. $tag=array_map('trim', $tag);
  12. $tag=array_unique($tag);
  13. foreach($tag as $i => $k){
  14. print($k.', ');
  15. $tag[] .=$k;
  16. $ile_wykonac=$ile_wykonac+1;
  17. }
  18.  
  19. for($i=0;$i<=$ile_wykonac;$i++){
  20. $zapytanie=mysql_query("INSERT INTO ".$prefix."tag (`tag_id`, `tag_news_id`, `tag_nazwa`)
  21. VALUES('','".$news."','".$tag[$i]."')") or die(mysql_error());
  22. $result=mysql_query($zapytanie);
  23. }
com
http://php.net/mysql_insert_id
Tu się zagląda a nie pisze na forum tam wszytko jest napisane smile.gif
com
Napisz jeszcze raz o co Ci chodzi
viamarimar
Dodaje tagi do tabli jak powyzej pokazalem , update na newsach robie j.w
Chce robiac upadte newsa robic rowniez aktualiazje poszczegolnych tagow

W zapisie tagi odzielone przy wyswietlaniu tagi sa na zasadzie

jas,malgosia,test,

dlatego kasuje ostatni znak

jas,malgosia,test

a teraz chce to edytowac tylko edytujac edytuje cala tabele
  1. $zap4 = "UPDATE ".$prefix."tag
  2. JOIN ".$prefix."news
  3. ON ".$prefix."news.news_id = ".$prefix."tag.tag_news_id
  4. SET tag_nazwa='".$tag[$i]."'
  5. WHERE ".$prefix."news.news_id='".$id."' ";


napewno dlatego ze uzywam tablicy opartej o $i , czyli np news mial 5 tagow i jak wiadac wyzej updaate zakreci sie 5 x nie bardzo mam pomysl jak to rozwiazac zeby moc zmieniac po 1 tagu

Majac 5 tagow dla newsa o id 39 po update wychodzi cos takiego, a chce zeby sie zmienialo po jednym, a nie wszystkie na raz


37 39 html1
39 39 html1
40 39 html1
41 39 html1
42 39 html1
43 39 html1

@ref





takie sa bledy, niektore wiedze pierwszy raz dlatego nie mam pojecia jak to zmienic pomimo ze to warning
najwazniejsze ze tagi sie nie edytuja a to byl priorytet
  1. Warning: explode() expects parameter 2 to be string, array given in xxxv\www\portfolio\include\panel\news.php on line 558
  2. Call Stack
  3. # Time Memory Function Location
  4. 1 0.0013 361808 {main}( ) ..\admin.php:0
  5. 2 1.0668 999912 include( 'xxx\www\portfolio\include\panel\news.php' ) ..\admin.php:56
  6. 3 1.0697 1000256 explode ( ) ..\news.php:558
  7.  
  8. ( ! ) Warning: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2 should be an array in xxx\www\portfolio\include\panel\news.php on line 559
  9. Call Stack
  10. # Time Memory Function Location
  11. 1 0.0013 361808 {main}( ) ..\admin.php:0
  12. 2 1.0668 999912 include( 'xxx\www\portfolio\include\panel\news.php' ) ..\admin.php:56
  13. 3 1.0701 1000208 array_map ( ) ..\news.php:559
  14.  
  15. ( ! ) Warning: array_unique() expects parameter 1 to be array, null given in xxx\www\portfolio\include\panel\news.php on line 560
  16. Call Stack
  17. # Time Memory Function Location
  18. 1 0.0013 361808 {main}( ) ..\admin.php:0
  19. 2 1.0668 999912 include( 'xxx\www\portfolio\include\panel\news.php' ) ..\admin.php:56
  20. 3 1.0705 1000208 array_unique ( ) ..\news.php:560
  21.  
  22. ( ! ) Warning: Invalid argument supplied for foreach() in xxx\www\portfolio\include\panel\news.php on line 561


to co wymyslilem
[spoiler]
  1. #edytowanie newsow
  2. if(isset($_GET['s']) && $_GET['s']=='news' && isset($_GET['a']) && $_GET['a']=='edytuj' && isset($_GET['id'])){
  3. $id=$_GET['id'];
  4. $query ="SELECT ".$prefix."news.*, ".$prefix."users.*,".$prefix."kategorie.*
  5. FROM ".$prefix."news
  6. LEFT JOIN ".$prefix."users
  7. ON ".$prefix."news.news_users_id = ".$prefix."users.users_id
  8. LEFT JOIN ".$prefix."kategorie
  9. ON ".$prefix."news.news_kategorie_id = ".$prefix."kategorie.kategorie_id
  10. WHERE ".$prefix."news.news_id ='".$id."'";
  11. $result=mysql_query($query);
  12. $wiersz=mysql_fetch_array($result);
  13. <form method="POST" action="admin.php?s=news&a=wyedytuj&id='.$wiersz['news_id'].'" role="form">
  14. <div class="row">
  15.  
  16. <div class="col-xs-8">
  17. Tytuł: <input type="text" class="form-control" name="tytul" value="'.$wiersz['news_tytul'].'" >
  18. </div>
  19.  
  20.  
  21. <div class="col-xs-8">
  22. Treść: <textarea class="ckeditor" name="tresc" >'.$wiersz['news_tresc'].'</textarea>
  23. </div>
  24.  
  25.  
  26.  
  27. <div class="col-xs-8">';
  28. echo 'Kategoria:';
  29. $result=mysql_query("SELECT kategorie_id,kategorie_nazwa FROM ".$prefix."kategorie");
  30. echo'<select name="kategoria" class="form-control place_holder" >';
  31.  
  32. while($r = mysql_fetch_assoc($result)) {
  33. echo '<option value='.$r['kategorie_id'].'>'.$r['kategorie_nazwa'].'</option>';
  34. }
  35.  
  36. echo '</select>';
  37. echo'</div>
  38.  
  39.  
  40. <div class="col-xs-8">';
  41.  
  42. $jutro = date('Y-m-d',strtotime("+1 day"));
  43. $za_trzy_dni = date('Y-m-d',strtotime("+3 day"));
  44. $za_tydzien = date('Y-m-d',strtotime("+1 week"));
  45. $za_miesiac = date('Y-m-d',strtotime("+1 month"));
  46. $za_rok = date('Y-m-d',strtotime("+1 year"));
  47. $wiele = date('Y-m-d',strtotime(" + 10 years 5 months 4 weeks 4 days"));
  48.  
  49. echo 'Data wygaśnięcia:';
  50. echo '<select class="form-control place_holder" name="datawygasniecia" required >';
  51. if($wiersz['news_dataWygasniecia']==$jutro){
  52. echo'<option value="'.$wiersz['news_dataWygasniecia'].'">Do jutra</option>';
  53. echo'<option value="'.$za_trzy_dni.'">Trzy dni</option>';
  54. echo'<option value="'.$za_tydzien.'">Tydzień</option>';
  55. echo'<option value="'.$za_miesiac.'">Miesiąc</option>';
  56. echo'<option value="'.$za_rok.'">Rok</option>';
  57. echo'<option value="'.$wiele.'">Bezterminowo</option>';
  58. }
  59. if($wiersz['news_dataWygasniecia']==$za_trzy_dni){
  60. echo'<option value="'.$wiersz['news_dataWygasniecia'].'">Trzy dni</option>';
  61. echo'<option value="'.$jutro.'">Do jutra</option>';
  62. echo'<option value="'.$za_tydzien.'">Tydzień</option>';
  63. echo'<option value="'.$za_miesiac.'">Miesiąc</option>';
  64. echo'<option value="'.$za_rok.'">Rok</option>';
  65. echo'<option value="'.$wiele.'">Bezterminowo</option>';
  66. }
  67. if($wiersz['news_dataWygasniecia']==$za_tydzien){
  68. echo'<option value="'.$wiersz['news_dataWygasniecia'].'">Tydzień</option>';
  69. echo'<option value="'.$jutro.'">Do jutra</option>';
  70. echo'<option value="'.$za_trzy_dni.'">Trzy dni</option>';
  71. echo'<option value="'.$za_miesiac.'">Miesiąc</option>';
  72. echo'<option value="'.$za_rok.'">Rok</option>';
  73. echo'<option value="'.$wiele.'">Bezterminowo</option>';
  74. }
  75. if($wiersz['news_dataWygasniecia']==$za_miesiac){
  76. echo'<option value="'.$wiersz['news_dataWygasniecia'].'">Miesiąc</option>';
  77. echo'<option value="'.$jutro.'">Do jutra</option>';
  78. echo'<option value="'.$za_trzy_dni.'">Trzy dni</option>';
  79. echo'<option value="'.$za_tydzien.'">Tydzień</option>';
  80. echo'<option value="'.$za_rok.'">Rok</option>';
  81. echo'<option value="'.$wiele.'">Bezterminowo</option>';
  82. }
  83. if($wiersz['news_dataWygasniecia']==$za_rok){
  84. echo'<option value="'.$wiersz['news_dataWygasniecia'].'">Rok</option>';
  85. echo'<option value="'.$jutro.'">Do jutra</option>';
  86. echo'<option value="'.$za_trzy_dni.'">Trzy dni</option>';
  87. echo'<option value="'.$za_tydzien.'">Tydzień</option>';
  88. echo'<option value="'.$za_miesiac.'">Miesiąc</option>';
  89. echo'<option value="'.$wiele.'">Bezterminowo</option>';
  90. }
  91. if($wiersz['news_dataWygasniecia']==$wiele){
  92. echo'<option value="'.$wiersz['news_dataWygasniecia'].'">Bezterminowo</option>';
  93. echo'<option value="'.$jutro.'">Do jutra</option>';
  94. echo'<option value="'.$za_trzy_dni.'">Trzy dni</option>';
  95. echo'<option value="'.$za_tydzien.'">Tydzień</option>';
  96. echo'<option value="'.$za_miesiac.'">Miesiąc</option>';
  97. echo'<option value="'.$za_rok.'">Rok</option>';
  98. }
  99.  
  100. echo '</select>';
  101.  
  102. echo'</div>
  103.  
  104. <div class="col-xs-8">';
  105. #Aktywny: <input type="text" class="form-control" name="aktywny" value="'.$wiersz['aktywny'].'" >
  106. echo 'Aktywny:';
  107. echo '<select class="form-control place_holder" name="aktywny" required >';
  108. if($wiersz['news_aktywny']==1){
  109. echo'<option value="'.$wiersz['news_aktywny'].'">1</option>';
  110. echo'<option value="0">0</option>';
  111. }
  112. if($wiersz['news_aktywny']==0){
  113. echo'<option value="'.$wiersz['news_aktywny'].'">0</option>';
  114. echo'<option value="1">1</option>';
  115. }
  116. echo '</select>';
  117. echo'</div>';
  118.  
  119. $query ="SELECT ".$prefix."news.*,".$prefix."tag.*
  120. FROM ".$prefix."news
  121. LEFT JOIN ".$prefix."tag
  122. ON ".$prefix."news.news_id = ".$prefix."tag.tag_news_id
  123. WHERE news_id='".$id."'";
  124. $result=mysql_query($query);
  125.  
  126. echo'<div class="col-xs-8">
  127. Tagi: <textarea class="text" name="tag[]" >';
  128. $tag = null;
  129. while($r = mysql_fetch_assoc($result)) {
  130. $tag .= $r['tag_nazwa'].",";
  131. }
  132. $rest = substr($tag, 0, -1);
  133. echo $rest;
  134. echo'</textarea>
  135. </div>';
  136.  
  137.  
  138. echo'<div class="col-xs-8">
  139. <input type="hidden" name="edytuj" value="1" />
  140. <input type="submit" class="btn btn-default" value="Edytuj" name="submit" >
  141. </div>
  142. </form>';
  143. }
  144.  
  145. #edytowanie newsow
  146.  
  147. #----------------------------------------------------------------------------------
  148. #wyedytuj news
  149.  
  150. if(isset($_GET['s']) && $_GET['s']=='news' && isset($_GET['a']) && $_GET['a']=='wyedytuj' && isset($_GET['id'])){
  151.  
  152. if(isset($_POST['edytuj']) && ($_POST['edytuj'])==1) {
  153.  
  154. #filtriowanie
  155. $tytul = filtrujDane($_POST['tytul']);
  156. $tresc = filtrujDane($_POST['tresc']);
  157. $kategoria = filtrujDane($_POST['kategoria']);
  158. $datawygasniecia = filtrujDane($_POST['datawygasniecia']);
  159. $aktywny = filtrujDane($_POST['aktywny']);
  160.  
  161. $tag = array_map(function($val)
  162. {
  163. }, $_POST['tag']);
  164. #koniec filtrowania
  165.  
  166. $id=$_GET['id'];
  167.  
  168.  
  169. $zap3 = "UPDATE ".$prefix."news JOIN ".$prefix."kategorie ON ".$prefix."news.news_kategorie_id = ".$prefix."kategorie.kategorie_id
  170. SET news_tytul='".$tytul."', news_tresc='".$tresc."',news_kategorie_id='".$kategoria."', news_dataWygasniecia='".$datawygasniecia."',news_aktywny='".$aktywny."', news_dataEdycji=NOW()
  171. WHERE ".$prefix."news.news_id='".$id."' ";
  172. $result=mysql_query($zap3) or die (mysql_error());
  173.  
  174.  
  175.  
  176. $ile_wykonac = 0;
  177. $tag=explode(',', $tag);
  178. $tag=array_map('trim', $tag);
  179. $tag=array_unique($tag);
  180. foreach($tag as $i => $k){
  181. $tag[] .=$k;
  182. $ile_wykonac=$ile_wykonac+1;
  183. }
  184.  
  185. for($i=0;$i<=$ile_wykonac;$i++){
  186. $zap4 = "UPDATE ".$prefix."tag
  187. JOIN ".$prefix."news
  188. ON ".$prefix."news.news_id = ".$prefix."tag.tag_news_id
  189. SET tag_nazwa='".$tag."'
  190. WHERE ".$prefix."news.news_id='".$id."' AND tag_news_id ='".$id."' AND tag_nazwa ='".$tag[$i]."' ";
  191.  
  192. var_dump($zap4);
  193. var_dump($tag[$i]);
  194. var_dump($tag);
  195. $result=mysql_query($zap4) or die(mysql_error());
  196. }
  197.  
  198. #header("location: admin.php?s=news&a=wys&k=edit");
  199.  
  200.  
  201. }
  202. }
  203.  
  204. #wyedytuj news
[/spoiler]
nospor
Cytat
Warning: explode() expects parameter 2 to be string, array given
Przeciez wyraźnie masz napisane:
funkcja EXPLODE jako drugi parametr wywołania oczekuje tekstu, a ty jej dajesz tablice.

ps: i nie kasuj postow, gdy ktos juz na nie odpowiadał.
viamarimar
problem w tym ze nie wiem dokladnie jak odebrac wartosc z

  1. Tagi: <textarea class="text" name="tag[]" >';

i dlatego takie komplikacje, liczylem ze ktos wskaze mi drogie

-tagi chce przekazywac jako tablice
- chyba kazdy tag powienien byc w osobnym polu tablicy?

i nie wiem jak to roziwazac zeby dalo sie to wykonac i edytowac je
nospor
Skoro tagi przekazujesz teraz jako tablice, a nie jako tekst oddzielony przecinkami, to chyba to:
$tag=explode(',', $tag);
juz ci nie jest potrzebne, nie sądzisz?
viamarimar
No tak.. moj blad

ale pobierajac w ten sposob i chcac uzupelnic tablice $tag wszystko wpisuje sie na pierwsza pozycje (kazdy tag) dlaczego?
  1. foreach($_POST['tag'] as $k){
  2. $tag[$ile_wykonac] =$k;
  3. echo $tag[$ile_wykonac]."<br> ". $k. "<br> ";
  4.  
  5. $ile_wykonac=$ile_wykonac+1;
  6. }
com
No bo $_POST['tag'] ma tylko 1 element
viamarimar
A jak to zmienic?
Rozumiem ze do tablicy wchodzi wszystko z textarea ale nie chce rozdzielac tego na kilka inputow bo przy np 100 tagach bylo by to gupie. Chodz kazdy tag mialby swoj name. Jak rozwiazac ta sytuacje?
com
No ustalasz jakis separator i robisz to explode smile.gif
viamarimar
ale nie moge juz przez post przekazywac tablicy wtedy?
bo jak mowil pan up , nie uzyje explode
musi byc cos takiego:
  1. Tagi: <textarea class="text" name="tag" >';
com
No,tylko Ty tablicy nie potrzebujesz tutaj. Tablice bd mial z explode
viamarimar
Rozumiem z ta tablica. Jestem bardzo wdzeczny (jendemu i drugiemu)
Tylko jak teraz sklicic zapytanie na podstawie tego, bo nazwe juz mam, ale jak wykonac UPDATE

wytworzona w ten sposob tablica tag jest zarowno tablica starych jak i nowych tagow , trzeba by bylo miec tablice na stare i tablice na nowe tagi?

tylko jesli..
  1. Tagi: <textarea class="text" name="tag" >';

to dotyczy nowego tagu, i utowrzone dane na podstawie tego beda dotyczyc tez zmian, a skad informacje o tym co bylo/jest aktualnie?

i czy zapytanie musi byc w pentli? wydaje mi sie ze tak bo musimy w koncu skakac po tablicy?

  1. $ile_wykonac = 0;
  2. #print($_POST['tag']);
  3. $tag = $_POST['tag'];
  4. $tag=explode(',', $tag);
  5. $tag=array_map('trim', $tag);
  6. $tag=array_unique($tag);
  7. foreach($tag as $i => $k){
  8. echo $k."<br>";
  9. $ile_wykonac=$ile_wykonac+1;
  10. }
  11. echo "<p>".$tag[2]; #przechowuje nazwe taga o 2 pozycji
  12.  
  13. for($i=0;$i<=$ile_wykonac;$i++){
  14. $zap4 = "UPDATE ".$prefix."tag
  15. JOIN ".$prefix."news
  16. ON ".$prefix."news.news_id = ".$prefix."tag.tag_news_id
  17. SET tag_nazwa='".$tag[$i]."'
  18. WHERE ".$prefix."news.news_id='".$id."' AND tag_news_id ='".$id."' AND tag_nazwa ='".$tag[$i]."' ";
  19. $result=mysql_query($zap4) or die(mysql_error());
  20. }



  1. string 'UPDATE wpl_tag
  2.  
  3. JOIN wpl_news
  4.  
  5. ON wpl_news.news_id = wpl_tag.tag_news_id
  6.  
  7. SET tag_nazwa='as3333d'
  8.  
  9. WHERE wpl_news.news_id='62' AND tag_news_id ='62' AND tag_nazwa ='as3333d'
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.