Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dane z tabeli w postaci formularza
jewel
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 14.04.2007

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


Chce moc usuwac rekordy z tabeli...
Wiec wymyslilem tak, ze jakby przedstawic zawartosc tabeli w postaci listy z radiobuttonami to mozna by bylo wybrac jeden z rekordow i potem juz bez problemu go usunac... nie wiem jednak jak wylistowac ta tabele z radiobuttonami...
Moze ktos pomoze?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
kwiateusz
post
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




jakiej tabeli? mysql? to przecież odpowiednie zapytanie potem mysql_fetch_ np array i potem forem lub while listujesz...
Go to the top of the page
+Quote Post
Darti
post
Post #3





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


No do takiej operacji to chyba lepszy checkbox - można zaznaczać i odznaczać i kilka na raz...
Nazwij je jako array (np c[1], c[2], c[3]) a value daj odpowiadające im unikatowe id z tabeli bazy danych (w następnym kroku wiesz o jakie wiersze chodzi do usunięcia).
Go to the top of the page
+Quote Post
jewel
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 14.04.2007

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


poki co udaje mi sie listowac ta czesc rekordu, ktora chce..

  1. <?php
  2.  
  3. // laczenie z baza 
  4. $link = mysql_connect('localhost', 'root', '')  or die('Nie mozna polaczyc z baza bo: ' . mysql_error());
  5.  
  6. //wybieramy baze danch
  7. mysql_select_db('ajuchnie') or die('Nie mozna wybrac bazy');
  8.  
  9. echo '<TABLE border="0" width="100%"> <TBODY> <CAPTION> ANKIETERZY</CAPTION>';
  10. //zapytanie
  11. $query = 'SELECT nazwisko FROM ankieterzy';
  12. $result = mysql_query($query) or die('Nie mozna wykonac zapytania, bo:' . mysql_error());
  13.  
  14. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  15.  echo '<TR>';
  16.  foreach ($row as $val) {
  17.  echo "<TD> $val </TD> ";
  18.  }
  19.  echo '</TR>';
  20. }
  21. echo '</TBODY></TABLE>';
  22.  
  23.  
  24.  
  25. mysql_close($link);
  26. ?>



w tym skrypcie probuje usuwac rekord za pomoza okienka tekstowego ale niestety nie usuwa i wyskakuje blad:

You 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

  1. <?php
  2.  
  3. // laczenie z baza 
  4. $link = mysql_connect('localhost', 'root', '')  or die('Nie mozna polaczyc z baza bo: ' . mysql_error());
  5.  
  6. //wybieramy baze danch
  7. mysql_select_db('ajuchnie') or die('Nie mozna wybrac bazy');
  8.  
  9. //$nazwisko = AddSlashes($_POST['usun']);
  10.  
  11. $zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko`= $usun";
  12. //$zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko` = 'Kowalski'"; 
  13. $res = mysql_query($zapyt);
  14.  
  15. if(mysql_affected_rows() == 1)
  16. {
  17. print '<p>Ankieter zostal usuniety</p>';
  18. }
  19. else
  20. {
  21. print '<p>Nie udalo sie usunac ankietera, poniewaz: </p>' . mysql_error() ;
  22. }
  23. // zamykamy polaczenie
  24. mysql_close($link);
  25.  
  26. ?>


Ten post edytował jewel 27.05.2007, 11:10:44
Go to the top of the page
+Quote Post
Darti
post
Post #5





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Czy w tabeli ankieterzy masz tylko nazwiska ? A co jak dwóch ankieterów będzie miało to samo nazwisko ? Wprowadź niepowtarzalny klucz główny do tabeli (na razie nazwijmy to id).
  1. <?php
  2. if (isset($_POST['guzik']) && $_POST['guzik'] == "Usuń wybrane"){
  3. foreach ($_POST['r'] as $key => $val){
  4. if(is_numeric($val){
  5. $query = 'DELETE FROM ankieterzy WHERE id=' .$val;
  6. $result = mysql_query($query) or die('Nie mozna wykonac zapytania, bo:' . mysql_error());
  7. }
  8. }
  9. }
  10. echo '<form id="formularz" name="usuwanie_ankieterow" method="post" action="">';
  11. echo '<TABLE border="0" width="100%"> <TBODY> <CAPTION> ANKIETERZY</CAPTION>';
  12. $query = 'SELECT nazwisko FROM ankieterzy';
  13. $result = mysql_query($query) or die('Nie mozna wykonac zapytania, bo:' . mysql_error());
  14. $i=0;
  15. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  16.  echo '<TR>';  
  17.  echo "<TD>" .$row['nazwisko']. "</TD> ";
  18.  echo "<TD><input name="r[$i]" type="checkbox" value="" .$row['id']. "" /></TD> ";
  19.  echo '</TR>';
  20.  $i++;
  21. }
  22. echo '<td align="right" colspan="2"><input type="submit" name="guzik" value="Usuń wybrane" /></td>';
  23. echo '</TBODY></TABLE></form>';
  24. ?>


