Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]UPDATE, ale nie wszystkich pól, update pól zawierajacych wartość
David92
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.09.2009

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


Witam serdecznie mam kod w php w którym użytkownik może zmieniać swoje dane, i teraz chciałbym aby były zmieniane tylko dane których pola zawierają jakąś wartość tzn. że jeżeli wypełnię tylko pole Imię to chciałbym żeby tylko imie się zmeniło , a niestety w dotychczasowym kodzie reszta zmienia się także i w tym przypadku podstawiane są puste pola. Proszę o pomoc jakbym mógł to rozwiązać, odrazu powiem że cały kod robię dla nauki.

  1. <?php
  2. include_once 'db.inc.php';
  3. include_once 'function.inc.php';
  4. if(isset($_POST['zmiana'])){
  5. if($_POST['imie'] != ''){
  6. if(!codenone($_POST['imie'])){
  7. redirect("updateinfo.php?error_code");
  8. exit ('');
  9. }
  10. }elseif($_POST['nazwisko'] != ''){
  11. if(!codenone($_POST['nazwisko'])){
  12. redirect("updateinfo.php?error_code");
  13. exit ('');
  14. }
  15. }elseif($_POST['miejscowosc'] != ''){
  16. if(!codenone($_POST['miejscowosc'])){
  17. redirect("updateinfo.php?error_code");
  18. exit ('');
  19. }
  20. }elseif($_POST['wiek'] != ''){
  21. if(checkAge($_POST['wiek'])){
  22. redirect("up
  23. dateinfo.php?error_age");
  24. exit ('');
  25. }
  26. }elseif($_POST['kontakt'] != ''){
  27. if(!checkPhone($_POST['kontakt'])){
  28. redirect("updateinfo.php?error_phone");
  29. exit ('');
  30. }
  31. }
  32. $sql = "UPDATE user SET
  33. imie = '$_POST[imie]',
  34. nazwisko = '$_POST[nazwisko]',
  35. miejscowosc = '$_POST[miejscowosc]',
  36. wiek = '$_POST[wiek]',
  37. kontakt = '$_POST[kontakt]'
  38. WHERE login='$_SESSION[zalogowany]'";
  39. if(mysql_query($sql)){
  40. redirect("konto.php?moje_konto&updateinfo");
  41. }else{
  42. redirect("updateinfo.php?error");
  43. }
  44. }
  45. include 'header.php';
  46. include 'left.php';
  47. opentable("Zmień dane");
  48. if(isset($_SESSION['zalogowany']) && !empty($_SESSION['zalogowany']) && $poziom == 2 || $poziom == 1){
  49. if(isset($_GET['error'])){
  50. echo "<p>Błąd podczas zmiany danych!</p>";
  51. }elseif(isset($_GET['error_age'])){
  52. echo "<p>Błąd podczas zmiany danych!</p>";
  53. }elseif(isset($_GET['error_phone'])){
  54. echo "<p>Błąd podczas zmiany danych!</p>";
  55. }elseif(isset($_GET['error_code'])){
  56. echo "<p>Błąd podczas zmiany danych!</p>";
  57. }
  58. $sql = mysql_query("SELECT * FROM user WHERE login='$_SESSION[zalogowany]' ");
  59. if(!$sql){
  60. exit ('Problem podczas wykonywania zapytania : ' .mysql_error(). '');
  61. }
  62. echo "<form action=".$_SERVER['PHP_SELF']." method='POST'>";
  63. echo "<table class='dane'>";
  64. echo "<tr>";
  65. echo "<td><strong>Aktualne dane</strong></td>";
  66. echo "<td><strong>Nowe dane</strong></td>";
  67. echo "</tr>";
  68. while($dane = mysql_fetch_array($sql)){
  69. echo "<tr>";
  70. echo "<td>Imię: ". $dane['imie'] ."</td>";
  71. echo "<td><input type='text' name='imie' /></td>";
  72. echo "</tr>";
  73. echo "<tr>";
  74. echo "<td>Nazwisko: ". $dane['nazwisko'] ."</td>";
  75. echo "<td><input type='text' name='nazwisko' /></td>";
  76. echo "</tr>";
  77. echo "<tr>";
  78. echo "<td>Miejscowość: ". $dane['miejscowosc'] ."</td>";
  79. echo "<td><input type='text' name='miejscowosc' /></td>";
  80. echo "</tr>";
  81. echo "<tr>";
  82. echo "<td>Wiek: ". $dane['wiek'] ."</td>";
  83. echo "<td><input type='text' name='wiek' /></td>";
  84. echo "</tr>";
  85. echo "<tr>";
  86. echo "<td>Kontakt: ". $dane['kontakt'] ."</td>";
  87. echo "<td><input type='text' name='kontakt' /></td>";
  88. echo "</tr>";
  89. }
  90. echo "</table>";
  91. echo "<input type='submit' value='Zmień' name='zmiana' />";
  92. echo "</form>";
  93. }
  94. closetable();
  95. include 'footer.php';
  96. ?>


Pozdrawiam!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pobierz dane z bazy i wrzuć je do formularza. Po zatwierdzeniu, dostaniesz wszystkie dane, zmienione i te nie... Ew, wrzuć do sesji.
Go to the top of the page
+Quote Post
David92
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.09.2009

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


No tak że na to nie wpadłem bardzo dobry pomysł dziękuję bardzo:)

