Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [mysql] usuwanie i edycja rekordów...
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
kononowicz
witam.

poniżej jest kod wyświetlający tabelkę. Mam prośbę czy ktoś byłby w stanie wytłumaczyć mi jak usunąć i edytować dany wiersz tabeli?questionmark.gif? konkretnie o co chodzi w

  1. <?php
  2. <a href="index.php?a=del&id={$r['id']}">usuń</a>
  3. <a href="index.php?a=edit&id={$r['id']}">edytuj</a>
  4. ?>


prosiłbym w miarę łapotologicznie...

  1. <?php
  2. if(mysql_num_rows($wynik) > 0) {
  3. echo "<table cellpadding="2" border=1>";
  4. while($r = mysql_fetch_assoc($wynik)) {
  5. echo "<tr>";
  6. echo "<td>".$r['TOWARY']."</td>";
  7. echo "<td>".$r['KOD']."</td>";
  8. echo "<td>".$r['CENA']."</td>";
  9. echo "<td>".$r['DZIALY']."</td>";
  10. echo "<td>
  11.  <a href="index.php?a=del&id={$r['id']}">usuń</a>
  12.  <a href="index.php?a=edit&id={$r['id']}">edytuj</a>
  13.  </td>";
  14. echo "</tr>";
  15. }
  16. ?>


Z góry dziekuję exclamation.gif! smile.gif
wipo
Usuwanie to po prostu daj
if (is_numeric($_GET['id'])){
if (mysql_query("delete from tabela where id=".$_GET['id']))
print "usuniete";
else
print "nie usunięte";
}

Co do edycji to musisz najpierw wyświetlić dane wartości a potem możesz zrobić $_POST do bazy
Poszukaj troche a znajdziesz
kononowicz
Cytat(wipo @ 13.11.2006, 15:28:16 ) *
Usuwanie to po prostu daj
if (is_numeric($_GET['id'])){
if (mysql_query("delete from tabela where id=".$_GET['id']))
print "usuniete";
else
print "nie usunięte";
}

Co do edycji to musisz najpierw wyświetlić dane wartości a potem możesz zrobić $_POST do bazy
Poszukaj troche a znajdziesz



to znaczy po wstawieniu tego skryptu powinien usuwać??
hmmm... nie działa mi... czy musze jeszcze coś zmienić questionmark.gif
wipo
Nie widze dokładnie jaką masz tabele
zobacz na zapytanie SQL
kononowicz
oczywiście tabele zmieniłem - `towary`

cos jeszcze zmienic??


dla ścisłosci tabela wygląda tak:

wipo
a wpisz mysql_error();
Neojawor
nie wiem czy dobrze łapię, bo jestem jeszcze raczkujący, ale wystarczy że w pliku index.php dasz (przed funkcją wyświetlającą) kod
  1. <?php
  2. if ($a="del") {
  3. delete from tabela where id=".$_GET['id'];
  4. print "usuniete";
  5. }
  6. else
  7. print "nie usunite";
  8. ?>

co do edycji, to zrobiłbym to na osobnym pliku, tzn zamiast
  1. <a href=\"index.php?a=edit&id={$r['id']}\">edytuj</a>

dałbym:
  1. <a href=\"edytuj.php?id={$r['id']}\">edytuj</a>

Wtedy w pliku edytuj.php będzie formularz, w którym będą wprowadzone dane z rekordu o podanym id i będzie można po prostu przeedytować poszczególne dane w formularzu i wysłać do bazy
kononowicz
oto cały kod tego skrytu do wyświetlania:

  1. <html>
  2. <head>
  3. <title>baza mysql - usuwanie - test</title>
  4. </head>
  5. <body>
  6. <?php
  7. // nawiazujemy polaczenie
  8. $connection = @mysql_connect('localhost', '********', '*******')
  9. // w przypadku niepowodznie wyświetlamy komunikat
  10. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  11. // połączenie nawiązane ;-)
  12. echo "Połączono z serwerem<br />";
  13. // nawiązujemy połączenie z bazą danych
  14. $db = @mysql_select_db('*******', $connection)
  15. // w przypadku niepowodzenia wyświetlamy komunikat
  16. or die('Brak połączenia z bazą towarów <br />Błąd: '.mysql_error());
  17. // połączenie nawiązane ;-)
  18. echo "Połączono z bazą towarów<br /> ";
  19. // zamykamy połączenie
  20.  
  21.  
  22.  
  23. /* zapytanie do konkretnej tabeli */
  24. $wynik = mysql_query("SELECT `towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dzialy`.`DZI
    ALY`
  25. FROM `towary` , `dzialy`
  26. WHERE `towary`.`ID_DZIALY` = `dzialy`.`ID`
  27. LIMIT 0 , 30 ;")
  28. or die('Błąd zapytania');
  29.  
  30. /*
  31. wyświetlamy wyniki, sprawdzamy,
  32. czy zapytanie zwróciło wartość większą od 0
  33. */
  34. if(mysql_num_rows($wynik) > 0) {
  35. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  36. echo "<table cellpadding="2" border=1>";
  37. while($r = mysql_fetch_assoc($wynik)) {
  38. echo "<tr>";
  39. echo "<td>".$r['TOWARY']."</td>";
  40. echo "<td>".$r['KOD']."</td>";
  41. echo "<td>".$r['CENA']."</td>";
  42. echo "<td>".$r['DZIALY']."</td>";
  43. echo "<td>
  44.  <a href="pokaz_test.php?a=del&amp;id={$r['id']}">usuń</a>
  45.  <a href="pokaz.php?a=edit&amp;id={$r['id']}">edytuj</a>
  46.  </td>";
  47. echo "</tr>";
  48. }
  49. echo "</table>";
  50. $ilosc_wierszy = mysql_num_rows($wynik);
  51. echo "<br>ilość danych w bazie: $ilosc_wierszy <br>";
  52. }
  53.  
  54. if (is_numeric($_GET['id'])){
  55. if (mysql_query("delete * from `towary` where id=".$_GET['id']))
  56. {
  57. print "usuniete";
  58. }
  59. else
  60. {
  61. print "nie usunięte";
  62. }
  63. }
  64.  
  65.  
  66. if(mysql_num_rows($wynik) == 0)
  67. {
  68. echo "<br>";
  69. echo "baza towarów jest pusta";
  70. }
  71. mysql_close($connection);
  72. ?>
  73.  
  74. </body>
  75. </html>


klikając na usuń nie sie nie dzieje... nie pojawia się nawet żaden błąd... cały czas wyświetla tabele.


a chodzi mi o to ,zeby pojawiała sie tabela i obok koło rekordu pojawiała sie opcja usun i edytuj akurat dla tego rekordu... po czym wraca mi ładnie do wyświetlania...


ps. ewentualnie gdyby ktoś miał jakis gotowy skrypt do wyświetlania z mozliwoscia edycji i usuniecia rekordu to byłbym wdzieczny smile.gif


po wstawieniu tego kodu do pętli wyświetlającej wychodzi mi :

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /home/*******************/pokaz_test.php on line 47
wipo
Nie wiem czy zauważyłeś ale nie zgadza się wielkość liter (popatrz dokładnie)
kononowicz
chodzi o ID tak?? zmieniłem i nadal nic sadsmiley02.gif
Neojawor
Ten kod:
  1. <a href=\"pokaz_test.php?a=del&id={$r['id']}\">usuń</a>

działa tak, po kliknięciu "usuń" ładuje Ci się plik pokaz_test.php i jednocześnie wysyła ci info, że w zmiennej a masz wartość "del", a w zmiennej id masz id danego rekordu (pod warunkiem, że będzie Ci się zgadzała wielkość liter). Oznacza to, że w pliku wywoływanym pokaz_test.php musisz umieścić skrypt usuwający rekord o podanym id, pod warunkiem że $a="del". To jest cała filozofia.
Napisz najpierw, czy ten podany przez Ciebie skrypt to jest plik pokaz_test.php, czy też jakiś inny?
kononowicz
ten cały plik nazywa sie pokaz_test.php

komunikat

nie usunięte1064You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '* from `towary` where ID=' at line 1

wychodzi mi jak zrobiłem plik usun.php

  1. <?php
  2. if ($a="del"){
  3. if (mysql_query("delete * from `towary` where ID=".$_GET['ID']))
  4. {
  5. echo "usuniete";
  6. }
  7. else
  8. {
  9. echo "nie usunięte";
  10. }}
  11. ?>


wiecie moze co to oznacza??
wipo
ale przez get przekazujesz małe id a nie duże
Neojawor
Więc wstaw to co ci wcześniej napisałem (kod usuwający rekord) przed linijkę:
  1. <?php
  2. if(mysql_num_rows($wynik)
  3. ?>

Musisz wsadzić to przed if-a, bo usunięcie ma być wykonane bez względu na wszystko (z wyjątkiem warunku że $a="del").
Gdybyś wsadził ten kod w pętlę, to chciałoby ci wywalić ten rekord tyle razy ile masz innych rekordów, a jeśli dasz go poniżej pętli wyświetlającej, to najpierw wyświetli Ci rekord wybrany do usunięcia, a dopiero później go usunie - wtedy będzie ryzyko, że klikniesz "usuń" lub "edytuj" dla rekordu, który został właśnie usunięty. Łapiesz o co chodzi?
aha i usuń to co podał wipo, bo to będzie powtórzenie funkcji usuwania.

i dla pewności - z tymi dużymi literami, to jeśli masz w tabeli ID, a nie id, to musisz mieć
  1. <a href=\"pokaz_test.php?a=del&id={$r['ID']}\">usuń</a>


edit:
mała pomyłka tongue.gif nie podałem kodu usówającego, więc po prostu weź ten kod co podał Ci wipo ale wstaw tam gdzie mówiłem
skowron-line
  1. <?php
  2. if(isset($_GET['id'])){
  3. if (is_numeric($_GET['id'])){
  4. if (mysql_query("delete from tabela where id=".$_GET['id']))
  5. print "usuniete";
  6. else
  7.  print "nie usunięte";
  8. }
  9. }
  10. ?>
kononowicz
a wiecie moze jak napisać mysql_query w skrypcie ktory ma usuwac??

wyzej w moim poscie jest screen z phpmyadmina z tabelą...
skowron-line
  1. <?php
  2. mysql_query("delete  from `towary` where ID=".$_GET['ID'])
  3. ?>
kononowicz
Cytat(skowron-line @ 13.11.2006, 21:48:44 ) *
  1. <?php
  2. mysql_query("delete  from `towary` where ID=".$_GET['ID'])
  3. ?>



hmmm... i tak własnie napisałem a tu mi wyświetla:
1064You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


plik usun.php:

  1. <?php
  2. if ($a="del")
  3. {
  4. if (mysql_query("delete from `towary` where ID=".$_GET['id']))
  5. {
  6. echo "usuniete";
  7. }
  8. else
  9. {
  10. echo "nie usunięte";
  11. }
  12. }
  13. ?>
skowron-line
  1. <?php
  2. mysql_query('delete  from `towary` where ID='.$_GET['ID'].' ')
  3. ?>
kononowicz
czy na prawdę na forum z fachowcami od phpa nikt nie potrafi mi pomoc?questionmark.gif? dwa posty wyzej jest konkretne pytanie...
wipo
A którego masz php-a i mysql-a?
Możliwe że masz starszą wersję, która nie obsługuje takiej formy zapytań
Kod
mysql_query('delete   from `towary` where ID='.$_GET['ID'])
mike
~kononowicz a może zajrzysz tutaj: zasady panujące na forum Przedszkole i poprawisz tytuł wątku, co?

Nie rozumiem o co się żalisz, przecież ~skowron-line cały czas stara Ci się pomóc.
A poza tym robisz takie byki że szok. Czytaj bardziej wnikliwie kod który piszesz.

Podpowiem:
  1. <?php
  2.  
  3. if ($a="del")
  4. // ...
  5.  
  6. ?>
ten warunek jest zawsze spełniony.
kononowicz
Cytat(mike_mech @ 14.11.2006, 09:02:29 ) *
~kononowicz a może zajrzysz tutaj: zasady panujące na forum Przedszkole i poprawisz tytuł wątku, co?

Nie rozumiem o co się żalisz, przecież ~skowron-line cały czas stara Ci się pomóc.
A poza tym robisz takie byki że szok. Czytaj bardziej wnikliwie kod który piszesz.

Podpowiem:
  1. <?php
  2.  
  3. if ($a="del")
  4. // ...
  5.  
  6. ?>
ten warunek jest zawsze spełniony.


ten warunek własnie ktos mi podał więc uznałem to za pewnik tongue.gif ...
wipo
daj if ($a=="del")
mike
Cytat(kononowicz @ 14.11.2006, 11:53:53 ) *
ten warunek własnie ktos mi podał więc uznałem to za pewnik tongue.gif ...

Już w podstawówce uczy się dzieci myślenia podczas przepisywania z tablicy tongue.gif

Prosiłem Cie o cos w poprzednim poście, potraktuj tego posta jako drugą prośbę.
skowron-line
a moze dac ci gotowca zebys sie nie meczyl??
kononowicz
Cytat(skowron-line @ 14.11.2006, 15:55:01 ) *
a moze dac ci gotowca zebys sie nie meczyl??



gdzies tam wyżej o to prosiłem ... więc gdybys mogł byłbym bardzo wdzieczny... to jest dla mnie bardzo wazne a nie jestem az tak zagłębiony w php... z góry dzieki
skowron-line
  1. <?php
  2.  
  3. //wyswietlanie SELECT
  4.  
  5. while($wiersz = mysql_fetch_array($query)){
  6. '.$wiersz['nazwa'].'
  7. <a href="index.php?edit='.$wiersz['id'].'">edit</a>
  8. <a href="index.php?del='.$wiersz['id'].'">del</a>
  9.  
  10. ';
  11. }
  12.  
  13. if(isset($_GET['edit'])){
  14. //wyswietlanie SELECT WHERE ID = $_GET['edit']
  15. echo'<form action="" method="post">';
  16. while($wiersz = mysql_fetch_array($query)){
  17. <input type="text" name="nazwa" value="'.$wiersz['nazwa'].'">
  18. ';
  19. }
  20. echo'<input type="submit" name="submit">';
  21. echo'</form>';
  22.  
  23. if(isset($_POST['submit'])){
  24. //sprawdzasz czy pola nie sa puste
  25.  
  26. //jesli nie sa to zapis do bazy
  27. }
  28.  
  29. }
  30.  
  31. if(isset($_GET['del'])){
  32. //usuwanie 
  33. }
  34. ?>

mozesz jeszcze sprawdzac czy ID jest liczba to tak apropo SQL Injection
kononowicz
Cytat(skowron-line @ 14.11.2006, 19:37:36 ) *
  1. <?php
  2.  
  3. //wyswietlanie SELECT
  4.  
  5. while($wiersz = mysql_fetch_array($query)){
  6. '.$wiersz['nazwa'].'
  7. <a href="index.php?edit='.$wiersz['id'].'">edit</a>
  8. <a href="index.php?del='.$wiersz['id'].'">del</a>
  9.  
  10. ';
  11. }
  12.  
  13. if(isset($_GET['edit'])){
  14. //wyswietlanie SELECT WHERE ID = $_GET['edit']
  15. echo'<form action="" method="post">';
  16. while($wiersz = mysql_fetch_array($query)){
  17. <input type="text" name="nazwa" value="'.$wiersz['nazwa'].'">
  18. ';
  19. }
  20. echo'<input type="submit" name="submit">';
  21. echo'</form>';
  22.  
  23. if(isset($_POST['submit'])){
  24. //sprawdzasz czy pola nie sa puste
  25.  
  26. //jesli nie sa to zapis do bazy
  27. }
  28.  
  29. }
  30.  
  31. if(isset($_GET['del'])){
  32. //usuwanie 
  33. }
  34. ?>

mozesz jeszcze sprawdzac czy ID jest liczba to tak apropo SQL Injection



dzieki... jezeli bede miał jeszcze jakis problem apropos usuwania to dam znac... smile.gif

  1. <html>
  2. <head>
  3. <title>baza mysql - rafal - test</title>
  4. </head>
  5. <body>
  6. <?php
  7. // nawiazujemy polaczenie
  8. $connection = @mysql_connect('localhost', 'rafkaz', 'zaz367ol')
  9. // w przypadku niepowodznie wyświetlamy komunikat
  10. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  11. // połączenie nawiązane ;-)
  12. echo "Połączono z serwerem<br />";
  13. // nawiązujemy połączenie z bazą danych
  14. $db = @mysql_select_db('rafkaz', $connection)
  15. // w przypadku niepowodzenia wyświetlamy komunikat
  16. or die('Brak połączenia z bazą towarów <br />Błąd: '.mysql_error());
  17. // połączenie nawiązane ;-)
  18. echo "Połączono z bazą towarów<br /> ";
  19. // zamykamy połączenie
  20. /* zapytanie do konkretnej tabeli */
  21. $wynik = mysql_query("SELECT `towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dzialy`.`DZI
    ALY`
  22. FROM `towary` , `dzialy`
  23. WHERE `towary`.`ID_DZIALY` = `dzialy`.`ID`
  24. LIMIT 0 , 30 ;")
  25. or die('Błąd zapytania');
  26. /*wyświetlamy wyniki, sprawdzamy,
  27. czy zapytanie zwróciło wartość większą od 0*/
  28. if(mysql_num_rows($wynik) > 0) {
  29. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  30. echo "<table cellpadding="2" border=1>";
  31. while($wiersz = mysql_fetch_assoc($wynik)) {
  32. echo "<tr>";
  33. echo "<td>".$wiersz['TOWARY']."</td>";
  34. echo "<td>".$wiersz['KOD']."</td>";
  35. echo "<td>".$wiersz['CENA']."</td>";
  36. echo "<td>".$wiersz['DZIALY']."</td>";
  37. echo "<td>
  38.  <a href="pokaz_test.php?del='.$wiersz['ID'].'">usuń</a>
  39.  <a href="pokaz_test.php?edit='.$wiersz['ID'].'">edytuj</a>
  40.  </td>";
  41. echo "</tr>";
  42. }
  43. echo "</table>";
  44. $ilosc_wierszy = mysql_num_rows($wynik);
  45. echo "<br>ilość danych w bazie: $ilosc_wierszy <br>";
  46. }
  47. if(mysql_num_rows($wynik) == 0)
  48. {
  49. echo "<br>";
  50. echo "baza towarów jest pusta";
  51. }
  52. if(isset($_GET['edit'])){
  53. //wyswietlanie SELECT WHERE ID = $_GET['edit']
  54. echo'<form action="" method="post">';
  55. while($wiersz = mysql_fetch_array($wynik)){
  56. echo'<input type="text" name="nazwa" value="'.$wiersz['TOWAR'].'">';
  57. echo'<input type="text" name="nazwa" value="'.$wiersz['KOD'].'">';
  58. echo'<input type="text" name="nazwa" value="'.$wiersz['CENA'].'">';
  59. echo'<input type="text" name="nazwa" value="'.$wiersz['DZIALY'].'">';
  60. }
  61. echo'<input type="submit" name="submit">';
  62. echo'</form>';
  63.  
  64. if(isset($_POST['submit'])){
  65. //sprawdzasz czy pola nie sa puste
  66. //jesli nie sa to zapis do bazy
  67. }
  68. }
  69. if(isset($_GET['del'])){
  70.  //usuwanie
  71. if (mysql_query("delete from towary where ID=.$_GET['ID']))
  72.  {
  73.  echo "usuniete";
  74.  echo mysql_errno();
  75.  echo mysql_error();
  76.  }
  77.  else
  78.  {
  79.  echo "nie usunięte";
  80.  echo mysql_errno();
  81.  echo mysql_error();
  82.  }
  83. }
  84.  
  85. mysql_close($connection);
  86. ?>
  87. </body>
  88. </html>


tak wygląda po wstępnym uzupełnieniu skrypta lecz wyświetla mi komunikat:
Parse error: parse error, expecting `','' or `';'' in /home/************/pokaz_test.php on line 38

coś pewnie schrzaniłem :/ ... help
skowron-line
  1. <?php
  2. echo '<td>
  3.  <a href="pokaz_test.php?del='.$wiersz['ID'].'">usuń</a>
  4.  <a href="pokaz_test.php?edit='.$wiersz['ID'].'">edytuj</a>
  5.  </td>';
  6. ?>


no i nie masz zamknietego cudzyslowia
  1. <?php
  2. if (mysql_query("delete from towary where ID=.$_GET['ID']))
  3. ?>

widzisz dalej po tej lini ci sie chrzani skrypt

p.s. na przyszlosc sam wiecej pokombikuj zanim wystawisz posta

edit:

  1. <?php
  2. if(mysql_num_rows($wynik) == 0)
  3. {
  4. echo "<br>";
  5. echo "baza towarów jest pusta";
  6. }
  7. ?>

po co to nie wystarczy
  1. <?php
  2. else
  3. {
  4. echo "<br>";
  5. echo "baza towarów jest pusta";
  6. }
  7. ?>


edit:
robisz tak
  1. <?php
  2. if(mysql_num_rows($wynik) > 0) {
  3. ?>

a potem
  1. <?php
  2. $ilosc_wierszy = mysql_num_rows($wynik);
  3. echo "<br>ilość danych w bazie: $ilosc_wierszy <br>";
  4. ?>


nielepiej odrazu przypisac do zmiennej potem jest tylko metlik

edit:

i tu masz blad
dajesz
  1. <?php
  2. <a href="pokaz_test.php?del='.$wiersz['ID'].'">usuń</a>
  3. ?>


a potem
  1. <?php
  2. if (mysql_query("delete from towary where ID=.$_GET['ID']))
  3. ?>

pobierasz z adresu ID nie ma takiej zmiennej ma byc DEL jak masz po znaku zapytania w url-u

odrazu poprawiam
  1. <?php
  2. if (mysql_query('delete from towary where ID='.$_GET['ID'].' '))
  3. ?>
kononowicz
dzięki skowron-line :]


wszystko ładnie mi działa ... tylko jeszcze edycja została...

  1. <?php
  2. if(isset($_GET['edit'])){
  3. //wyswietlanie SELECT WHERE ID = $_GET['edit']
  4. echo'<form action="pokaz_test.php" method="post">';
  5. while($wiersz = mysql_fetch_array($wynik)){
  6. echo'<input type="text" name="nazwa" value="'.$wiersz['TOWAR'].'">';
  7. echo'<input type="text" name="nazwa" value="'.$wiersz['KOD'].'">';
  8. echo'<input type="text" name="nazwa" value="'.$wiersz['CENA'].'">';
  9. echo'<input type="text" name="nazwa" value="'.$wiersz['DZIALY'].'">';
  10. }
  11. echo'<input type="submit" name="submit">';
  12. echo'</form>';
  13.  
  14. if(isset($_POST['submit'])){
  15. if(mysql_query('update from `towary` where ID='.$_GET['edit'].' ')) //usuwanie
  16.  {
  17.  echo "ok";
  18. }
  19. else
  20. {
  21.  echo "false";
  22.  }
  23. }
  24. }
  25. ?>


nie wyświetla mi formularza do edycji... help jeszcze raz ... !
skowron-line
no ale nie ma zapytania do bazy wiec skad ma ci wyswietlic

tam gdzie masz komentarz
  1. <?php
  2. //wyswietlanie SELECT WHERE ID = $_GET['edit']
  3. ?>

daj zapytanie

  1. <?php
  2. $zapytanie = 'SELECT cena, kod, towar,dzial FROM towary WHERE id_towaru = '.$_GET['edit'].'';
  3. $wynik = mysql_query($zapytanie);
  4. echo'<form action="pokaz_test.php" method="post">';
  5. while($wiersz = mysql_fetch_array($wynik)){
  6. //i tu wyswietlanie jak masz napisane
  7. }
  8. ?>
kononowicz
Cytat(skowron-line @ 15.11.2006, 13:05:25 ) *
no ale nie ma zapytania do bazy wiec skad ma ci wyswietlic

tam gdzie masz komentarz
  1. <?php
  2. //wyswietlanie SELECT WHERE ID = $_GET['edit']
  3. ?>

daj zapytanie

  1. <?php
  2. $zapytanie = 'SELECT cena, kod, towar,dzial FROM towary WHERE id_towaru = '.$_GET['edit'].'';
  3. $wynik = mysql_query($zapytanie);
  4. echo'<form action="pokaz_test.php" method="post">';
  5. while($wiersz = mysql_fetch_array($wynik)){
  6. //i tu wyswietlanie jak masz napisane
  7. }
  8. ?>





  1. <?php
  2. $zapytanie = 'SELECT `towary`.`ID` ,`towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dz
    ialy`.`DZIALY`
  3. FROM `towary` , `dzialy` WHERE `towary`.`ID` = '.$_GET['edit'].' AND `towary`.`ID_DZIALY` = `dzialy`.`ID`';
  4. ?>


tak poprawiłem ale jeszcze nie jest to o co mi chodzi.
W tabeli 'towary' jest kolumna z 'ID_DZIALY' (jest tam 6 głównych działów) która powinna zamieniac id na nazwy z tabeli 'dzialy'

  1. '<select name="ID_DZIALY">
  2. <option value="1">dział budowlany
  3. <option value="2">farby
  4. <option value="3">dział hydrauliczny
  5. <option value="4">dział metalowy
  6. <option value="5">dział sanitarny
  7. <option value="6">inne
  8. </select>'


cos w tym stylu... dalej juz nie mam pomysłu jak zamienic powyższy skrypt z

  1. <?php
  2. echo'<input type="text" name="DZIALY" value="'.$wiersz['DZIALY'].'">';
  3. ?>


ogólnie chciałbym żeby dział wybierało sie z selecta ale nie mam pomysłu :/ helphelp jeszcze raz
skowron-line
  1. <?php
  2. while($wiersz = mysql_fetch_array($wynik)){
  3. echo'<input type="text" name="nazwa" value="'.$wiersz['TOWAR'].'">';
  4. echo'<input type="text" name="nazwa" value="'.$wiersz['KOD'].'">';
  5. echo'<input type="text" name="nazwa" value="'.$wiersz['CENA'].'">';
  6. $dzial = $wiersz['DZIALY'];
  7. }
  8.  
  9. $array = array("1" => "dzial budowlany", "farby", "dzial hydrauliczny","dzial metalowy","dzial sanitarny","inne");
  10. echo'<select name="dzialy">';
  11. foreach($array as $key => $value){
  12. if($key == $dzial){
  13. $select.$key = "SELECTED";
  14. }
  15. <option value='.$key.' "'.$select.$key.'">'.$value.'</option>
  16. ';
  17. }
  18. echo'</select>';
  19.  
  20. echo'<input type="submit" name="submit">';
  21. echo'</form>';
  22. ?>


kurna ale sie nad tym namyslalem
kononowicz
DZIEKI WIELKIE!!!!!

  1. <?php
  2. if(isset($_GET['edit'])){
  3. $zapytanie = 'SELECT `towary`.`ID` ,`towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dz
    ialy`.`DZIALY`
  4. FROM `towary` , `dzialy` WHERE `towary`.`ID` = '.$_GET['edit'].' AND `towary`.`ID_DZIALY` = `dzialy`.`ID`';
  5. $wynik = mysql_query($zapytanie);
  6. echo'<form action="pokaz_test.php" method="post">';
  7. while($wiersz = mysql_fetch_array($wynik)){
  8. echo'<input type="text" name="nazwa" value="'.$wiersz['TOWARY'].'">';
  9. echo'<input type="text" name="nazwa" value="'.$wiersz['KOD'].'">';
  10.  echo'<input type="text" name="nazwa" value="'.$wiersz['CENA'].'">';
  11.  $dzial = $wiersz['DZIALY'];
  12.  }
  13.  
  14.  $array = array("1" => "dzial budowlany", "farby", "dzial hydrauliczny","dzial metalowy","dzial sanitarny","inne");
  15. echo'<select name="dzialy">';
  16. foreach($array as $key => $value){
  17.  if($key == $dzial){
  18. $select.$key = "SELECTED";
  19. }
  20. <option value='.$key.' "'.$select.$key.'">'.$value.'</option>';
  21. }
  22. echo'</select>';
  23. echo'<input type="submit" name="edycja" value="edycja">';
  24. echo'</form>';
  25.  
  26.  if(isset($_POST['edycja'])){
  27.  if(mysql_query('update `towary`.`ID_DZIALY` ,`towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA
    ` from `towary` where `towary`.`ID`='
    .$_GET['edit'].' ')) //edycja
  28.  {
  29.  echo "ok";
  30.  }
  31.  else
  32.  {
  33.  echo "false";
  34.  }
  35.  }
  36. }
  37. ?>


ładnie wyświetla mi formularz z edycją jednak nie moge sobie jeszcze poradzic z
  1. <?php
  2. if(mysql_query('update `towary`.`ID_DZIALY` ,`towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA
    ` from `towary` where `towary`.`ID`='
    .$_GET['edit'].' ')) //edycja
  3. ?>


juz tyle kombinacji wykorzystałem ... staneło na tym co widać ale jeszcze nie działa ...

PS. ale ciesze sie ,że powoli idzie do przodu...
Neojawor
dawno nie miałem do czynienia z SQL-em i nie pamietam składni, ale czy nie powinno być tak:
  1. <?php
  2. if(mysql_query('update `towary.ID_DZIALY` ,`towary.TOWARY` , `towary.KOD` , `towary.CENA` from `
    towary` where `towary.ID`='
    .$_GET['edit'].' ')) //edycja
  3. ?>

a tak poza tym jest zasadnicza różnica między dwoma odmiennymi apostrofami ' i ` - powinno się używać tego, który jest razem z cudzysłowem (tak mi się przynajmniej wydaje blink.gif ).
kononowicz
Cytat(Neojawor @ 15.11.2006, 17:36:44 ) *
dawno nie miałem do czynienia z SQL-em i nie pamietam składni, ale czy nie powinno być tak:
  1. <?php
  2. if(mysql_query('update `towary.ID_DZIALY` ,`towary.TOWARY` , `towary.KOD` , `towary.CENA` from `
    towary` where `towary.ID`='
    .$_GET['edit'].' ')) //edycja
  3. ?>

a tak poza tym jest zasadnicza różnica między dwoma odmiennymi apostrofami ' i ` - powinno się używać tego, który jest razem z cudzysłowem (tak mi się przynajmniej wydaje blink.gif ).


  1. <?php
  2. $zapytanie = 'SELECT `towary`.`ID` ,`towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dz
    ialy`.`DZIALY`
  3. FROM `towary` , `dzialy` WHERE `towary`.`ID` = '.$_GET['edit'].' AND `towary`.`ID_DZIALY` = `dzialy`.`ID`';
  4. ?>


a to o dziwo działa ... hmmm
po wstawieniu i tak nie działa... to znaczy to samo się dzieje co wcześniej...
Neojawor
Mam tylko jedno pytanie, skoro ma być update, czyli nadpisanie, to czym Ty chcesz nadpisywać. Może coś przeoczyłem, ale nie widzę, żebyś podał wartości jakie mają być wpisane.
Konstrukcja powinna być taka:
  1. UPDATE <nazwa_bazy>.<nazwa_tabeli> SET <nazwa_pola> = 'wartość' WHERE <warunek>

a ja u Ciebie nie widzę "SET".
kononowicz
Cytat(Neojawor @ 15.11.2006, 20:17:59 ) *
Mam tylko jedno pytanie, skoro ma być update, czyli nadpisanie, to czym Ty chcesz nadpisywać. Może coś przeoczyłem, ale nie widzę, żebyś podał wartości jakie mają być wpisane.
Konstrukcja powinna być taka:
  1. UPDATE <nazwa_bazy>.<nazwa_tabeli> SET <nazwa_pola> = 'wartość' WHERE <warunek>

a ja u Ciebie nie widzę "SET".


oto kod edycji:
  1. <?php
  2. if(isset($_GET['edit'])){
  3. $zapytanie = 'SELECT `towary`.`ID` ,`towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dz
    ialy`.`DZIALY` , `dzialy`.`ID`
  4. FROM `towary` , `dzialy` WHERE `towary`.`ID`='.$_GET['edit'].' AND `towary`.`ID_DZIALY` = `dzialy`.`ID`';
  5. $wynik = mysql_query($zapytanie);
  6. echo'<form action="pokaz_test.php" method="post">';
  7. while($wiersz = mysql_fetch_array($wynik)){
  8. echo'<input type="text" name="nazwa" value="'.$wiersz['ID'].'">';
  9. echo'<input type="text" name="nazwa" value="'.$wiersz['TOWARY'].'">';
  10. echo'<input type="text" name="nazwa" value="'.$wiersz['KOD'].'">';
  11.  echo'<input type="text" name="nazwa" value="'.$wiersz['CENA'].'">';
  12.  $dzial = $wiersz['DZIALY'];
  13.  }
  14.  
  15.  $array = array("1" => "dzial budowlany", "farby", "dzial hydrauliczny","dzial metalowy","dzial sanitarny","inne");
  16. echo'<select name="dzialy">';
  17. foreach($array as $key => $value){
  18.  if($key == $dzial){
  19. $select.$key = "SELECTED";
  20. }
  21. <option value='.$key.' "'.$select.$key.'">'.$value.'</option>';
  22. }
  23. echo'</select>';
  24. echo'<input type="submit" name="edycja" value="edycja">';
  25. echo'</form>';
  26.  
  27.  if(isset($_POST['edycja'])){
  28.  if(mysql_query('update `rafkaz`.`towary` SET `towary`.`ID_DZIALY`='.$wiersz['DZIALY'].' ,`towary`.`TOWARY`='.$wiersz['TOWARY'].' , `towary`.`KOD`='.$wiersz['KOD'].' , `towary`.`CENA`='.$wiersz['CENA'].' where `towary`.`ID`='.$_GET['edit'].' ')) //edycja
  29.  {
  30.  echo "ok";
  31.  }
  32.  else
  33.  {
  34.  echo "false";
  35.  }
  36.  }
  37. }
  38. ?>


poprawiłem to co mi powiedzieliście jednak znowu po wyświetleniu formularza edycji nic sie nie dzieje... czy mogłby ktoś jeszcze rzucić okiem... proszę
skowron-line
a co nic nie dzieje

p.s Polska na zawsze dobra marka Polska - Belgia 1:0
Neojawor
1) Każde pole formularza musi mieć inne nazwy, żeby móc się później do nich odwołać, a ty masz wszędzie name="nazwa"
2) Pytanie: jak załaduje Ci się ten formularz, to jest on czymś uzupełniony, czy ma wszystkie pola puste? (jeśli służy do edycji, to nie może być pusty)
3) Jeśli <form action="pokaz_test.php"> to znaczy, że dopiero w pliku pokaz_test.php ma być skrypt zmieniający dane w bazie. Piszesz go tak, że najpierw pobierasz nowe wartości odpowiednich zmiennych z tablicy $_POST, a później wywołujesz funkcje ładujące te wartości do bazy SQL-a. U ciebie np. zmienna $wiersz['DZIALY'] ma po przeładowaniu strony (wciśnięciu submit) starą wartość, a nie nową pobraną z formularza, bo nie pobrałeś jej z POST-a, tylko z bazy (zapisujesz do bazy to co w niej było). Poprawny przykład - robisz sobie pole <input name="kolor">, wysyłasz formularz metodą post. Wtedy w skrypcie uaktualniającym piszesz:
  1. UPDATE tablica SET tablica.kolory=$_POST['kolor']

i wtedy do bazy zapisywana jest treść pobrana z formularza
4) Mam wątpliwości, czy pole typu submit przesyła jakąkolwiek wartość. Przed linię 31 wsadź:
  1. <?php
  2. echo $_POST['edycja'];
  3. ?>

i sprawdź co tam jest zawarte. Jeśli nic, to musisz dodać pole typu hidden do formularza.
sprawdź również co zawiera zmienna $_GET['edit'], bo po wciśnięciu przycisku "edycja" nie wiem czy wartość się zachowa.
kononowicz
Cytat(Neojawor @ 15.11.2006, 23:46:40 ) *
2) Pytanie: jak załaduje Ci się ten formularz, to jest on czymś uzupełniony, czy ma wszystkie pola puste? (jeśli służy do edycji, to nie może być pusty)


już uzupełniłem...

Cytat(Neojawor @ 15.11.2006, 23:46:40 ) *
3) Jeśli <form action="pokaz_test.php"> to znaczy, że dopiero w pliku pokaz_test.php ma być skrypt zmieniający dane w bazie. Piszesz go tak, że najpierw pobierasz nowe wartości odpowiednich zmiennych z tablicy $_POST, a później wywołujesz funkcje ładujące te wartości do bazy SQL-a. U ciebie np. zmienna $wiersz['DZIALY'] ma po przeładowaniu strony (wciśnięciu submit) starą wartość, a nie nową pobraną z formularza, bo nie pobrałeś jej z POST-a, tylko z bazy (zapisujesz do bazy to co w niej było). Poprawny przykład - robisz sobie pole <input name="kolor">, wysyłasz formularz metodą post. Wtedy w skrypcie uaktualniającym piszesz:
  1. UPDATE tablica SET tablica.kolory=$_POST['kolor']

i wtedy do bazy zapisywana jest treść pobrana z formularza


to może ja zrobię w takim razie skrypt edycji w innym pliku ... bedzie lepiej??

Cytat(Neojawor @ 15.11.2006, 23:46:40 ) *
4) Mam wątpliwości, czy pole typu submit przesyła jakąkolwiek wartość. Przed linię 31 wsadź:
  1. <?php
  2. echo $_POST['edycja'];
  3. ?>

i sprawdź co tam jest zawarte. Jeśli nic, to musisz dodać pole typu hidden do formularza.
sprawdź również co zawiera zmienna $_GET['edit'], bo po wciśnięciu przycisku "edycja" nie wiem czy wartość się zachowa.


własnie nic nie jest zawarte...
ani w edycja ani w edit sad.gif
skowron-line
Kod
własnie nic nie jest zawarte...
ani w edycja ani w edit sad.gif


lacze sie w bolach

  1. <?php
  2. $wynik = mysql_query("SELECT `towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dzialy`.`DZI
    ALY`
  3. FROM `towary` , `dzialy`
  4. WHERE `towary`.`ID_DZIALY` = `dzialy`.`ID`
  5. LIMIT 0 , 30 ;")
  6. ?>


ale chyba ID nie wyciagasz z bazy wiec zmienne EDIT i DEL nie maja przypisanej wartowsci
kononowicz
Cytat(skowron-line @ 16.11.2006, 13:41:53 ) *
Kod
własnie nic nie jest zawarte...
ani w edycja ani w edit sad.gif


lacze sie w bolach

  1. <?php
  2. $wynik = mysql_query("SELECT `towary`.`TOWARY` , `towary`.`KOD` , `towary`.`CENA` , `dzialy`.`DZI
    ALY`
  3. FROM `towary` , `dzialy`
  4. WHERE `towary`.`ID_DZIALY` = `dzialy`.`ID`
  5. LIMIT 0 , 30 ;")
  6. ?>


ale chyba ID nie wyciagasz z bazy wiec zmienne EDIT i DEL nie maja przypisanej wartowsci


akurat DEL ładnie mi śmiga ... tylko te edit nieszczęsne.
skowron-line
przemyslalem to i to co napisalem to blad. bo to chodzi o to ze po nacisnieciu submita nie przekazuje zmiennej z url-a
dobrze zrozumialem?
Neojawor
skoro formularz jest pusty, to błąd pojawia się wcześniej. Ma to być tak:
selektem na pętli wyświetlasz wszystkie rekordy, i przy każdym jest przycisk "edytuj". Właściwie edytuj jest linkiem. Link ten ma mieć taką budowę, żeby w nim przesyłane były dane rekordu, a w zasadzie wystarczy przekazać ID rekordu
  1. <a href="edycja.php?id=$id">edytuj</a>

wtedy po wciśnięciu ładuje Ci się plik edycja.php, w którym jest taki sam formularz jak do wprowadzania, z tą różnicą, że wcześniej w pliku robisz sobie:
  1. <?php
  2. $id=$_GET['id'];
  3. ?>

Mając już w pliku edytuj.php id rekordu który chcemy edytować robimy selekta na ten rekord, a dane z niego ładujemy do formularza w taki sposób:
  1. <?php
  2. $wynik = mysql_query( "SELECT ....... ");
  3. $wiersz = mysql_fetch_array($wynik);
  4. $towar=$wiersz['towary']
  5. ?>
  6. <input type="text" name="tytul" value="<?php echo $dana_rekordu; ?>" size=50>

W ten sposób masz wypełniony formularz.
Zamiast wykonywać tego selekta można wszystkie dane przesłać metodą GET (tak jak to zrobiłem z ID) - jest to szybsze (czas wykonania skryptu jest krótszy), ale wtedy w adresie url ujawniasz budowę tabeli.

EDIT:

To powyżej to jest rozwiązanie na osobnych plikach. Jest to bardziej obszerny kod (pliki niestety więcej warzą), ale jest to znacznie czytelniejsze dla początkujących (sam tak to robię).

Ciąg dalszy wygląda tak, że gdy przeedytujesz dane w formularzu, to wciskając submita przenosi cię do kolejnego pliku, np. update.php (oczywiście musi być <form action="update.php>).
W pliku update dajesz polecenie:
  1. <?php
  2. mysql_query("UPDATE towary SET towar = '$towar'... WHERE id = $id");
  3. ?>

Wcześniej jednak musisz w zmienną $towar wsadzić wartość z formularza, a więc jeśli pole formularza w które wpisuje się nazwę towaru miało name="dupamaryny", to wpisujesz przed tym mysql_query taką linijkę:
  1. <?php
  2. $towar=$_POST['dupamaryny'];
  3. ?>

i tu jest koniec. Dodajesz jeszcze tylko jakieś echo, że zmiany zostały dokonane i link powrotu do spisu towarów.

Tak w sumie, to powinieneś całą przygodę z formularzami zacząć od poznania metod GET i POST - dopiero jak zrozumiesz o co w tym chodzi będziesz mógł w pełni rozumnie napisać formularz do obsługi treści bazy danych. Na przykłąd zacznij tu:
http://pl2.php.net/manual/pl/language.variables.external.php
sowa75
Witam!!!

Możecie sklepać to w całość ? Bo sam nie mogę ale w taki sposób żeby tylko czytało z bazy edytowało i kasowało rekordy ten skrypt jest bardzo przydatny w robieniu panelu admina wielkie dzięki z góry...
kononowicz
grzebie się i grzebie z tą edycją i nic... po wcisnieciu edytuj przy rekordzie ktory chce zedytowac pojawia sie formularz w ktorym umieszczone sa dane akurat tego rekordu. tylko po wduszeniu submit nie zapisuje danych w rekordzie tylko zostaje to co było. Czy ktos mógłby się zlitować i wpisać mi jak powinna wygladać całą edycja na podstawie wczesniejszego mojego posta z edycja... prosze!!! sad.gif
grattz
Przeczytałem cały temat uważnie ale nie mogę sobie poradzić.
U mnie kasowanie działa ale wydaje mi się ze to źle zrobiłem:

Dodaje na stronie baner. Przy każdym banerze jest także link <a href="?id='.$row['id'].'.php">. Umożliwia mi to przypisanie do każdego banera przycisku "usuń" z unikalnym id który chce wykorzystać do powiązania z bazą i skasowania rekordu odpowiadającemu temu id.
Na razie zrobiłem tak ze jeśli kliknie "usuń" - ładuje się strona http://localhost/portal/index.php?id=id.php
Wtedy :
  1. <?php
  2. //Skrypt kasowania który znajduje sie w index.php
  3. $id=$_GET['id'];
  4. $kasowanie="DELETE FROM banery WHERE id=("$id")";
  5. if ($id==$_GET['id'])
  6. mysql_query($kasowanie);
  7. ?>


i post się kasuje. aarambo.gif
Ale:
1) Nie chce aby ten link pod "usuń" prowadził do index.php?id=id.php bo wtedy przenosi mnie do strony index.php . Ja chce by była to strona banery.php?id=id.php
2) To co zrobiłem jest chyba trochę niebezpieczne bo przecież każdy może mi ręcznie wpisać do przeglądarki odpowiedni adres i skasować baner.

Czy taka metoda kasowania postów jaką zrobiłem jest dobra ? Czy takie sie stosuje czy są inne lepsze, bezpieczniejsze metody. Wolałbym żeby po kliknięciu na "usuń" nie przenosiło mnie nigdzie tylko po prostu kasowało baner a na górze strony wyświetlała się mała informacja potwierdzająca usunięcie.

Cytat(wipo @ 13.11.2006, 15:28:16 ) *
Usuwanie to po prostu daj
if (is_numeric($_GET['id'])){
if (mysql_query("delete from tabela where id=".$_GET['id']))
print "usuniete";
else
print "nie usunięte";
}

Czytam o tym is-numeric ale nie bardzo rozumiem jak to wykorzystać.
skowron-line
Kod
Czytam o tym is-numeric ale nie bardzo rozumiem jak to wykorzystać.
a czego tu nie rozumiesz funkacja is_numeric sprawdza czy danyparametr jest liczba bo id to liczba, to takie zabezpieczenie przed sql injection
Kod
Przy każdym banerze jest także link <a href="?id='.$row['id'].'.php">. Umożliwia mi to przypisanie do każdego banera przycisku "usuń" z unikalnym id

Kod
http://localhost/portal/index.php?id=id.php

co to za glupota?? ty robisz strony 1.php 2php 3.php .....
Kod
chce by była to strona banery.php?id=id.php


to jak sobie wyciagasz z bazy i tworzysz liniki "usun" to napisz baner.php?id= $row['id']
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.