Ten post edytował Darti 27.05.2007, 11:10:07
Go to the top of the page
+Quote Post
jewel
post
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 14.04.2007

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


w tej tabeli sa takze inne pozycje niz nazwiska, chce jednak usuwac po nazwiskach....

kwestia jest taka, ze gdy mam zamiast kodu:
$zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko`= $usun";

kod:
$zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko` = 'Kowalski'";

to usuwa mi ten rekord.... jednak jak zrobic zeby usuwalo nie tylko ten jeden konkretny, ale zczytany z pola tekstowego, ktory jest u mnie oznaczony jako usun?
Go to the top of the page
+Quote Post
Darti
post
Post #7





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


No właśnie PO TO jest pole unikatowe w bazie danych żeby jednoznacznie określić o który wpis Ci chodzi ... Bo niby skąd baza ma wiedzieć że chodzi Ci o Kowalskiego Mariana a nie Kowalskiego Romka ?
Go to the top of the page
+Quote Post
Kicok
post
Post #8





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

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


Kod
$zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko` = $usun"
$zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko` = 'Kowalski'"


Pytanie pierwsze: Jeśli zmienna $usun będzie miała wartość Kowalski, to czym te dwa zapytania będą się od siebie różniły.



PS. Kod:
  1. <?php
  2.  
  3. $usun = mysql_escape_string( $_POST['usun'] );
  4.  
  5. ?>

zabezpiecza cię zarówno przed atakami SQL injection, jak i przed wyłączonym register globals. Nie wiem czemu w twoim kodzie jego odpowiednik jest wykomentowany :/

Ten post edytował Kicok 27.05.2007, 15:44:08
Go to the top of the page
+Quote Post
jewel
post
Post #9





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 14.04.2007

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


no wlasnie teoretycznie niczym.. ale w praktyce niestety nie dziala... i nie wiem dlaczego
Go to the top of the page
+Quote Post
Darti
post
Post #10





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Cytat(jewel @ 27.05.2007, 10:21:00 ) *
to usuwa mi ten rekord.... jednak jak zrobic zeby usuwalo nie tylko ten jeden konkretny, ale zczytany z pola tekstowego, ktory jest u mnie oznaczony jako usun?


Cytat
no wlasnie teoretycznie niczym.. ale w praktyce niestety nie dziala... i nie wiem dlaczego


Przecież napisałeś że działa ... zdecyduj się.
@Kicok ma racje, niepotrzebnie zakomentowałeś linię z AddSlashes , ale to i tak nie jest istotne skoro kod Ci nie działa jak powinien.
A poza tym napisałem Ci jak można to zrobić i dlaczego nie robi się tego po nazwisku (poza tym po nazwisku czy po id - z wierzchu i tak nie widać różnicy)
Go to the top of the page
+Quote Post
Kicok
post
Post #11





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

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


Cytat
no wlasnie teoretycznie niczym.. ale w praktyce niestety nie dziala... i nie wiem dlaczego


Jakbyś wykasował $usun i wpisał tam Kowalski to zauważyłbyś, że jednak się czymś różnią. Apostrofami.


A co do tych id i nazwisk, to @Darti ma rację. Radziłbym już teraz to przebudować, bo potem, gdy skrypt się rozrośnie, a ty nie będziesz już pamiętał co gdzie jest, to mogą być kłopoty.

Ten post edytował Kicok 27.05.2007, 20:18:29
Go to the top of the page
+Quote Post
jewel
post
Post #12





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 14.04.2007

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


