Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z formularzem
Forum PHP.pl > Forum > Przedszkole
Ania-678
Witam.

Mam problem z przekazaniem $_POST do mysql_query w tymże formularzu:

  1. <?php
  2. echo "<br />Edycja: <b>".$edit_player['user']."</b> (".$edit_player['id'].")" ;
  3. echo "<form method=POST action=edycja.php?edit=".$_GET['edit']."&e=ed>
  4.  Imię: <input type=text name=name value=".$edit_player['user']."><br />
  5.  <input type=submit name=submit value=Zmień /><br />
  6. </form>";
  7.  if ($_GET['e'] == 'ed')
  8. {
  9.  
  10. $meu45f = $_POST['name'];
  11. echo $meu45f;
  12. mysql_query("UPDATE users SET user='".$meu45f."' WHERE id= ".$edit_player['id']."");
  13. }
  14. ?>


Ten SET='".$meu45f."' się nie chce za nic zrobić i ciągle puste pole wstawia, ale zapytanie działa bo sprawdzałam, wstawiając w SET zwykły tekst i szło, ale z $_POST nie chce i już godzinę nad tym siedzę i przyczyny czemu tak się dzieje znaleźć nie mogę... sadsmiley02.gif
Olimpia_ona
po lini 14 daj:
  1. <?php
  2. echo "<br />UPDATE users SET user='".$meu45f."' WHERE id= ".$edit_player['id'];
  3. ?>


i to zapytanie wklej bezpośrednio do mysql'a, a zwroci Ci dokładny komunikat o błędzie
Ania-678
i jest error:

  1. UPDATE users SET user='blablabla' WHERE id= 1


Tyle że pole zamiast zrobić si blablabla to zrobiło się puste (nawet jak ręcznie przez mysql'a zmienię jego zawartość na COŚ to i tak zmienia je na... nic
strife
A jaką masz strukturę bazy, może to pole user, ma ograniczenia np. do 0 znaków, albo ma inny typ niż tekstowy?
Ania-678
user varchar(20) utf8_general_ci NULL: Nie

Ale jak zmienię np:

$meu45f = $_POST['name'];


na

$meu45f = "blabla";

To zapytanko poleci od 1 kopa i WSADZI tam blabla ........ dry.gif
strife
Cytat
nawet jak ręcznie przez mysql'a zmienię jego zawartość na COŚ to i tak zmienia je na... nic


To jest niemożliwe, jak to ręcznie, przez konsole mysql tak? To raczej nie jest możliwe, po tym co przeczytałem w następnym Twoim poście, że user jest varchar(20). :]

Dalej ... Sprawdź czy dane post zostają poprawnie wysyłane:

  1. <?php
  2. // ...
  3. echo '<pre>';
  4. var_export($_POST);
  5. echo '</pre>';
  6. ?>


Popraw formularz:

  1. <?php
  2. <input type=text name=name value=".$edit_player['user'].">
  3. ?>


Jeśli masz więcej html od php, to lepiej uciec od php, i zrobić w ten sposób

  1. <input type="text" name="name" value="<?php echo $edit_player['user'] ?>" />
  2. <?php
  3. // .. jakis kod 
  4. ?>
  5. <div>I znowu html</div>


Formularz Ci poprawiłem (resztę też zalecam poprawić wg. tego co napisałem), zapomniałaś o ciapkach, zobacz czy po poprawieniu dane metodą POST zostają przesyłane.

Pozdrawiam.
Ania-678
Wiem że NIEMOŻLIWE ale jednak...

i ciapkowane i bez, jest to samo, zaś ten cały var_export wywalił to:

  1. <?php
  2. 'name' => 'blablabla',
  3. 'submit' => 'Zmień',
  4. )
  5. ?>
box3r
czemu wszystkie zmienne sa getem odbierana a ta newralgiczna pusta zmienna Postem ?
strife
Cytat(Ania-678 @ 7.08.2007, 15:14:30 ) *
Wiem że NIEMOŻLIWE ale jednak...

