Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Odczyt i zapis w tej samej tabeli na tej samej stronie, Edytowanie menu
v1t4n
post
Post #1





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

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


Witam

Chcialem zrobic mozliwosc edytowania menu. Problem pojawia sie gdy chce dodac nowy link do bazy, mianowicie na stronie ktora laczy sie z baza i dodaje wpis pojawia sie blad z wyswietlaniem menu. Problem wystepuje tylko na tej stronie - gdy przejdzie sie na inna wszystko jest w porzadku. Blad jest taki ze podaje mi pierwsze litery z nazwy i url do strony, wiec zamiast
  1. <a href="index.php">Strona glowna</a>

pokazuje sie '
  1. <a href="i">S</a>

Rowniez wpis do bazy ktory jest jednoczesnie tworzony jest bledny. Przekreca pierwsza litere z kazdego pola. Zamiast
Kod
Ksiega gosci

tworzy
Kod
asiega gosci

i zamiast
Kod
index.php?action=guestbook

wstawia
Kod
andex.php?action=guestbook


Nie wiem, moze wina wynika z bledu apache. Testowalem narazie tylko u siebie (korzystam z WebServa).

Kod wyswietlania menu: (w pliku cfg.txt zapisane sa zmienne dotyczace hosta, loginu, hasla i nazwy bazy mysql)
  1. <?php
  2. include('cfg.txt');
  3. $sql = mysql_connect($mysqlhost, $mysqllogin, $mysqlpassword);
  4. mysql_select_db($mysqldbname);
  5. echo(naglowek('Menu'));
  6. print '<div class="menu">';
  7. $sql2 = 'SELECT * FROM `menu` ORDER BY `id` ASC LIMIT 0, 30 ';
  8. $idsql2 = mysql_query($sql2);
  9. $menulicz=0;
  10. while($wiersz = mysql_fetch_array($idsql2))
  11. {
  12. $menuid[$menulicz]=$wiersz[0];
  13. $menuname[$menulicz]=$wiersz[1];
  14. $menuurl[$menulicz]=$wiersz[2];
  15. $menutarget[$menulicz]=$wiersz[3];
  16. if($menutarget[$menulicz]=1)
  17. {
  18. $menutarget[$menulicz]='';
  19. }
  20. if($menutarget[$menulicz]=0)
  21. {
  22. $menutarget[$menulicz]=' target="_blank"';
  23. }
  24. $href[0] = '--> <a href="';
  25. $href[1] = $menuurl[$menulicz];
  26. $href[2] = '"';
  27. $href[3] = $menutarget[$menulicz];
  28. $href[4] = '>';
  29. $href[5] = $menuname[$menulicz];
  30. $href[6] = '</a><BR>';
  31. $link = implode('', $href);
  32. print $link;
  33. }
  34. print '</div>';
  35. ?>

Dodawanie wpisu do bazy:
  1. <?php
  2. $sql3 = 'SELECT `id` FROM `menu` ORDER BY `id` DESC LIMIT 0, 1 ';
  3. $idsql3 = mysql_query($sql3);
  4. while ($wiersz = mysql_fetch_row($idsql3))
  5. {
  6. $ilosclinkow=$wiersz[0];
  7. }
  8. $ilosclinkow++;
  9. echo($ilosclinkow);
  10. $sql3 = 'INSERT INTO `menu` (`id`, `name`, `url`, `target`) VALUES (''. $ilosclinkow .'', ''. $menuname .'', ''. $menuurl .'', ''. $menutarget .'');';
  11. $sql3 = 'INSERT INTO `menu` (`id`, `name`, `url`, `target`) VALUES (''. $ilosclinkow .'', ''. $menuname .'', ''. $menuurl .'', ''. $menutarget .'');';
  12. mysql_query($sql3);
  13. print 'Link został pomyślnie dodany';
  14. ?>

Tekst skopiowalem ze srodka sformatowanego skryptu strony wiec jest duzo spacji.
Za ewentualna niewiedze ze stosowania podstawowych funkcji przepraszam i obiecuje sie poprawic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
uli
post
Post #2





Grupa: Zarejestrowani
Postów: 318
Pomógł: 6
Dołączył: 27.01.2005

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


Oczywiście że tak się dzieje, bo:

href[0] to 1-szy znak zmiennej href
href[1] to 2-gi znak zmiennej href

itd

Rozwiązanie:

Zamiast href[0], href[1] itd w ten sposób:

  1. <?php
  2. $link = '--> <a href="';
  3. $link .= $menuurl[$menulicz];
  4. $link .= '"';
  5. $link .= $menutarget[$menulicz];
  6. $link .= '>';
  7. $link .= $menuname[$menulicz];
  8. $link .= '</a><BR>';
  9. ?>


Wywalić:
$link = implode('', $href);

Widzisz już gdzie masz błąd? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
v1t4n
post
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

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


ale tak dzieje sie tylko gdy dodaje nowy link, normalnie dziala dobrze...
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


1. Przypisanie zamiast porównania:
  1. <?php
  2. if($menutarget[$menulicz]=1)
  3. ?>


2. Jeśli kolumna menu.id jest kluczem podstawowym z auto_increment, to nie musisz się bawić w sprawdzanie ostatniego ID i zwiększać go o jeden. W ogóle nie musisz bawić się z ID - jeśli nie wstawisz go do zapytania, to kolumna ta zostanie uzupełniona automatycznie.


