Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Uaktualnienie tabeli przez formularz
Forum PHP.pl > Forum > Przedszkole
Telside
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.
kresh
  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. ?>
Telside
Bardzo dziękuję. Pozdrawiam
Kicok
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().
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.