Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z przyciskiem.
Gruchol
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


Witam,
Mam taki kod : http://wklej.org/id/1619031/
I problem leży tutaj :

  1. if(isset($_POST['like'])) {
  2. mysqli_query($db, "UPDATE baza SET rank=rank+1 WHERE id='$id'");
  3. header("Location: <a href="http://localhost/&quot%3b%29;" target="_blank">http://localhost/");</a>
  4. }


Ponieważ chcę aby po kliknięciu przycisku like do tabeli rank w bazie dodawał się 1 punkt.
Problem polega na tym, że po kliknięciu przycisku punkty dodają się do każdego rekordu po kolei a chcę aby dodało się w tym rekordzie w którym się kliknęło.
Np. mam taką tabelę :

http://screenshooter.net/101736853/dypirpx

I kliknę przycisk like przy raz to się dodaje jeden punkt, to jest okej tylko że jak kliknę drugi i trzeci raz to doda się do rekordu dwa i trzy a ma się dodawać tylko do raz.


Go to the top of the page
+Quote Post
rad11
post
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


a var_dump($id) co ma?

nierozumie dlaczego w value dajesz submit, zrob moze tak:
  1. <input type="image" name="like" src="like.png" value="<?php $id ?>" onfocus="blur()" />
  2.  
  3. if(isset($_POST['like'])) {
  4. mysqli_query($db, "UPDATE baza SET rank=rank+1 WHERE id='$_POST['like']'");
  5. header("Location: <a href="http://localhost/&quot%3b%29;" target="_blank">http://localhost/");</a>
  6. }


Ten post edytował rad11 1.02.2015, 12:45:22
Go to the top of the page
+Quote Post
Gruchol
post
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


string(2) "27"
Go to the top of the page
+Quote Post
untorched
post
Post #4





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


  1. mysqli_query($db, "UPDATE baza SET rank=rank+1 WHERE id=".(int)$id);


Bo chyba w bazie id masz jako int.
Go to the top of the page
+Quote Post
Gruchol
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


Tak w bazie jest id jako int. Gdy zamienię to co wysłałeś, przycisk nie reaguje.

Ten post edytował Gruchol 1.02.2015, 13:00:25
Go to the top of the page
+Quote Post
rad11
post
Post #6





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


  1. <input type="submit" name="like" src="like.png" value="<?php $id ?>" onfocus="blur()" />
Go to the top of the page
+Quote Post
Gruchol
post
Post #7





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


rad przerobiłem troszkę to co wysłałeś ponieważ to zapytanie mysql nie chciało działać.
Zrobiłem to tak :

  1. $idl = $_POST['like'];
  2. echo "</form>";
  3. if(isset($_POST['like'])) {
  4. mysqli_query($db, "UPDATE baza SET rank=rank+1 WHERE id='$idl'");
  5. }


I teraz strona się ładuje jednak nadal po wciśnięciu przycisku nic się nie dzieje.
A przyciski wyglądają tak : http://screenshooter.net/101736853/sdydndv

Przyciski się naprawiły jednak zapytania do bazy nadal się nie wykonują .
Go to the top of the page
+Quote Post
rad11
post
Post #8





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


  1. <td>
  2. <form method="POST">
  3. <input type="image" name="like" src="like.png" value="submit" onfocus="blur()" />
  4. <input type="text" value="$id" style="display:none;" name="id" />
  5. </form>
  6. </td>
  7.  
  8. if(isset($_POST['like'])) {
  9. mysqli_query($db, "UPDATE baza SET rank=rank+1 WHERE id=$_POST['id']");
  10. header("Location: <a href="http://localhost/&quot%3b%29;" target="_blank">http://localhost/");</a>
  11. }
  12.  


Ten post edytował rad11 1.02.2015, 13:33:30
Go to the top of the page
+Quote Post
untorched
post
Post #9





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


Matko boska. Dlaczego nie chcecie używać rzutowania na INT? Przecież tu SQL Injection jak się patrzy.

@rad11:
Cytat
<input type="text" value="$id" style="display:none;" name="id" />


Co to ma być?

  1. <input type="hidden" name="id" value="$id" />



  1. mysqli_query($db, "UPDATE baza SET rank=rank+1 WHERE id=".(int)$_POST['id']) or die(mysqli_error($db));


Ten post edytował untorched 1.02.2015, 13:42:46
Go to the top of the page
+Quote Post
Gruchol
post
Post #10





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


Okej wszystko działa do czasu.

Mam sortowanie tego id aby wyświetlało to które ma najwięcej głosów i wygląda to tak :

$zapytanie = mysqli_query($db, "SELECT * FROM reklama WHERE wys='1' ORDER BY rank DESC");

Tylko że teraz jest taki problem że gdy np. raz i dwa mają po 10 pkt to wszystko zaczyna szaleć i znowu daje na przemian.
Gdy liczby są różne jest wszystko ok.
Go to the top of the page
+Quote Post
untorched
post
Post #11





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


Coś takiego powinno zadziałać

  1. $zapytanie = mysqli_query($db, "SELECT * FROM reklama WHERE wys='1' ORDER BY rank, id DESC");
Go to the top of the page
+Quote Post
Gruchol
post
Post #12





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


Teraz sortuje odwrotnie i jest ten sam problem .

Zrobiłem $cos = var_dump($id);
i gdy to wyświetlam pokazuje się :

string(2) "26" i gdy klikam cały czas na 1 i ten sam przycisk zmienia się raz na string(2) "26" a raz na string(2) "25"

Ma ktoś może jeszcze jakieś pomysły jak to naprawić ?

@Edit
Już nie mam siły do tego :/
Cały dzień próbuje to naprawić i nici.

Nagrałem nawet krótki filmik aby pokazać na żywo co się dzieje :

https://www.youtube.com/watch?v=j36SJghu4ls...eature=youtu.be

Proszę o dalszą pomoc.
Go to the top of the page
+Quote Post
com
post
Post #13





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


wrzuć ten kod po poprawkach (IMG:style_emoticons/default/smile.gif)

zrobiłeś sobie sortowanie to się sortuje wiec się zmienia ?
Go to the top of the page
+Quote Post
Gruchol
post
Post #14





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


Tak wygląda cały kod :

http://wklej.org/hash/63815c61a29/

No tak sortuje się ładnie ale jak np. 2 rekordy mają tą samą wartość w punktach to skrypt szaleje i daje każdemu który ma tyle samo pkt. Zobacz że klikam 1 przycisk a dodaje się na przemian do innego.
Go to the top of the page
+Quote Post
com
post
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


nie daje każdemu tylko je sortuje wiec jak klikasz potem to klikasz w rekord który jest na tym miejscu ale to już jest inny rekord, masz sortowanie po rankingu i id malejąco

miesza się bo sortujesz to, a że klikasz w tego samego lajka to to przeskakuje, albo wywal te sortowanie albo klikaj cały czas w ten sam rekord tam gdzie on jest a nie tam gdzie był na samym początku (IMG:style_emoticons/default/smile.gif)

jak miałeś :
26 99
27 100

to jak zwiększysz 26 to bd miał
27 100
26 100

A nie
26 100
27 100

A Ty przyjmujesz te druga błędą wersje to potem wszytko skacze

Ten post edytował com 1.02.2015, 23:13:26
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: 22.08.2025 - 21:52