Natomiast co do zamieniania pierwszej litery na "a", to nigdzie tego nie widzę. Wklej cały kod dodawania linków do bazy.
Go to the top of the page
+Quote Post
v1t4n
post
Post #5





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

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


  1. <?php
  2. if($cat=='addlink')
  3. {
  4. if (!isset($_SESSION['zalogowany']))
  5.  {
  6. echo(error('Musisz być zalogowany, żeby móc dodawać newsy.'));
  7. }
  8.  else
  9. {
  10.  
  11. $sql = mysql_connect($mysqlhost, $mysqllogin, $mysqlpassword);
  12. mysql_select_db($mysqldbname);
  13. $pytanie7 = 'SELECT `class` FROM `users` WHERE `username` = ''. $_SESSION['login'] .'' LIMIT 0, 30 ';
  14. $idzapytania5 = mysql_query($pytanie7);
  15. while ($wiersz = mysql_fetch_row($idzapytania5))
  16.  {
  17.  $_SESSION['classMS'] = $wiersz[0];
  18.  }
  19. if ($_SESSION['classMS']==3||$_SESSION['classMS']==4)
  20.  {
  21.  echo(error('Nie masz uprawnień żeby dodawać nowe newsy. Żeby móc dodawać newsy musisz mieć r
    angę "Klasowicz" lub "Admin". Aby zmienić rangę swojego konta poproś o to Admina.'
    ));
  22.  }
  23. if ($_SESSION['classMS']==1||$_SESSION['classMS']==2)
  24.  {
  25. echo(naglowek('Dodawanie linków'));
  26. echo(tree('3', 'Panel administracyjny --> Menu --> Dodaj link'));
  27. if($id==1||$id=='')
  28. {
  29. print 'Link zostanie automatycznie dodany jako ostatni. Jeżeli chcesz zmienić jego kole
    jność wejdź w edytowanie menu<P>'
    ;
  30. print '<table><form method="post" action="index.php?action=menusettings&cat=addlink&id=2"><tr>';
  31. print '<td width="100"><input type="text" name="menuname" size="18"></td>';
  32. print '<td width="190"><input type="text" name="menuurl" size="35"></td>';
  33. print '<td width="50"><select name="menutarget">';
  34. print '<option value="0" selected>W tym oknie</option>';
  35. print '<option value="1">W nowym oknie</option></select>';
  36. print '</td></tr></table><center><input type="submit" value="Dodaj link"></form>';
  37. }
  38. if($id==2)
  39. {
  40. $sql3 = 'SELECT `id` FROM `menu` ORDER BY `id` DESC LIMIT 0, 1 ';
  41. $idsql3 = mysql_query($sql3);
  42. while ($wiersz = mysql_fetch_row($idsql3))
  43. {
  44. $ilosclinkow=$wiersz[0];
  45. }
  46. $ilosclinkow++;
  47. echo($ilosclinkow);
  48. $sql3 = 'INSERT INTO `menu` (`id`, `name`, `url`, `target`) VALUES (''. $ilosclinkow .'', ''. $menuname .'', ''. $menuurl .'', ''. $menutarget .'');';
  49. mysql_query($sql3);
  50. print 'Link został pomyślnie dodany';
  51. }
  52.  }
  53.  }
  54. }
  55. ?>
Caly skrypt na dodawanie linkow. Podobny problem wystepuje gdy chce edytowac menu (IMG:http://forum.php.pl/style_emoticons/default/blink.gif) !? Gdy ustawie zeby menu w tym momencie w ktorym zmieniane sa wpisy w bazie sie nie wyswietlaly to dziala !? nie moge tego pojac, a poza tym wkurza mnie to prymitywne rozwiazanie ;/
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Co do prymitywnego rozwiązania, to muszę się zgodzić.

A co do literki "a":
1. Dodajesz link do bazy na podstawie informacji pobranych z formularza. Tutaj wszystko jest OK. Zmienna $menuname jest teraz oczywiście stringiem.
2. Następnie wyświetlasz menu (Patrz: kod z twojego pierwszego posta). W tym celu używasz niezadeklarowanych zmiennych jako tablic. Ale niezadeklarowane to one są tylko z pozoru. Tak naprawdę, to zmienna $menuname istnieje => patrz punkt 1.
3. Jako, że $menuname to jest string, to pisząc: $menuname[0] odwołujesz się do pierwszego znaku tego stringu, a nie pierwszego elementu tablicy
4. W pętli nie zwiększasz zmiennej $menulicz, więc z każdym przejściem nadpisywany jest pierwszy znak zmiennej $menuname pierwszym znakiem zmiennej $wiersz[1]
5. Tak samo podczas składania linku - odwołujesz się do pierwszego znaku stringu, a nie do pierwszego elementu tablicy, więc zamiast nazwy linku wyświetla ci jakieś "a"

6. Nie wstawiaj do swojego kodu funkcji: error_reporting( E_ALL | E_STRICT ); bo się przestraszysz
7. Powodzenia w pisaniu skryptów używających register_globals
Go to the top of the page
+Quote Post
v1t4n
post
Post #7





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

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


heh dzieki za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) ale jak sie robi po nocach to sie nie pamieta gdzie jaka zmienna byla (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.09.2025 - 13:44