Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dane z tabeli w postaci formularza
Forum PHP.pl > Forum > PHP
jewel
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?
kwiateusz
jakiej tabeli? mysql? to przecież odpowiednie zapytanie potem mysql_fetch_ np array i potem forem lub while listujesz...
Darti
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).
jewel
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. ?>
Darti
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. ?>
jewel
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?
Darti
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 ?
Kicok
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 :/
jewel
no wlasnie teoretycznie niczym.. ale w praktyce niestety nie dziala... i nie wiem dlaczego
Darti
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)
Kicok
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.
jewel
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 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. ?>
Darti
  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. ?>
jewel
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?
Darti
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. ?>
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.