Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Updatowanie wpisów w sql
Forum PHP.pl > Forum > PHP
WebKing
Witam,
Mam pytanie do was a mianowicie:

W bazie danych mam w tabeli points, points_max, points_add
Pierwsza do określenia liczby punktów, druga do określenia liczby maksymalnej punktów a ostatnia do określenia liczby punktów do dodania

Chciałbym aby za jednym kliknięciem dodać liczbę punktów do dodania do liczby punktów aktualnie ale tak aby dodawać do ustalonego limitu w tabeli points_max

Przykład:
Twoje punkty: 78/100
Punkty do dodania: 53 (załaduj punkty)

I po załadowaniu liczba aktualnych punktów to 100/100 a liczba do dodania to 31 bo tyle powinno zostać

Proszę o pomoc i daje plusy
Pozdrawiam
PawelC
To proste, poprzez select pobierasz aktualną ilość punktów w bazie, do nich dodajesz points_add i updatujesz wynik w bazie.
WebKing
No tak ale jeżeli to zrobię to doda mi wszystko
PawelC
Wykorzystaj do tego instrukcje warunkowe oczywiście na punktach po dodaniu np. załózmy wynik wyszedł 110 to zrobisz tak:
  1. <?php
  2. $wynik="110";
  3. if($wynik <= 100){
  4. // update do bazy
  5. } elseif ($wynik > 100){
  6. $pozostalo=$wynik - 100;
  7. echo 'Pozostało '.$pozostalo;
  8. }
  9. ?>
WebKing
Ale jakie ja mam wykonać zapytanie?
phpion
Nie testowałem ale spróbuj w ten sposób:
  1. UPDATE tabela SET points=(IF(points + points_add <= points_max, points + points_add, points_max)) WHERE id=123;
PawelC
Pobierasz dane selectem ,później pobrany wynik kolumny points_add dodajesz do points, wynik dodawania punktów wrzucasz do instrukcji warunkowej którą podałem, aby sprawdzić ilość punktów. Prosty przykład:
  1. <?php
  2. $sql="select * from punkty";
  3. $pobranie=mysql_query($sql) or die(mysql_error());
  4. $suma=mysql_fetch_array($pobranie);
  5.  
  6. $punkty=$suma['points'];
  7. $do_dodania=$suma['points_add'];
  8. $wynik=$punkty + $do_dodania;
  9.  
  10. if($wynik <= 100){
  11.  
  12. $sql="update punkty set `points`='$wynik'";
  13.  
  14. } elseif ($wynik > 100){
  15.  
  16. $pozostalo=$wynik - 100;
  17. echo 'Pozostało '.$pozostalo;
  18. $suma=$wynik - $pozostalo;
  19.  
  20. $sql="update punkty set `points`='$suma' , `points_add`='$pozostalo'";
  21.  
  22.  
  23. }
  24. ?>
WebKing
Do phpion Sprawdziłem ale to zapytanie dodaje na max tyle ile powinno ale nie odbiera z points_add
phpion
To może nie zadziałać:
  1. UPDATE tabela SET points=(IF(points + points_add <= points_max, points + points_add, points_max)), points_add=0 WHERE id=123;

gdyż zerujesz to samo pole, które chcesz dodać. Ale mimo to spróbuj. Jeśli nie zadziała to rozbij to na 2 zapytania:
  1. UPDATE tabela SET points=(IF(points + points_add <= points_max, points + points_add, points_max)) WHERE id=123;
  2. UPDATE tabela SET points_add=0 WHERE id=123;
WebKing
Pierwszy update robi dobrze ale drugi zeruje nawet gdy nie powinien
Dam wam mój skrypt proszę was o zmianę go do dobrego stanu
  1. <?php
  2. mysql_connect("host", "user", "pass");
  3.  
  4. $data = "SELECT * FROM users WHERE id='1'";
  5. $query = mysql_query($data);
  6. $row = mysql_fetch_array($query);
  7.  
  8. echo "points: ".$row['points']."/".$row['points_max']."<br />";
  9. echo "points to add: ".$row["points_add"];
  10. if ($row["points_max"] == $row["points"]) {
  11. echo " (+)";
  12. } else {
  13. if ($row["points_add"] > 0) {
  14. echo " (<a href='?act=add'>+</a>)";
  15. if ($_GET["act"] == "add") {
  16. $num = $row["points_add"] + $row["points"];
  17. $minus = $num - $row["points_max"];
  18. $update = "UPDATE users SET points='$minus', points_add=points_add-'$minus' WHERE id='1'";
  19. mysql_query($update);
  20. }
  21. }
  22. }
  23. ?>
PawelC
Sprawdź:
  1. <?php
  2. mysql_connect("host", "user", "pass");
  3.  
  4. if ($_GET["act"] == "add") {
  5. $sql = "SELECT * FROM users WHERE id='1'";
  6. $pobranie=mysql_query($sql) or die(mysql_error());
  7. $suma=mysql_fetch_array($pobranie);
  8.  
  9. $punkty=$suma['points'];
  10. $do_dodania=$suma['points_add'];
  11. $limit=$suma['points_max'];
  12. $wynik=$punkty + $do_dodania;
  13. echo 'Points '.$punkty.'/'.$limit.'<br />';
  14. echo 'Punkty do dodania '.$do_dodania.'<br />';
  15. if($wynik <= 100){
  16.  
  17. $sql="update users set `points`='$wynik' where id='1'";
  18.  
  19. } elseif ($wynik > 100){
  20.  
  21. $pozostalo=$wynik - 100;
  22. echo 'Pozostało '.$pozostalo;
  23. $suma=$wynik - $pozostalo;
  24.  
  25. $sql="update users set `points`='$suma' , `points_add`='$pozostalo' where id='1'";
  26.  
  27. }
  28. }
  29. ?>


EDIT: zrobiłem poprawkę kodu winksmiley.jpg
phpion
Cytat(WebKing @ 26.04.2008, 12:52:05 ) *
Pierwszy update robi dobrze ale drugi zeruje nawet gdy nie powinien

A kiedy nie powinien? Jeśli chcesz zaktualizować całą tabelę, a nie tylko konkretny wiersz to wywal warunki WHERE i powinno zadziałać.
PawelC
jemu chodzi dokładnie o to
  1. <?php
  2. UPDATE tabela SET points_add=0 WHERE id=123;
  3. ?>

Że nawet jak pozostaną punkty to points_add jest 0 winksmiley.jpg

WebKing sprawdzałeś ten kod co Ci dałem?
phpion
Nie pozostaną bo wcześniejsze zapytanie je przerzuci do points.
PawelC
No tak ale limit jest 100, a co zrobisz gdy wynik będzie 110? Według mnie 10 punktów powinno zostać w points_add.
phpion
Fakt, no ale chyba z przerobieniem tego zapytania kolega już sobie poradzi... Wtedy ma całość zamkniętą w 2 zapytaniach bez konieczności babrania się z tym w PHP.
WebKing
Wyszło chłopaki dzięki za pomoc
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.