Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Odwołanie do funkcji w iscie rozwijalnej
Forum PHP.pl > Forum > Przedszkole
klynna
Witam ekspertów,

wiecie może w jakis sposób należy poprawnie wywołać metodę w jednej z opcji listy rozwijalnej w html ?

Kod przedstawia się następująco:


  1. <form action=akcja($i)>
  2. <select name=menu>
  3. <option value="$i" selected="selected">"$this->akcja($i)".'Modyfikuj.'</option>
  4. <option value="$i">Usun</option>
  5. </select>
  6. </form>


ten kod jest z funkcji pierwszej, i w niej chcę wywołać funkcję drugą w ktorej wykonam jedną z dwóch akcji: modyfikację lubusuwanie. nie potrafie jednak odwołać się do funkcji np usuwania.... wiecie jak to zrobic ?
Obecnie testuje i testuje, wiele rzeczy juz sprawdziłem, juz nawet miedzy znacznikami <option> wpisałem wywolanie (blędne) funkcji..

$i to oczywiscie licznik, dane wyświetlam w tabeli i w taki sposob poprzez atrybut value w znaczniku option próboję sięodwoływać
Turson
Co zwraca metoda akcja()? Albo chociaż wklej jej kod
klynna
kod, wygląda następująco:

  1. <?php
  2. class Baza{
  3. public $pdo;
  4. public $kwerenda;
  5. var $i = 1;
  6.  
  7. public function polacz(){
  8. połączenie z mysql poprzez PDO;
  9. }
  10.  
  11. public function wyswietl(){
  12. //$ilosc = $this -> pdo -> exec('DELETE FROM klient WHERE idKlient=1');
  13. echo '<h2>Tabela Klientów</h2> <br />';
  14. echo '<table>
  15. <tr>
  16. <td class="naglowek">Imię</td>
  17. ...
  18. </tr>';
  19. $this->kwerenda = $this->pdo->query('select * from klient');
  20.  
  21. foreach($this->kwerenda as $rekord){
  22. echo '<tr>
  23. <td>'.$rekord['imie'].'</td>
  24. ...
  25. <td>
  26. <form action=akcja($i)>
  27. <select name=menu>
  28. <option value="$i" selected="selected">Modyfikuj</option>
  29. <option value="$i">Usun</option>
  30. </select>
  31. </form>
  32. </td>
  33. </tr>';
  34. $this->i++;
  35. }
  36.  
  37. echo '</table>';
  38. }
  39.  
  40. public function akcja($i){
  41.  
  42. $this -> pdo -> exec('DELETE FROM klient WHERE idKlient=$i');
  43. echo 'test';
  44. //opcojnalnie dodam tu header:Refresh:1; jeżeli po wykonaniu kwerendy strona sama sie nie odswiezy
  45. }
  46.  
  47. }
  48. $ob = new Baza();
  49. $ob -> polacz();
  50. $ob -> wyswietl();
  51. $ob -> akcja($i);
  52. ?>





Na tabeli, chcę wykonać opcję modyfikacji i usunięcia, chciałbym to wykonać w liscie rozwijalnej -> niestety nie potrafię się do niej odwołać.
Idee mam taką, że przy wcisnieciu 'modyfikuj' lub 'usun' przechodze do funkcji akcja() i tam chcialbym sprawdzic, którą opcję wybrano,
modyfikacje czy usuwanie...i od tej zależności wykonam np usuwanie z bazy...na podstawie przesłanej zmiennej licznikowej.

@Turson
Masz może jakieś sugestie ?
Turson
  1. <form action=akcja($i)>
  2. <select name=menu>
  3. <option value="$i" selected="selected">Modyfikuj</option>
  4. <option value="$i">Usun</option>
  5. </select>
  6. </form>
  7. <option value="$i" selected="selected">"$this->akcja($i)".'Modyfikuj.'</option>

zastanawiam się co to za wymysł...

Wyślij formularz i w zależności od opcji w select zrób daną akcję


  1. <form action="" method="post">
  2. <select name="akcja">
  3. <option value="usun">Usuń</option>
  4. <option value="edytuj">Edytuj</option>
  5. </select>
  6. </form>
  7.  
  8. <?php
  9. if(isset($_POST['akcja'])){
  10. if($_POST['akcja']=="usun"){
  11. //usuwanie
  12. }
  13. elseif($_POST['akcja']=="edytuj"){
  14. //edytowanie
  15. }
  16. }
klynna
oo, wygląda to bardzo fajnie.
A powiedz mi kolego, w tym ifie, mogę wywołać przykladowo funkcję usun(); ? Czy ona musi coś zwracać ? (nie wiem kiedy strona się odświeży...czy po samym wykonaniu kwerendy czy ręcznie musze ją odświeżyć)


