Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][mySQL] Aktualizacja rekordów z warunkiem
--Michu--
post
Post #1





Goście







Witam. Nie potrafię napisać takiego kodu aktualizacji rekordu z warunkami:

formularz, a w nim dane do aktualizacji:
$nick
$dana
$2dana
$3dana
$4dana

i teraz co ma się stać: musi się aktualizować nick (tylko przy aktualizowanej danej i tylko jeśli dana spełnia warunek) i każda dana, która ma wartość większą od poprzedniej zapisanej w bazie. Czyli jeśli nowa $2dana jest mniejsza < od starej zapisanej w bazie $2dana, to ten rekord nie jest aktualizowany, tylko pozostałe (jeśli oczywiście spełniają ten warunek).

Przykład:

Stare dane zapisane w bazie:
nick przy $dana "Mietek"
wartość $dana "1"
nick przy $2dana "Stefek"
wartość $2dana "2"
nick przy $3dana "Benek"
wartość $3dana "3"
nick przy $4dana "Piotrek"
wartość $4dana "1"

Aktualizuję:
podaję nick "Michu"
podaję $dana "2"
podaję $2dana "3"
podaję $3dana "1"
podaję $4dana " "

Co się dzieje:
stara $dana < nowa $dana = aktualizacja danej i nicku przy danej = nick przy $dana "Michu", wartość $dana "2"
stara $2dana < nowa $2dana = aktualizacja danej i nicku przy danej = nick przy $2dana "Michu", wartość $2dana "3"
stara $3dana > nowa $3dana = wszystko zostaje bez zmian = nick przy $3dana "Benek", wartość $3dana "3"
stara $4dana > nowa $4dana = wszystko zostaje bez zmian = nick przy $4dana "Piotrek", wartość $4dana "1"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


nie jestem pewien, czy trafiam w meritum sprawy, ale w PHP zmienne nie mogą zaczynać się od cyfry, tylko koniecznie od litery lub podkreślnika.

Pozdrawiam
Go to the top of the page
+Quote Post
--Michu--
post
Post #3





Goście







Nie nie, to tylko przykład smile.gif
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Podaj kod jak to robisz bo bez tego ani rusz.


--------------------
Go to the top of the page
+Quote Post
--Michu--
post
Post #5





Goście







Z tym, że ja właśnie nie umiem go zrobić... Próbowałem z WHERE na podstawie tego, ale mi nie wychodziło:

  1. <?php 
  2. // odbieramy dane z formularza 
  3. $dana = $_POST['dana']; 
  4. $2dana = $_POST['2dana']; 
  5. $nick = $_POST['nick'];
  6. $data = date('d.m.Y');
  7.  
  8. if($dana and $2dana) { 
  9.  
  10. // łączymy się z bazą danych 
  11. $connection = @mysql_connect('xx', 'xx', 'xx') 
  12. or die('Brak połączenia z serwerem MySQL'); 
  13. $db = @mysql_select_db('xx', $connection) 
  14. or die('Nie mogę połączyć się z bazą danych'); 
  15.  
  16. // dodajemy rekord do bazy 
  17. $ins = @mysql_query("UPDATE tabela1 SET nick='$nick', dana='$dana', 2dana='$2dana', inne='$data' WHERE nick='$nick'"); 
  18.  
  19. if($ins) echo "ok";
  20. else echo "<center>Błąd! Nie udało się dodać nowego rekordu</center>"; 
  21.  
  22. mysql_close($connection); 
  23. } 
  24. ?>
Go to the top of the page
+Quote Post
-Berg-
post
Post #6





Goście







  1. <?php
  2. 2dana='$2dana'
  3. ?>

Jeśli to nie problem z zmienną zaczynającą się od liczby to skopiuj swoje zapytanie do phpmyadmin, podstaw jakieś dane zamiast zmiennych i sprawdź jak się zachowuje baza danych. Jeśli wypluje błąd to oznacza, że błąd leży po stronie bazy danych, jeśli nie to problem jest w php (chociaż ja nie widzę poza tą liczbą żadnego innego błędu).
Go to the top of the page
+Quote Post
piotrooo89
post
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Tak jak napisał Berg prztestuj zapytanie w phpMyAdmin... Możesz równierz spróbować obsłuzyć ten błąd za pomocą mysql_error.

Np.
  1. <?php
  2. // odbieramy dane z formularza 
  3. $dana = $_POST['dana']; 
  4. $2dana = $_POST['2dana']; 
  5. $nick = $_POST['nick'];
  6. $data = date('d.m.Y');
  7.  
  8. if($dana and $2dana) { 
  9.  
  10. // łączymy się z bazą danych 
  11. $connection = @mysql_connect('xx', 'xx', 'xx') 
  12. or die('Brak połączenia z serwerem MySQL'); 
  13. $db = @mysql_select_db('xx', $connection) 
  14. or die('Nie mogę połączyć się z bazą danych'); 
  15.  
  16. // dodajemy rekord do bazy 
  17. $ins = @mysql_query("UPDATE tabela1 SET nick='$nick', dana='$dana', 2dana='$2dana', inne='$data' WHERE nick='$nick'"); 
  18.  
  19. if($ins) echo "ok";
  20. else echo '<center>Błąd! Nie udało się dodać nowego rekordu z powodu:' . mysql_error . '</center>'; 
  21.  
  22. mysql_close($connection); 
  23. }
  24. ?>