Liczę też na to że jeżeli ktoś ma inne pomysły to też się podzieli nimi w moim temacie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A czemu nie sprawdzasz jakie pola są niepuste? jeśli to zrobisz to w teorii tylko odpowiadające im kolumny możesz dodać do UPDATE.
Przykład? Jako parametr dajesz tablicę, z której usuwasz wszystkie pola, których wartości są puste. Teraz tylko coś analogicznego do:
  1. $query = 'UPDATE tabela SET';
  2. if(count($array)>0)
  3. {
  4. foreach($array AS $key => $value)
  5. {
  6. $query .= ' '.$key.' = \''.$value.'\',';
  7. }
  8. $query = rtrim($query, ',');
  9. mysql_query($query.' WHERE id = '.$record_id);
  10. }
  11. else
  12. {
  13. //sypnij jakiś komunikat, że nie było update
  14. }

Oczywiście nie dałem tu ochrony przed sqlinjection czy tego jak ową tablice przygotować, tylko ogólny zamysł. Używając FW z query_builderami całość jest jeszcze prostsza.
Go to the top of the page
+Quote Post
David92
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.09.2009

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


Dzięki thek, twoja sugestia odzwierciedla dokładnie to o co mi chodziło od samego początku, nie będę musiał wysyłać za każdym razem wszystkich pól tylko te które są "niepuste" czyli do zmiany:)
Teraz tylko pozostaje mi rozmyślić jak wrzucic do tablicy wartości ale myślę że dam radę(IMG:style_emoticons/default/smile.gif)
Pozdro!
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Sugestia ~Kshyhoo jest lepsza od ~theka. Pomyśl co się stanie w momencie, gdy będę chciał usunąć niektóre swoje dane? Przykładowo: mam wpisany numer telefonu, ale jednak wolałbym go nie podawać, więc wyczyszczę zawartość pola z telefonem. Pole w bazie nie zostanie zaktualizowane bo zostanie pominięte jako puste. Będę musiał kombinować z wpisywaniem jakiś głupot by ukryć mój faktyczny numer telefonu.
Go to the top of the page
+Quote Post
David92
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.09.2009

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


Hmm no tutaj masz rację, i w sumie jest to szybsza metoda. Od samego początku chciałem zrobić tak jak mówi thek. Oba pomysły są fajne i bardzo mi pomogły, ale z drugiej strony jest prawdą że ktoś może nie chcieć podawać wszystkich danych. Jeszcze jakby inaczej patrzeć to nawet jakbym wymagał od każdego wszystkich danych to w niczym nie będzie przeszkadzać to że nadpiszę tak jakby niektóre pola.
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Phpion oczywiście ma rację co do "czyszczenia pól". Ja podałem tylko techniczną stronę "Czy się da tak zrobić, żeby...", gdyż to czy zastosujemy sposób przeze mnie prezentowany czy Kshyhoo tak naprawdę jest tylko kawałkiem backendu i do tego jego jednym z ostatnich. Plusem mojego jest możliwość edycji konkretnych pól bez dotykania niepotrzebnie innych, ale to które rozwiązanie jest lepsze zależy od choćby frontu. Może bowiem być opcja czyszczenia jednego lub dwóch pól poprzez checkbox w stylu "Wyczyść tekst" i bez możliwości wyświetlenia innych. W ten sposób ingerencja w jedną kolumnę jest o wiele prostsza. Ale jak zaznaczam, to JAK się podejdzie do update w pewien sposób zależy od założeń projektu.
Go to the top of the page
+Quote Post

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: 23.12.2025 - 04:59