Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zmienna z kropką w nazwie
bobo1
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 7.03.2008

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


Witam,

mam taki problem. W bazie danych mam dane o następującej strukturze:

Klucz | Wartość
k.k1 | wartość 1
k.kk | wartość k
.....

Generalnie chodzi o to, że klucz ma w nazwie kropkę. Teraz chcę stworzyć formularz przy pomocy, którego będę mógł edytować pole wartość.

  1. <?php
  2. echo'<form method="post">';
  3. $zapytanie = "SELECT * FROM tabela LIMIT 0, 10";
  4. $wykonaj = mysql_query($zapytanie) or die ('Nie można wykonać zapytania.');
  5. echo'<table>';
  6. while ($lista = mysql_fetch_array($wykonaj)) {
  7. echo'<tr><td width="300">'.$lista['wartosc'].'</td>
  8.  <td> <input type="text" name="'.$lista['klucz'].'" size="40" maxlength="" value="'.$lista['wartosc'].'"></td>
  9. </tr>';
  10. }
  11. echo'</table> <input type="hidden" name="sended" value="true" />
  12. <input type="submit" value="Zapisz zmiany">
  13. </form>';
  14. }
  15. ?>


Następnie chcę zapisać nowe wartości do bazy. Tylko, że pojawiają się schody ponieważ pole klucz składa się z nazw, które zawierają kropki w związku z czym

Kod
"UPDATE tabela SET en='".$_POST['klucz']."' WHERE key='".$lista['wartosc']."'";


nic nie daje ponieważ wartość $_POST['klucz'] jest pusta.

Wie ktoś co z tym zrobić ?
Powód edycji: złe bbcode /~strife/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rybik
post
Post #2





Grupa: Zarejestrowani
Postów: 99
Pomógł: 15
Dołączył: 29.07.2006

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


  1. <?php
  2. mysql_connect("localhost", "db_user", "db_password")or die("Nie można nawiązać połączenia z bazą"); //połączenie z bazą danych
  3. mysql_select_db("db_name") or die("Wystąpił błąd podczas wybierania bazy danych");
  4.  
  5. // rozdzielamy logike od wygladu, najpierw zapytanie, przy okazji przechodzimy na 
    ang
  6.  
  7. // zastanów się czy potrzebujesz wszystkich wartości, wyciagne 2, w razie czego wr
    ócisz do *
  8. $query = "SELECT my_keys,my_values FROM db_table LIMIT 0, 10";
  9. // zastanów się, czy warto informować usera o błędnym zapytaniu, to pomoże włamywa
    czom a Ty możesz obsługiwać błędy inaczej
  10. // poza tym błąd formularza nie musi nam kłaść całej strony
  11. if ($result = mysql_query($query)) {
  12. $fields = array();
  13. while (list($name, $value) = mysql_fetch_row($result)) {
  14. // przepiszemy wynik do tablicy
  15. $fields[$name]=$value;
  16. }
  17. // poniższą linie można usunąć jeżeli to mały formularz
  18.  
  19. // zaczynamy generować wynikowy html
  20. $output = "<form method=\"POST\">";
  21. $output .= "<table cellpadding=\"3\" cellspacing=\"0\">";
  22. foreach ($fields as $name => $value) {
  23.  // podświetlanie co drugiego rzędu
  24.  $even_odd = ( '-odd' != $even_odd ) ? '-odd' : '-even';
  25.  $output .= "<tr class=\"hilite".$even_odd."\">";
  26.  $output .= "<td>";
  27.  $output .= "<label for=\"$name\">$value</label><input type=\"text\" name=\"$name\" size=\"40\" maxlength=\"\" value=\"$value\"/>";
  28.  $output .= "</td>";
  29.  $output .= "</tr>";
  30. }
  31. $output .= "<tr class=\"footer\"><td><input type=\"submit\" value=\"Zapisz zmiany\"></td></tr>";
  32. $output .= "</table>";
  33. $output .= "</form>";
  34. echo $output;
  35. } else {
  36. echo "Formularz niedostępny";
  37. }
  38.  
  39. // zapis danych, korzystamy z używanej wcześniej tablicy $fields
  40.  
  41. foreach ($fields as $key => $value) {
  42. // uwzględniamy nieszczęsne kropki
  43. $key_posted = str_replace ('.','_',$key);
  44. // leniwy update - nie ruszamy nie zmienionych pól
  45. if (isset($_POST[$key_posted]) && $_POST[$key_posted]!=$value) {
  46. // tutaj KONIECZNIE filtrujemy dane od usera, poza htmlspecialchars możesz użyć wł
    asnych dodatkowych filtrów
  47. $value_new = htmlspecialchars($_POST[$key_posted]);
  48. $query = "UPDATE db_table SET my_values='$value_new' WHERE my_keys='$key'";
  49. if (mysql_query($query)) {
  50. echo "Zmieniłeś $value na $value_new <br/>";
  51. } else {
  52. echo "Nie dokonano zmian w bazie";
  53. }
  54. } else {
  55. echo "Nie dokonano zmian w formularzu";
  56. } // if
  57. } // foreach
  58.  
  59. ?>


zamiast dwóch komórek tablei stosuje labelki i koloruje co drugi rządek, poniżej style css

  1. <style type="text/css">
  2. label {width: 300px;}
  3. tr.hilite-even {background-color: #f0f0f0;}
  4. tr.hilite-odd {background: #fafafa;}
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.10.2025 - 03:01