Ten post edytował piotrooo89 24.04.2008, 11:39:01


--------------------
Go to the top of the page
+Quote Post
--Michu--
post
Post #8





Goście







Ależ tutaj nie ma błędu, to jest to na czym chciałem zbudować ten skrypt, ale nie umiem i niewiem jak to zrobić dlatego piszę ten post z nadzieją, że ktoś mnie naprowadzi smile.gif
A co do zmiennych to kolejny raz piszę, że to tylko przykład smile.gif
Go to the top of the page
+Quote Post
piotrooo89
post
Post #9


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




A jeszcze takie pytanie czy kod w którym masz formularz poprawinie wysyła dane do tego skryptu? Bo to też jest wazne.


--------------------
Go to the top of the page
+Quote Post
MacPain
post
Post #10





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (10%)
X----


Może błąd tkwi w tym, że chcesz zamienić pole nick zmienną $nick gdzie pole nick = $nick smile.gif. Czyli zmieniasz zawartość pola na to samo.

Ten post edytował MacPain 24.04.2008, 11:59:57
Go to the top of the page
+Quote Post
-Berg-
post
Post #11





Goście







Nie do końca chyba rozumiem co chcesz zrobić ale
  1. <?php
  2. if(!empty($_POST['dana_wyslana1'])) {
  3. @query = mysql_query("UPDATE tabela SET nick='". $_POST['nick1']. "', dana_wyslana1='" .$_POST['dana_wyslana1']. "' WHERE dana_wyslana1 < $_POST['dana_wyslana1']");
  4. }
  5. ?>


I tak po kolei dla każdego pola.
Go to the top of the page
+Quote Post
--Michu--
post
Post #12





Goście







Oj, to tylko przykład, na którym chciałem zbudować skrypt, o którym mowa w 1 poście. Przeczytajcie go proszę smile.gif
Go to the top of the page
+Quote Post
Crozin
post
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. <?
  2.  
  3. //dane
  4. $nick = 'Mietek';
  5. $data = array(
  6. 'dane1' => '2',
  7. 'dane2' => '5', 
  8. 'dane3' => '1', 
  9. 'dane4' => '8'
  10. );
  11.  
  12. //pobieramy aktualne wartosciu pol
  13. $qr = mysql_query("SELECT dane1, dane2, dane3, dane4 FROM uzytkownicy WHERE nick = '$nick';");
  14. $row = mysql_fetch_array($qr, MYSQL_ASSOC);
  15.  
  16. //tworzymy nowe zapytanie
  17. $query = 'UPDATE uzytkownicy SET ';
  18. $fields = array();
  19.  
  20. foreach($row as $field => $value)
  21. if($data[$field] > $value)
  22. $fields[] = $field . ' = '' . $data[$field] . ''';
  23.  
  24. if(!count($fields)){
  25. //nie aktualizujemy (bo nie mamy czego
  26. }else{
  27. $fields = implode(', ', $fields);
  28. $query .= $fields . " WHERE nick = '$nick';";
  29. mysql_query($query);
  30. }
  31.  
  32. ?>
Go to the top of the page
+Quote Post
--Michu--
post
Post #14





Goście







Witam, nie mogłem wcześniej sprawdzić kodu, gdyż na moim hostingu odbywała się aktualizacja serwera mysql.
No więc nie działa mi ten kod, dodałem oczywiście łączenie się z bazą i pozmieniałem niezbędne dane... On dane powinien wyciągać z formularza, próbowałem tutaj zmieniać, ale nic to nie pomogło. Ponadto nie miało być WHERE nick=nick, nick miał się także aktualizować (oczywiście jeśli pozostałe wartości byłyby większe od poprzednich), więc tutaj trzebaby chyba jeszczę trochę pozmieniać i znowu nie bardzo mi wychodzi smile.gif
Go to the top of the page
+Quote Post
--Michu--
post
Post #15





Goście