A właśnie kolego, w tym przypadku chyba stracę mój licznik co questionmark.gif A usuwac i modyfikować musze z uwzględnieniem licznika(id klienta) żeby nie zmuszac uzytkownika do pamiętania / podawania id
Turson
Możesz wywołać funkcję. Strona się odświeży tylko po kliknięciu przycisku, po wywołaniu funkcji nie
klynna
no niestety nie działa mi...

dopisałem poza klasą, ale w <?php ?> kod:

  1. if(isset($_POST['akcja'])){
  2. if($_POST['akcja']=='Usun'){
  3. $this -> pdo -> exec('DELETE FROM klient WHERE idKlient=1');
  4. }
  5. }


dla ulatwienia id=1...niestety zero jakiejkolwiek reakcji....drugim problemem jest jak zczytać wartość atrybutu value z <option>...

Jakies pomysły questionmark.gif
Turson
Jeżeli poza klasą to skąd się $this wzięło?


Cytat
drugim problemem jest jak zczytać wartość atrybutu value z <option>...

echo $_POST['akcja']
klynna
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>A , Autor: .</title>
  6. <link rel="Stylesheet" type="text/css" href="plik.css">
  7. </head>
  8.  
  9. <body>
  10. <?php
  11.  
  12. class Baza{
  13. public $pdo;
  14. public $kwerenda;
  15. var $i = 1;
  16.  
  17.  
  18. public function polacz(){
  19. try{
  20. $this->pdo = new PDO('mysql:host=localhost;dbname=zadanie_a','Zadanie_A','haslo');
  21. //echo 'Połączenie nawiązane!';
  22. //header("Refresh: 1;");
  23. }
  24. catch(PDOException $e){
  25. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  26. header("Refresh: 1; index.php");
  27. }
  28. }
  29.  
  30. public function wyswietl(){
  31. //$ilosc = $this -> pdo -> exec('DELETE FROM klient WHERE idKlient=1');
  32. echo '<h2>Tabela Klientów</h2> <br />';
  33. echo '<table>
  34. <tr>
  35. <td class="naglowek">Imię</td>
  36. <td class="naglowek">Nazwisko</td>
  37. <td class="naglowek">Miejscowość</td>
  38. <td class="naglowek">Pesel</td>
  39. <td class="naglowek">Telefon</td>
  40. </tr>';
  41. $this->kwerenda = $this->pdo->query('select * from klient');
  42.  
  43. foreach($this->kwerenda as $rekord){
  44. echo '<tr>
  45. <td>'.$rekord['imie'].'</td>
  46. <td>'.$rekord['nazwisko'].'</td>
  47. <td>'.$rekord['miejscowosc'].'</td>
  48. <td>'.$rekord['pesel'].'</td>
  49. <td>'.$rekord['telefon'].'</td>
  50. <td>
  51. <form action="" method="post">
  52. <select name="menu">
  53. <option value="$i" selected="selected">Modyfikuj</option>
  54. <option value="$i">Usun</option>
  55. </select>
  56. </form>
  57. </td>
  58. </tr>';
  59. $this->i++;
  60. }
  61.  
  62. echo '</table>';
  63. }
  64.  
  65. public function akcja($i){
  66. $this -> pdo -> exec('DELETE FROM klient WHERE idKlient=$i');
  67. echo 'test';
  68. }
  69.  
  70. }
  71.  
  72. $ob = new Baza();
  73. $ob -> polacz();
  74. $ob -> wyswietl();
  75.  
  76. if(isset($_POST['menu'])){
  77. if($_POST['menu']=="Usun"){
  78. $this -> ob -> exec('DELETE FROM klient WHERE idKlient=1');
  79. }
  80. }
  81.  
  82. ?>
  83.  
  84. </body>
  85. </html>



tak wyglądają moje dotychczasowe starania, nie mniej jednak, nei usuwa mi klienta

widzicie tu gdzieś rażące błędy ?
Turson
$ob->pdo->exec
klynna
Kolego....mi wogole nie reaguje kod na tą liste rozwijalną, testuje cały czas...i na zwyklych inputach mi to wychodzi.

