Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wysłanie zmiennych formularza do danej części skryptu w tym samym pliku
Forum PHP.pl > Forum > Przedszkole
Time
Bawię się z php i powoli coś się tworzy, lecz napotkałem problem.
Napisałem (za pomocą tutoriali) skrypt rejestracji i logowania + profil użytkownika. Profil użytkownika zmieniłem tak by wyświetlana była napisana przez niego wiadomość/notka/komentarz... jeszcze nie wiem za bardzo co smile.gif Następnie dodałem edycję owej notki pobierając zmienne dla danego ID usera. Klikając w link 'Edytuj" przechodzi do pliku 'edit.php' wyświetlają się pola tekstowe, wypełniam je i klikam submita, teraz powinna nastąpić aktualizacja rekordów za pomocą

  1. $zapytanie = "UPDATE `tabela` SET `title` = '$title',`tresc` = '$tresc' WHERE `id`= '$id'";
  2. $wykonaj = "mysql_query('$zapytanie')";


i właśnie w tutaj zacząłem się gubić. Gdy klikam submita, zamiast zaktualizować rekordy przekierowuje mnie w taki sposób edit.php?id=

Plik edit.php wygląda tak:

  1. <?php
  2.  
  3. require 'header.php'; // Dołącz początkowy kod HTML
  4. require 'config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  5. require_once 'user.class.php';
  6.  
  7. $title = $_POST['tytul'];
  8. $tresc = $_POST['tekst'];
  9. $id = $_GET['id'];
  10.  
  11. $zapytanie = "UPDATE `users` SET `title` = '$title',`tresc` = '$tresc' WHERE `id`= '$id'";
  12. $wykonaj = "mysql_query('$zapytanie')";
  13.  
  14. /**
  15.  * Tylko dla zalogowanych użytkowników
  16.  */
  17. if (!user::isLogged()) {
  18. echo '<p class="error">Przykro nam, ale ta strona jest dostępna tylko dla zalogowanych użytkowników.</p>';
  19. }
  20.  
  21. else {
  22. $id = $_GET['id'];
  23.  
  24. /**
  25.   * Sprawdź czy użytkownik o podanym ID istnieje
  26.   */
  27. $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));
  28.  
  29. // Użytkownik nie istnieje
  30. if ($userExist[0] == 0) {
  31. die ('<p>Przykro nam, ale użytkownik o podanym identyfikatorze nie istnieje.</p>');
  32. }
  33.  
  34. /**
  35.   * Użytkownik istnieje, tak więc pokaż pola edycji
  36.   */
  37.  
  38. echo '<form action="edit.php?id='.$note['id'].'" method="post">
  39. <table>
  40. <tr>
  41. <td>
  42. Tytuł:
  43. </td>
  44. <td>
  45. <input type="text" name="tytul" />
  46. </td>
  47. </tr>
  48. <tr>
  49. <td>
  50. Treść:
  51. </td>
  52. <td>
  53. <input type="text" name="tekst" />
  54. </td>
  55. </tr>
  56. </table>
  57. <input type="submit" value="Edytuj" />
  58. </form>';
  59.  
  60. }
  61.  
  62. require 'footer.php'; // Dołącz końcowy kod HTML
  63.  
  64. ?>
adek-
Gdzie tworzysz tablicę &note patrząc na $note['id'] której odwołanie jest w linijce 39? wydaje mi się że tam powinno być
  1. <form action="edit.php?id='.$id.'" method="post">


w końcu na samym początku ustalasz $id = $_GET['id']; , więc tablica superglobalna $_GET jest już przypisana do zmiennej $id
Time
Cytat
Gdzie tworzysz tablicę &note patrząc na $note['id'] której odwołanie jest w linijce 39?


Nie za bardzo rozumiem co Ci chodzi ;/ przypomnę że jestem początkujący.

w linni 39 zmieniłem
  1. <form action="edit.php?id='.$note['id'].'" method="post">


na

  1. <form action="edit.php?id='.$id.'" method="post">


I teraz wysyłając formularz adres się nie zmienia, pola się czyszczą a w bazie nic się nie zmienia.
nospor
Cytat
Nie za bardzo rozumiem co Ci chodzi ;/ przypomnę że jestem początkujący.
Co nie zwalnia cie z faktu myslenia nad co piszesz. Skoro piszesz: $note['id'] to chyba z jakiegoś powodu to napisales i powinienes wiedziec z jakiego.