i ciapkowane i bez, jest to samo, zaś ten cały var_export wywalił to:

  1. <?php
  2. 'name' => 'blablabla',
  3. 'submit' => 'Zmień',
  4. )
  5. ?>


Stworzyłem sobie przed chwilą taką strukturę bazy:

  1. CREATE TABLE `test` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user` varchar(20) DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. )


I z konsoli mysql bez problemu zostają dodane wartości do bazy. Ale już rozumiem o co Ci chodziło mówiąc, że ręcznie dodajesz to do bazy, nieważne smile.gif

1. Poprawiłaś formularz?
2. Sprawdź czy wartość, $edit_player['user'] nie jest pusta (var_export" title="Zobacz w manualu PHP" target="_manual, var_dump" title="Zobacz w manualu PHP" target="_manual i pochodne).
3. Przerób ten fragment kodu tak:

  1. <?php
  2. mysql_query("UPDATE users SET user='".$_POST['name']."' WHERE id= ".$_GET['edit']) or die(mysql_error());
  3. ?>


Może być tak, że po kliknięciu na submit, zmienna $edit_player przestaje istnieć. Na przyszłość pracuj na pełnym raportowaniu błędów, wtedy unikniesz błędów smile.gif

Pozdrawiam.
Ania-678
ehhh... może zrobię prościej - dam całość bo Ja już głupieję:

  1. <?php
  2.  
  3. require_once("./cfg.php");
  4.  
  5. echo "<br /><center><ul>
  6. <li><a href=edit.php?edit=>Edytuj użytkownika</a>
  7.  
  8. </ul>";
  9.  
  10. if (isset ($_GET['edit']) && $_GET['edit'] == $_GET['edit'])
  11. {
  12. echo "<center><form method=\"get\" action=\"edit.php?edit=".$_GET['edit']."\">
  13. <input type=\"text\" name=\"edit\" />
  14. <br /><br /><input type=\"submit\" value=\"Edytuj\" /></form>";
  15. if (!empty($_GET['edit']))
  16. {
  17. $ch = mysql_fetch_array(mysql_query('SELECT id FROM users WHERE id = '.$_GET['edit'].''));
  18. if (empty($ch['id']))
  19. {
  20. echo "Zły użytkownik!";
  21. }
  22. else
  23. {
  24. $edit_player = mysql_fetch_array(mysql_query('SELECT * FROM users WHERE id = '.$_GET['edit'].''));
  25. }
  26. echo "<br />Edycja: <b>".$edit_player['user']."</b> (".$edit_player['id'].")" ;
  27. echo "<form method=POST action=\"edit.php?edit=".$_GET['edit']."&e=ed\">
  28.  Imię: <input type=text name=name value=".$edit_player['user']."><br />
  29.  <input type=\"submit\" name=\"submit\" value=\"Zmień\" /><br />
  30. </form>";
  31.  if ($_GET['e'] == 'ed')
  32. {
  33. $meu45f = $_POST['name'];
  34.  
  35. echo $meu45f;
  36. mysql_query("UPDATE users SET user='".$meu45f."' WHERE id= ".$edit_player['id']."") or die (mysql_error());
  37. }
  38. }
  39.  
  40. }
  41.  
  42. ?>
box3r
cos masz z tymi getami i postami nakombinowane zamien wszystko na metode get albo post; zobacz ze jak przesylasz $_POST['name']; to nie nie odczytasz poprawnie $_GET['edit']
strife
Spokojnie smile.gif

Sprawdziłem ten skrypt w takiej formie jak podałaś u siebie na serwerze, i wszystko działa. Jak rozumiem na początku podajemy czyjeś id, a potem możemy edytować jego nazwę. Stworzyłem sobie taką strukturę bazy:

  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user` varchar(20) DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. )