ok, problem rozwiazany.... zamiast:

  1. <?php
  2. //$nazwisko = AddSlashes($_POST['usun']);
  3.  
  4. $zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko`= $usun";
  5. ?>


mam:
  1. <?php
  2. $nazwisko = AddSlashes($_POST['usun']);
  3.  
  4. $zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko`= '$nazwisko'";
  5. ?>


i wszystko dziala (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)




pojawil sie kolejny problem... chce aby zawartosc wybranego przeze mnie rekordu pojawiala sie w rozwijalnej liscie. Na razie listuje tylko te zawartosc i nie wiem jak to wrzucic do takiej listy, nie wiem, jak uzyc tu formularza html

  1. <?php
  2.  
  3. // laczenie z baza 
  4. $link = mysql_connect('localhost', 'root', '')  or die('Nie mozna polaczyc z baza bo: ' . mysql_error());
  5.  
  6. //wybieramy baze danch
  7. mysql_select_db('ajuchnie') or die('Nie mozna wybrac bazy');
  8.  
  9. //zadane dane w tablicy HTML
  10. echo '<TABLE border="1" width="60%" align="center"> <TBODY> <CAPTION> <u>DOSTEPNE ANKIETY </u></CAPTION>';
  11. echo '<br/>';
  12.  
  13. //zapytanie
  14. $query = 'SELECT `tytul_ankiety` FROM ankieta';
  15. $result = mysql_query($query) or die('Nie mozna wykonac zapytania bo:' . mysql_error());
  16.  
  17.  
  18. //wynik w postaci tablicy
  19. echo '<tr><td><b>Tytul ankiety</b></td></tr>';
  20. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  21.  
  22. echo '<TR>';
  23.  foreach ($row as $val) {
  24.  echo "<TD> $val </TD> ";
  25.  }
  26.  echo '</TR>';
  27. }
  28.  
  29. echo '</TBODY></TABLE>';
  30.  
  31. //zwalniamy rezultat zapytania
  32.  
  33. // zamykamy polaczenie
  34. mysql_close($link);
  35. ?>
Go to the top of the page
+Quote Post
Darti
post
Post #13





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


  1. <?php
  2. echo '<select name="select">';
  3. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  4.  foreach ($row as $val) {
  5.  echo "<option>$val</option>";
  6.  }
  7.  
  8. }
  9. echo '</select>';
  10. ?>
Go to the top of the page
+Quote Post
jewel
post
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 14.04.2007

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


poprzedni problem zostal rozwiazany... jednak jest nastepny
Generalnie chodzi o to, ze mam powiazne ze soba 2 tabele: 'ankieta' i 'pytania'. Polaczone sa tak, ze w tabeli 'pytania' mam rekord 'id_ank', ktory jest polaczony za pomoca foreign key z rekordem 'id_ankiety' z tabeli ankieta.
Chce moc dodawac pytania do konkretnych ankiet (tak zeby kazde pytanie w ankiecie mozna bylo zidentyfikowac po 'id_ank' do ktorej ankiety nalezy, zeby ewentualnie pozniej moze wypelnic taka ankiete) W zwiazku z tym listuje sobie dostepne ankiety, wybieram np. 'zainteresowania' i nie wiem w tym momencie, jak zidentyfikowac, ze akuat wybralam ankiete 'zainteresowania' i ze ona ma akurat jakies tam id.
Czy ktos wie, jak to moznaby zrobic?
Go to the top of the page
+Quote Post
Darti
post
Post #15





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Listujesz sobie zapewne czymś w tym stylu:
  1. SELECT `id_ankiety`,`tytul_ankiety`FROM `ankieta`

potem kod w stylu:

  1. <?php
  2. echo '<table>';
  3. foreach ($ankiety as $wiersz){
  4. echo '<tr><td><a href="edytuj_ankiete.php?id_ankiety='.$wiersz["id_ankiety"].'">'.$wiersz["tytul_ankiety"].'</td></tr>';
  5. }
  6. echo '</table>';
  7. ?>


i robisz sobie plik edytuj_ankiete.php, w którym umieszczasz kod:

  1. <?php
  2. if(isset($_GET['id_ankiety']) && is_numeric($_GET['id_ankiety'])){
  3. $zapyt = "SELECT * FROM `pytania` WHERE `id_ank` = " . $_GET['id_ankiety'];
  4. }
  5. // ... i dalej kod
  6. ?>
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: 25.08.2025 - 08:46