Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Uaktualnienie tabeli przez formularz
Telside
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.04.2007

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


Witam. Chcę zrobić coś takiego: mam formularz, do tego formularza ładują się dane z bazy, zmieniam je i uaktualniam (jest to operacja tylko na jednym wierszu, na 6 kolumnach). Napisałem sobie taki kod:
  1. <?php
  2. mysql_select_db (baza);
  3. mysql_query ('SET NAMES latin2');
  4.  
  5. $zapytanie = "UPDATE logotyp SET logotyp1=".$_POST['linia1'].", logotyp2=".$_POST['linia2'].", logotyp3=".$_POST['linia3'].", logotyp4=".$_POST['linia4'].", logotyp5=".$_POST['linia5'].", logotyp6=".$_POST['linia6']."" ;
  6. $wykonaj = mysql_query ($zapytanie);
  7.  
  8. $zapytanie = "SELECT * FROM logotyp";
  9. $wykonaj = mysql_query ($zapytanie);
  10. $wiersz = mysql_fetch_array ($wykonaj);
  11.  
  12. echo  '<FORM ACTION="" METHOD="POST">
  13. <INPUT TYPE="text" NAME="linia1" value="'.$wiersz['logotyp1'].'">
  14. <INPUT TYPE="text" NAME="linia2" value="'.$wiersz['logotyp2'].'">
  15. <INPUT TYPE="text" NAME="linia3" value="'.$wiersz['logotyp3'].'">
  16. <INPUT TYPE="text" NAME="linia4" value="'.$wiersz['logotyp4'].'">
  17. <INPUT TYPE="text" NAME="linia5" value="'.$wiersz['logotyp5'].'">
  18. <INPUT TYPE="text" NAME="linia6" value="'.$wiersz['logotyp6'].'">
  19. <INPUT TYPE="image" src="zmien-gif.php">
  20. </form> ';
  21. ?>

Problem w tym, że uaktualnienie działa tylko wtedy, gdy wpisuję jednym ciągiem liczby (ale już np. '1 2 3' nie działa) - w ogóle nie wchodzą mi litery. Pola w bazie to VARCHAR. Pod PHPMyAdmin mogę wpisywać cokolwiek i działa, a tutaj przez php taka klapa. Proszę o pomoc, co tu jest źle. Dzięki z góry.

Ten post edytował Telside 30.04.2007, 15:25:49
Go to the top of the page
+Quote Post
kresh
post
Post #2





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

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


  1. <?php
  2. $zapytanie = "UPDATE logotyp SET logotyp1='".$_POST['linia1']."', logotyp2='".$_POST['linia2']."', logotyp3='".$_POST['linia3']."', logotyp4='".$_POST['linia4']."', logotyp5='".$_POST['linia5']."', logotyp6='".$_POST['linia6']."'" ;
  3. ?>


każdą wartość z tablicy $_POST należy ująć w apostrof/cudzysłów, w celu niknięcia podobnych problemów. Dodatkowo dobrze jest zabezpieczyć skrypt przed niepowołanymi znakami w zmiennych.

Przykład kodu realizującego w/w zadanie:
  1. <?php
  2. /**
  3. Funkcja czyszcząca zmienną z niepowołanych znaków
  4. Dodaje znaki uceiczki "" przed znakami, które mogą 
  5. spowodować błąd
  6.  */
  7. function escape( $string ){
  8.  
  9. if ( function_exists( 'mysql_real_escape_string' ) ) {
  10. return mysql_real_escape_string( trim( $string ) );
  11. } elseif( function_exists( 'mysql_escape_string' ) ) {
  12. return mysql_escape_string( trim( $string ) );
  13. }
  14. return addslashes( $string );
  15.  
  16. }
  17.  
  18. /**
  19. Funkcja czyszcząca dane z "" dodawanych 
  20. w funkcji escape
  21.  */
  22. function clear( $mixData ){
  23.  
  24. if( is_array( $mixData ) ){
  25. foreach( $mixData as $key => $value ){
  26. $mixData[$key] = $this->clear( $value );
  27. }
  28. } else {
  29. $mixData = stripslashes( $mixData );
  30. }
  31. return $mixData;
  32.  
  33. }
  34. ?>


Przykład zastosowania do Twojego kodu:
  1. <?php
  2. $zapytanie = "UPDATE logotyp SET logotyp1='".escape( $_POST['linia1'] )."', logotyp2='".escape( $_POST['linia2'] )."', logotyp3='".escape( $_POST['linia3'] )."', logotyp4='".escape( $_POST['linia4'] )."', logotyp5='".escape( $_POST['linia5'] )."', logotyp6='".escape( $_POST['linia6'] )."'" ;
  3. ?>


oraz odczytu:
  1. <?php
  2. echo  '<FORM ACTION="" METHOD="POST">
  3. <INPUT TYPE="text" NAME="linia1" value="'.clear( $wiersz['logotyp1'] ).'">
  4. <INPUT TYPE="text" NAME="linia2" value="'.clear( $wiersz['logotyp2'] ).'">
  5. <INPUT TYPE="text" NAME="linia3" value="'.clear( $wiersz['logotyp3'] ).'">
  6. <INPUT TYPE="text" NAME="linia4" value="'.clear( $wiersz['logotyp4'] ).'">
  7. <INPUT TYPE="text" NAME="linia5" value="'.clear( $wiersz['logotyp5'] ).'">
  8. <INPUT TYPE="text" NAME="linia6" value="'.clear( $wiersz['logotyp6'] ).'">
  9. <INPUT TYPE="image" src="zmien-gif.php">
  10. </form> ';
  11. ?>


lub w skróconej wersji:
  1. <?php
  2. $wiersz = clear( mysql_fetch_array ( $wykonaj ) );
  3. ?>


Ten post edytował kresh 30.04.2007, 15:48:41


--------------------
Programuj pod kątem interfejsu, nie implementacji
Gang of Four

michalbarys.pl
Go to the top of the page
+Quote Post
Telside
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.04.2007

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


Bardzo dziękuję. Pozdrawiam
Go to the top of the page
+Quote Post
Kicok
post
Post #4





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

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


kresh, funkcja escape() doda znaki ucieczki przed apostrofami itp. ale służy to tylko do poinformowania MySQLa, że "tu jeszcze nie kończy się string, traktuj ten apostrof jako normalny tekst".
W bazie danych znaki ucieczki zapisane nie będą, więc nie ma potrzeby dodatkowego maltretowania pobieranych danych funkcją clear().


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:23