kod:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title> , Autor: .</title>
  6. <link rel="Stylesheet" type="text/css" href="plik.css">
  7. </head>
  8.  
  9. <body>
  10. <?php
  11.  
  12. $ob = new Baza();
  13. $ob -> polacz();
  14. $ob -> wyswietl();
  15. if(isset($_POST['akcja'])) { $ob ->akcja(); $ob->test(); }
  16.  
  17. class Baza{
  18. public $pdo;
  19. public $kwerenda;
  20. var $i = 1;
  21.  
  22.  
  23. public function polacz(){
  24. try{
  25. $this->pdo = new PDO('mysql:host=localhost;dbname=zadanie_a','Zadanie_A','haslo');
  26. //echo 'Połączenie nawiązane!';
  27. //header("Refresh: 1;");
  28. }
  29. catch(PDOException $e){
  30. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  31. header("Refresh: 1; index.php");
  32. }
  33. }
  34.  
  35. public function wyswietl(){
  36. //$ilosc = $this -> pdo -> exec('DELETE FROM klient WHERE idKlient=1');
  37. echo '<h2>Tabela Klientów</h2> <br />';
  38. echo '<table>
  39. <tr>
  40. <td class="naglowek">Imię</td>
  41. <td class="naglowek">Nazwisko</td>
  42. <td class="naglowek">Miejscowość</td>
  43. <td class="naglowek">Pesel</td>
  44. <td class="naglowek">Telefon</td>
  45. </tr>';
  46. $this->kwerenda = $this->pdo->query('select * from klient');
  47.  
  48. foreach($this->kwerenda as $rekord){
  49. echo '<tr>
  50. <td>'.$rekord['imie'].'</td>
  51. <td>'.$rekord['nazwisko'].'</td>
  52. <td>'.$rekord['miejscowosc'].'</td>
  53. <td>'.$rekord['pesel'].'</td>
  54. <td>'.$rekord['telefon'].'</td>
  55. <td>
  56. <form action="connect.php" method="POST">
  57. <input type="submit" name="akcja" value="Usun" />
  58. </form>
  59. </td>
  60. <td>
  61. <form action="connect.php" method="POST">
  62. <input type="submit" name="akcja" value="Modyfikuj" />
  63. </form>
  64. </td>
  65. <td>
  66. <form action="connect.php" method="post">
  67. <select name="akcja">
  68. <option selected="selected">Modyfikuj</option>
  69. <option>Usun</option>
  70. </select>
  71. </form>
  72. </td>
  73. </tr>';
  74. $this->i++;
  75. }
  76.  
  77. echo '</table>';
  78. }
  79.  
  80. public function test(){
  81. if(isset($_POST['menu'])){
  82. if($_POST['menu']=="Usun"){
  83. //$this -> ob -> exec('DELETE FROM klient WHERE idKlient=1');
  84. echo '1';
  85. }
  86. if($_POST['menu']=="Modyfikuj"){
  87. //$this -> ob -> exec('DELETE FROM klient WHERE idKlient=1');
  88. echo '2';
  89. }
  90. }
  91. //echo 'testtest';
  92. }
  93.  
  94. public function akcja(){
  95. //$this -> pdo -> exec('DELETE FROM klient WHERE idKlient=$i');
  96. if($_POST['akcja']=="Modyfikuj") $this->modyfikuj();
  97. if($_POST['akcja']=="Usun") $this->usun();
  98.  
  99. }
  100.  
  101. public function modyfikuj(){
  102. //echo 'mod function';
  103. }
  104.  
  105. public function usun(){
  106. //echo 'del function';
  107. }
  108.  
  109. }
  110.  
  111.  
  112. ?>
  113.  
  114. </body>
  115. </html>




Jednak jestem uparty i chciałbym to miec na liscie rozwijalnej, poniewaz zakladając zwiększanie ilosci jakis funkcjoalnosci nie bede dodawał kolejny kolumn na stronie....tylko lepiej wybrac to z listy rozwijalnej

Dobra, drogą testów, domysłów zrobiłem to co chciałem. Może komuś się to przyda, więc udostepnie główną część kdu:


  1. <form action="connect.php" method="post">
  2. <select name="akcja">
  3. <option selected="selected">Modyfikuj</option>
  4. <option>Usun</option>
  5. </select>
  6. <input type="submit" name="akcjaW" value="OK" />
  7. </form>
  8. </td>
  9. </tr>';
  10. $this->i++;
  11. }
  12.  
  13. echo '</table>';
  14. }
  15.  
  16. public function test(){
  17. if(isset($_POST['akcjaW'])){
  18. if($_POST['akcja']=="Usun"){
  19. //$this -> ob -> exec('DELETE FROM klient WHERE idKlient=1');
  20. echo '1';
  21. }
  22. elseif($_POST['akcja']=="Modyfikuj"){
  23. //$this -> ob -> exec('DELETE FROM klient WHERE idKlient=1');
  24. echo '2';
  25. }
  26. }
  27.  
  28. }
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.