Twoja poprawka ze zmienną $id jest ok. Masz blad tu:
$wykonaj = "mysql_query('$zapytanie')";
Czemu wziales całośc w cudzysłowia? Skoro chcesz się uczyć to ucz się trochę porządniej, bo to nawet nie są podstawy a podstawy podstaw. Cudzysłow oznacza tekst. A ty chcesz wykonac funkcje a nie zrobic tekst.
Tak ma byc (i bez apostrofów w srodku. tez bez sensu...)
$wykonaj = mysql_query($zapytanie);
Time
Faktycznie smile.gif czytałem o tym wczoraj ale wypadło z głowy. Wszystko działa jak powinno,
Dzięki wielkie.

jednak nie działa jak powinno ;/
Owszem baza jest teraz uaktualniana, ale gdy wejdę do edycji i nie zaktualizuję tylko cofnę się do strony profilu by podejrzeć notatkę, jest pusta.
Wychodzi na to że przechodząc do edit.php od razu wysyła formularz, który jest pusty.

Mógłby ktoś poprawić kod i wytłumaczyć o co kaman?

Albo podać jakiś sposób na wstawienie zmiennej jako domyślną wartość pola tekstowego tak by formularz przesłał już istniejącą wartość zamiast pustych zmiennych.

edit.php:
  1. <?php
  2. /**
  3.  * Profil
  4.  * @author Sobak
  5.  * @package User System
  6.  */
  7.  
  8. require 'header.php'; // Dołącz początkowy kod HTML
  9. require 'config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  10. require_once 'user.class.php';
  11.  
  12.  
  13.  
  14. /**
  15.  * Tylko dla zalogowanych użytkowników
  16.  */
  17. if (!user::isLogged()) {
  18. echo '<p class="error">Przykro nam, ale ta strona jest dostępna tylko dla zalogowanych użytkowników.</p>';
  19. }
  20.  
  21. else {
  22. $id = $_GET['id'];
  23.  
  24. /**
  25.   * Sprawdź czy użytkownik o podanym ID istnieje
  26.   */
  27. $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));
  28.  
  29. // Użytkownik nie istnieje
  30. if ($userExist[0] == 0) {
  31. die ('<p>Przykro nam, ale użytkownik o podanym identyfikatorze nie istnieje.</p>');
  32. }
  33.  
  34. /**
  35.   * Użytkownik istnieje, tak więc pokaż jego profil
  36.   */
  37. $title = $_POST['tytul'];
  38. $tresc = $_POST['tekst'];
  39. $id = $_GET['id'];
  40.  
  41. $zapytanie = "UPDATE `users` SET `title` = '$title',`tresc` = '$tresc' WHERE `id`= '$id'";
  42. $wykonaj = mysql_query($zapytanie);
  43.  
  44. /**
  45.  * Jeżeli formularz został wysłany
  46.  */
  47.  
  48. if ( isset ( $_POST['tekst'] ) ) {
  49.  
  50. // wykonaj czynność
  51. header("Refresh:3; URL=http://www.tenebra.hdsi.pl/ind/");
  52. echo 'Notatka zapisana';
  53.  
  54. }
  55.  
  56. echo '<form action="edit.php?id='.$id.'" method="post">
  57. <table>
  58. <tr>
  59. <td>
  60. Tytuł:
  61. </td>
  62. <td>
  63. <input type="text" name="tytul" value="" />
  64. </td>
  65. </tr>
  66. <tr>
  67. <td>
  68. Treść:
  69. </td>
  70. <td>
  71. <textarea name="tekst" cols="15" rows="5"></textarea>
  72. </td>
  73. </tr>
  74. </table>
  75. <input type="submit" value="Edytuj" />
  76. </form>
  77. <a href="index.php">Strona Główna</a>';
  78.  
  79.  
  80. require 'footer.php'; // Dołącz końcowy kod HTML
  81. }
  82. ?>
nospor
Cytat
Wychodzi na to że przechodząc do edit.php od razu wysyła formularz, który jest pusty.
No tak. Bo ty ten kod:
$title = $_POST['tytul'];
$tresc = $_POST['tekst'];
$id = $_GET['id'];

$zapytanie = "UPDATE `users` SET `title` = '$title',`tresc` = '$tresc' WHERE `id`= '$id'";
$wykonaj = "mysql_query('$zapytanie')";
Wykonujesz niezależnie czy ktos wysłał formularz czy nie.
Obejmij go warunkiem i po sprawie
  1. if (isset($_POST['tytul'])){
  2. $title = $_POST['tytul'];
  3. $tresc = $_POST['tekst'];
  4. $id = $_GET['id'];
  5.  
  6. $zapytanie = "UPDATE `users` SET `title` = '$title',`tresc` = '$tresc' WHERE `id`= '$id'";
  7. $wykonaj = mysql_query($zapytanie);
  8. }
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.