I wszystko pięknie działa. Wpisuje sobie id w moim przypadku 1, wpisuję inną nazwę klikam zmień, wchodzę do konsoli mysql i widzę, że zostało zmienione. Musisz mieć gdzieś indziej błąd, jaką masz wersję php? Masz włączone register_globals (jeśli tak wyłącz)?
Ania-678
Nie wiem czy GETy i POSTy by miały coś do tego bo jak wspomniałam - zapytanie sie wykonuje ale za diabli tej wartości nie chce wsadzić...

php mam 5.1
Czy mam włączone register_globals ? Nie wiem, hosting na nazwie...
strife
Cytat(Ania-678 @ 7.08.2007, 16:23:16 ) *
Nie wiem czy GETy i POSTy by miały coś do tego bo jak wspomniałam - zapytanie sie wykonuje ale za diabli tej wartości nie chce wsadzić...

php mam 5.1
Czy mam włączone register_globals ? Nie wiem, hosting na nazwie...


A nie lepiej najpierw sprawdzać na domowym serwerze? Masz na nazwie phpmyadmin, albo coś do zarządzania bazą?

Odpal ten skrypt, wpisz sobie id użytkownika jakiego chcesz edytować, następnie zmień jego nazwę, kliknij na zmień i powiedz czy wyświetla jakieś błędy. Jeśli nie, to teraz wejdź do phpmyadmin i zobacz czy ta wartość została zmieniona, wydaje mi się, że problem, może być spowodowany tym, że po edycji nie widzisz aktualnie zmienionej wartości tylko tą poprzednią. Dodaj coś takiego:

  1. <?php
  2. $meu45f = $_POST['name'];
  3.  
  4. // echo $meu45f;
  5. mysql_query("UPDATE users SET user='".$meu45f."' WHERE id= ".$edit_player['id']."") or die (mysql_error());
  6. echo '<a href="?edit=' . $_GET['edit'] . '">Dodane zostaly poprawnie zapisane kliknij tutaj aby odswiezyc</a>';
  7. ?>


Co do register_globals, zobaczysz czy masz on/off przez phpinfo" title="Zobacz w manualu PHP" target="_manual.

Pozdrawiam.
Ania-678
Ja już totalnie z tym wysiadam...

Zrobiłam tabelkę Twoim zapytaniem:

  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user` varchar(20) DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. )


i zapytanko z formularza się wykonało.. ale ZNÓW tylko pole wyczyściło i już nic doń nie wsadziło.............. dry.gif

btw: register_globals mam na OFF

i jeszcze jedno - JAk zrobić zliczanie mysql_query ?

Co prawda znalazłam cuś takiego:

  1. <?php
  2. Class SQL {
  3. var $Counter = 0; // zmienna z ilością odwołań
  4. function Query( $Question ) {
  5. $this->Counter++;
  6.  mysql_query( $Question );
  7. }
  8. }
  9.  
  10. $SQL = new SQL();
  11.  
  12. // w kodzie
  13. $Question = 'SELECT * ...';
  14. $SQL->Query( $Question );
  15.  
  16. // na końcu
  17.  
  18. echo( $SQL->Counter );
  19. ?>


Lecz Ja bym chciała na "czyste" mysql_query bo sporo tego mam... :roll2:
strife
Nie zrobisz inaczej zliczenia, musisz mieć jakąś nakładkę.

Cytat
i zapytanko z formularza się wykonało.. ale ZNÓW tylko pole wyczyściło i już nic doń nie wsadziło..............

Ja wszystko co miałem na ten temat do powiedzenia napisałem wyżej zastosuj się do moich wskazówek, po koleji krok po kroku analizuj każdą linijkę kodu. Ew. jak chcesz, i Ci zależy(choć normalnie tego nie robię) odezwij się do mnie na PW, to zobaczę ten Twój serwer i powiem Ci co robisz źle smile.gif

Pozdrawiam.
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.