Dokładnie chodzi mi o takie coś, z tym, że ten kod tutaj zmienia nick przy każdym rekordzie, a ja chcę by zmieniał tylko przy aktualizowanym:

  1. <?php 
  2. // odbieramy dane z formularza 
  3.  
  4. $username = 'xx';
  5. $password = 'xx';
  6. $database = 'xx';
  7. mysql_connect('xx', $username, $password);
  8. @mysql_select_db($database);
  9. $query="SELECT * FROM tabela2";
  10. $result=mysql_query($query);
  11. $num=mysql_numrows($result);
  12. $nick=mysql_result($result,"nick");
  13. $danaa=mysql_result($result,"danaa");
  14. $danab=mysql_result($result,"danab");
  15. $data=mysql_result($result,"inne");
  16.  
  17. $danaa1 = $_POST['dana']; 
  18. $danab1 = $_POST['danaa']; 
  19. $nick1 = $_POST['nick'];
  20. $data1 = $_POST['data'];
  21.  
  22. if($danaa1>$danaa) { 
  23.  
  24. // łączymy się z bazą danych 
  25. $connection = @mysql_connect('xx', 'xx', 'xx') 
  26. or die('Brak połączenia z serwerem MySQL'); 
  27. $db = @mysql_select_db('xx', $connection) 
  28. or die('Nie mogę połączyć się z bazą danych'); 
  29.  
  30. // dodajemy rekord do bazy 
  31. $ins = @mysql_query("UPDATE tabela2 SET nick='$nick1', danaa='$danaa1'"); 
  32.  
  33. if($ins) echo "<center><h1>Proszę czekać!</h1><br>Jeśli nie zostaniesz przeniesiony w ciągu 2 sekund, <u><a href='staty3.php'>kliknij tutaj.</a></u></center>";
  34. else echo "<center>Błąd! Nie udało się dodać nowego rekordu</center>"; 
  35.  
  36. mysql_close($connection); 
  37. }
  38. elseif($danab1>$danab) { 
  39.  
  40. // łączymy się z bazą danych 
  41. $connection = @mysql_connect('xx', 'xx', 'xx') 
  42. or die('Brak połączenia z serwerem MySQL');
  43. $db = @mysql_select_db('xx', $connection) 
  44. or die('Nie mogę połączyć się z bazą danych'); 
  45.  
  46. // dodajemy rekord do bazy 
  47. $ins = @mysql_query("UPDATE tabela2 SET nick='$nick1', danab='$danab1'"); 
  48.  
  49. if($ins) echo "<center><h1>Proszę czekać!</h1><br>Jeśli nie zostaniesz przeniesiony w ciągu 2 sekund, <u><a href='staty3.php'>kliknij tutaj.</a></u></center>";
  50. else echo "<center>Błąd! Nie udało się dodać nowego rekordu</center>"; 
  51.  
  52. mysql_close($connection); 
  53. }
  54. else {
  55. echo("zla dana");
  56. }
  57.  
  58. ?>
Go to the top of the page
+Quote Post
crackcomm
post
Post #16





Grupa: Zarejestrowani
Postów: 184
Pomógł: 6
Dołączył: 23.02.2008
Skąd: Katowice

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


robimy
Kod
$zapytanie_wyciagajace = mysql_query("SELECT * FROM tabela WHERE nick = '$_POST[nick]'");
$wynik_wyc = mysql_fetch_array($zapytanie_wyciagajace);
$b_user = $wynk_wyc['nick'];
$b_dana1 = $wynk_wyc['dana1'];
if($_POST['dana1']>$b_dana1) {
mysql_query("UPDATE ...SET dana1 = '$_POST[dana1]...");
}


Ten post edytował crackcomm 26.04.2008, 20:23:20


--------------------
Sygnaturka comes here.
Go to the top of the page
+Quote Post
--Michu--
post
Post #17





Goście







Ten kod też nie działa, niewiem, może ja coś źle robię?

  1. <?php
  2. $username = 'xx';
  3. $password = 'xx';
  4. $database = 'xx';
  5. mysql_connect('xx', $username, $password);
  6. @mysql_select_db($database);
  7. $zapytanie_wyciagajace = @mysql_query("SELECT * FROM tabela2 WHERE nick='$_POST['nick']'");
  8. $wynik_wyc = @mysql_fetch_array($zapytanie_wyciagajace);
  9. $b_user = $wynk_wyc['nick'];
  10. $b_dana1 = $wynk_wyc['atack'];
  11. if($_POST['atak']>$b_dana1) {
  12. mysql_query("UPDATE tabela2 SET atack='$_POST['atak']");
  13. }
  14. ?>
Go to the top of the page
+Quote Post
webdice
post
Post #18


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Masz błąd w tej lini:

  1. <?php
  2. $zapytanie_wyciagajace = @mysql_query("SELECT * FROM tabela2 WHERE nick='$_POST['nick']'");
  3. ?>


Twoja męka to kara za stosowanie @. Naucz się pisać poprawnie aplikacje bo wygłuszanie błędów to porażka która nie wiem po co została stworzona.
Go to the top of the page
+Quote Post
--Michu--
post
Post #19





Goście







nadal tylko pusta strona... poprawiłem też dwie literówki, było $wynk_wyc, a powinno byc $wynik_wyc, ale to także nic nie pomogło.
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: 22.08.2025 - 06:39