Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Glosowanie
Forum PHP.pl > Forum > Przedszkole
Raven1122
Witam mam taki problem. Napisałem skrypt glosowania, podczas oddawania głosu żaden błąd się nie wyswitla, lecz liczba głosów w mysql się nie zmienia. Czy mógłby ktoś pomoc?

Kod:

  1. Głosowanie na najlepszego DJ'a
  2. <br><br>
  3. <form action="/php/pooldj.php" method="get">
  4. <input type="radio" value="DJ Cherry" name="pool">DJ Cheery<br>
  5. <input type="radio" value="DJ Pastyl" name="pool">DJ Pastyl<br>
  6. <input type="radio" value="DJ Mario" name="pool">DJ Mario<br>
  7. <input type="radio" value="Hard Player" name="pool">Hard Player<br>
  8. <input type="radio" value="Perzyk" name="pool">Perzyk<br>
  9. <input type="radio" value="DJ Tasior" name="pool">DJ Tasior<br>
  10. <input type="submit" value="Wyślij">
  11. </form>


  1. <?php
  2.  
  3.  
  4. if (isSet($_GET['pool'])){
  5. $vote = $_GET['pool'];
  6. }
  7. else {
  8. $vote = '';
  9. }
  10.  
  11. if($vote = ''){
  12. echo ("Proszę zaznaczyć 1 z DJ'ów");
  13. return true;
  14. }
  15.  
  16. $link = mysql_connect("host", "login", "pass") or
  17.  
  18. mysql_select_db(bassplay_forum)or
  19.  
  20. $sql = "UPDATE djpool SET
  21. glosy = glosy + 1;
  22. WHERE dj = '" . $_GET['pool'];
  23.  
  24.  
  25. ?>
  26.  


Mefiuu
  1.  
  2. $sql = "UPDATE djpool SET
  3. glosy = glosy + 1 WHERE dj = '" . $_GET['pool']."'";
  4.  
  5.  
  6.  
  7. ?>
  8.  


podstawy podstaw ...

edit: tam nie zauważyłem, był średnik. Teraz powinno hulać i grzmieć
Raven1122
Zmieniłem wszystko, lecz dalej nie działa. Wartość liczbowa w glosy pozostaje jako 0.

  1. <?php
  2.  
  3.  
  4. if (isSet($_GET['pool'])){
  5. $vote = $_GET['pool'];
  6. }
  7. else {
  8. $vote = '';
  9. }
  10.  
  11. if($vote = ''){
  12. echo ("Proszę zaznaczyć 1 z DJ'ów");
  13. return true;
  14. }
  15.  
  16. $link = mysql_connect("host", "login", "pass") or
  17.  
  18. mysql_select_db(bassplay_forum)or
  19.  
  20. $sql = "UPDATE djpool SET
  21. glosy = glosy + 1 WHERE dj = '" . $_GET['pool']."'";
  22.  
  23.  
  24.  
  25. ?>
  26.  
  27.  
  28. ?>
Mefiuu
  1.  
  2. echo $vote."<br />";
  3.  
  4. $sql = "UPDATE djpool SET
  5. glosy = glosy + 1 WHERE dj = '$vote'";
  6.  
  7. mysql_query($sql) or die('Błąd: ').mysql_error();
  8.  
  9.  


co wyświetla?
Raven1122
Niestety dalej jest pusta strona.

  1. <?php
  2.  
  3.  
  4. if (isSet($_GET['pool'])){
  5. $vote = $_GET['pool'];
  6. }
  7. else {
  8. $vote = '';
  9. }
  10.  
  11. if($vote = ''){
  12. echo ("Proszę zaznaczyć 1 z DJ'ów");
  13. return true;
  14. }
  15.  
  16. $link = mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or
  17.  
  18. mysql_select_db(bassplay_forum)or
  19.  
  20. echo $vote."<br />";
  21.  
  22. $sql = "UPDATE djpool SET
  23. glosy = glosy + 1 WHERE dj = '$vote'";
  24.  
  25.  
  26. mysql_query($sql) or die('Błąd: ').mysql_error();
  27.  
  28.  
  29. ?>
  30.  
  31.  
  32.  
  33.  
Mefiuu
o man... wiem chyba.

to :
  1. if($vote = ''){
  2. echo ("Proszę zaznaczyć 1 z DJ'ów");
  3. return true;
  4. }


na to:

  1. if($vote == ''){
  2. echo ("Proszę zaznaczyć 1 z DJ'ów");
  3. return true;
  4. }



tu ma być porównanie a nie przypisanie.
maxil
a może masz włączone ukrywanie błędów.
daj na początku po <?php

  1. error_reporting(E_ALL | E_STRICT);
  2. ini_set('display_errors', true);


i zobacz czy pokaże błędy
Raven1122
Niestety glosu nie dodalo, lecz podczas gdy wyslalem juz formularz na bialej stronie pojawil sie nick DJ'a

  1. <?php
  2.  
  3.  
  4. if (isSet($_GET['pool'])){
  5. $vote = $_GET['pool'];
  6. }
  7. else {
  8. $vote = '';
  9. }
  10.  
  11. if($vote == ''){
  12. echo ("Proszę zaznaczyć 1 z DJ'ów");
  13. return true;
  14. }
  15.  
  16. $link = mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or
  17.  
  18. mysql_select_db(bassplay_forum)or
  19.  
  20. echo $vote."<br />";
  21.  
  22. $sql = "UPDATE djpool SET
  23. glosy = glosy + 1 WHERE dj = '$vote'";
  24.  
  25.  
  26. mysql_query($sql) or die('Błąd: ').mysql_error();
  27.  
  28.  
  29. ?>
  30.  
  31.  
  32.  
  33.  
Mefiuu
teraz:

  1. <?php
  2.  
  3.  
  4. if (isSet($_GET['pool'])){
  5. $vote = $_GET['pool'];
  6. }
  7. else {
  8. $vote = '';
  9. }
  10.  
  11. if($vote == ''){
  12. echo ("Proszę zaznaczyć 1 z DJ'ów");
  13. return true;
  14. }
  15.  
  16. $link = mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or
  17.  
  18. mysql_select_db('bassplay_forum')or
  19.  
  20. echo $vote."<br />";
  21.  
  22. $sql = "UPDATE djpool SET
  23. glosy = glosy + 1 WHERE dj = '$vote'";
  24.  
  25.  
  26. mysql_query($sql) or die('Błąd: ').mysql_error();
  27.  
  28.  
  29. ?>
  30.  


w ogóle masz to trochę dennie zaprojektowane ...
Raven1122
Jest dennie zaprojektowane, bo jestem początkujący biggrin.gif
Zła wiadomość, dalej nie działa ;/
maxil
a zobacz ten kodzik:

  1. <?php
  2.  
  3. if (isset($_GET['pool']))
  4. {
  5. $link = mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or die(mysql_error());
  6. mysql_select_db('bassplay_forum') or die(mysql_error());
  7.  
  8. $dj = mysql_real_escape_string($_GET['pool'], $link);
  9. $query = sprintf('UPDATE djpool SET glosy = glosy + 1 WHERE dj = "%s"', $dj);
  10. mysql_query($query, $link) or die(mysql_error());
  11. }
  12. else
  13. {
  14. echo ("Proszę zaznaczyć 1 z DJ'ów");
  15. }
  16.  
  17. ?>


poczytaj sobie o mysql injection
Mefiuu
dobra, spróbujemy inaczej. Sprawdź co pokaże ten kawałek kodu:

  1. <?php
  2.  
  3. mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or
  4.  
  5. mysql_select_db("bassplay_forum")or die(mysql_error());
  6.  
  7. echo $vote."<br />";
  8.  
  9. mysql_query("UPDATE djpool SET
  10. glosy = glosy + 1 WHERE dj = '$vote'") or die('Błąd: ').mysql_error();
  11.  
  12.  
  13. ?>


w innym wypadku nie mam pojęcia co może być błędem.
maxil
swoją drogą jeśli coś jest źle to mysql_error powinien pokazać błąd
ciekawe dlaczego nie pokazuje
Raven1122
obydwa kody nie dzialaja, nie to ze error ale wartosc pozostaje wciaz ta sama
Mefiuu
jeśli nie ma errora to ja już zgłupiałem. W końcu jeśli by coś było źle to powinno Ci to wyrzucić.
maxil
a teraz:

  1. <?php
  2.  
  3. if (isset($_GET['pool']))
  4. {
  5. $link = mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or die(mysql_error());
  6. mysql_select_db(bassplay_forum) or die(mysql_error());
  7.  
  8. $dj = mysql_real_escape_string($_GET['pool'], $link);
  9. $query = sprintf('SELECT glosy FROM djpool WHERE dj = "%s"', $dj);
  10. $result = mysql_query($query, $link);
  11. $row = mysql_fetch_array($result);
  12.  
  13. $glosy = $row['glosy'] + 1;
  14.  
  15. $query = sprintf('UPDATE djpool SET glosy = %d WHERE dj = "%s"', $glosy, $dj)
  16. mysql_query($query, $link) or die(mysql_error());
  17. mysql_close($link);
  18. }
  19. else
  20. {
  21. echo ("Proszę zaznaczyć 1 z DJ'ów");
  22. }
  23.  
  24. ?>


@edit
a powiedz czy nazwe bazy masz zdefiniowaną jako stałą czy nie?
Raven1122
Parse error: syntax error, unexpected T_STRING in /home/bassplay/public_html/php/pooldj.php on line 16

Odpowiedz twojego kodu haha.gif

@edit1
Juz prawdopodobnie wiem co jest nie tak.
Podczas gdy wy dawaliscie mi kody glosowalem na DJ Cheery. Gdy sprobowal zaglosowac na kogos innego, wtedy zadzialalo. Mam jeszcze 1 pytanie tak zeby nie zakladac 2 tematu. Co zrobic aby osoba nie mogla glosowac 2x z 1 komputera?

@edit2
nie

@edit3
<input type="radio" value="DJ Cherry" name="pool">DJ Cheery<br> <-blad jest w tym miejscu
xavierek
set_cooki http://php.net/manual/en/function.setcookie.php

powinno pomoc ewentualnie spisawac ip do bazy ale to bez sensu jak ktoś chce to i tak oszuka ten cały system biggrin.gif
drozdii07
$_COOKIE i zapisanie IP do bazy wink.gif
maxil
  1. <?php
  2.  
  3. if (isset($_GET['pool']))
  4. {
  5. $link = mysql_connect("localhost", "bassplay_forum", "ceowwyso12") or die(mysql_error());
  6. mysql_select_db('bassplay_forum') or die(mysql_error());
  7.  
  8. $dj = mysql_real_escape_string($_GET['pool'], $link);
  9. $query = sprintf('SELECT glosy FROM djpool WHERE dj = "%s"', $dj);
  10. $result = mysql_query($query, $link) or die(mysql_error());
  11. $row = mysql_fetch_array($result);
  12.  
  13. $glosy = $row['glosy'] + 1;
  14.  
  15. $query = sprintf('UPDATE djpool SET glosy = %d WHERE dj = "%s"', $glosy, $dj);
  16. mysql_query($query, $link) or die(mysql_error());
  17. mysql_close($link);
  18. }
  19. else
  20. {
  21. echo ("Proszę zaznaczyć 1 z DJ'ów");
  22. }
  23.  
  24. ?>


ten u mnie działa

@edit
pliczek cookie też można usunąć
ja jak robię antyflood to zapisuję ip w bazie + wysylam cookie i sprawdzam sobie
Raven1122
a czy ktos ewentualnie moglby mi wytlumaczyc jak to zrobic?
bo rozumiem ze to bedzie jakos pobranie ip z tablicy a nastepnie sprawdzenie tego konstrukcja if?
xavierek
osobiście zrobił bym to na ciasteczkach bo prawda jest taka ze dzieci neo nie obrażając nikogo już nauczyły się restartować modem żeby oglądać filmy smile.gif

po poprawnym zagloowaniu dodaj linijke setcookie("głosowanie", 1, 60*60*24); <== po jednym dniu ciasteczko się usunie

cooki odczytujesz za pomoca $_COOKI['nazwa'];

  1. if($_COOKI['nazwa']==1){
  2.  
  3. ## juz glosował
  4. }
  5. else{
  6.  
  7. ##moze glosowac
  8.  
  9. }


oczywiście przefiltruj cooki na początku smile.gif jakimś mysql_escape albo coś
Raven1122
hmm, ale jezeli po 1 dniu iasteczko sie usunie, to na nastepny dzien znow ten ktos bedzie mogl glosowac. czy da rade ustawic takowe ciasteczko na miesiac?

co do "jakimś mysql_escape albo coś " moge poprosic o opis jak to zrobic? na prawde jestem bardzo poczatkujacy w tych sprawach smile.gif
drozdii07
Da sie.. ale ciastko usunac to 2 klikniecia
Raven1122
hmmm, to jakie rozwiazanie by bylo najlepsze?
drozdii07
ciastko + ip + User Agent.. po wiecej nt user agent zapraszam do jakze cudownego narzedzia jakim jest Google..
maxil
opis masz tutaj
jednak ja to bym przefiltrował jakimś stripslashes
lub po prostu sprawdzał czy dana wartość cookie jest taka sama jaka powinna być wysłana

P.S jeśli jesteś naprawdę początkujący to zapoznaj się z manualem
Raven1122
To biorę się do roboty, ale zanim, czy mógłby mi ktoś wytłumaczyć jak ustawiać czas istnienia COOKIE? rozumiem ze to jest jak 60(sec)*60(min)*24(godz)? to jakby to wygladalo aby ustawic na 1 miesiac?

@edit
znalazlem juz tego User Agenta, czy to wyglada jak $_SERVER['HTTP_USER_AGENT']?
jezeli juz ten ciag uzyskalem, to powinienem go dodac do bazy danych i sprawdzac przez if?
maxil
Cytat(Raven1122 @ 10.08.2011, 21:42:31 ) *
To biorę się do roboty, ale zanim, czy mógłby mi ktoś wytłumaczyć jak ustawiać czas istnienia COOKIE? rozumiem ze to jest jak 60(sec)*60(min)*24(godz)? to jakby to wygladalo aby ustawic na 1 miesiac?


czas życia cookie podaje się w sekundach możesz wpisać po prostu ile sekund ma żyć cookie i tyle a on pomnożył czas
na miesiąc ustawisz tak: 60*60*24*30
drozdii07
Tak, sprawdzaj czy sa rowne.. jesli tak to wywalasz echo i koniec skryptu :]
@Up myslalem, ze mu nie podasz smile.gif chcialem zeby raz chociaz zajrzal do manuala, tam jest wlasnie ten wzor.
Raven1122
Dziekuje za pomoc smile.gif Daje wszystkim pomogl smile.gif
xavierek
$glosy = $row['glosy'] + 1;

$query = sprintf('UPDATE djpool SET glosy = %d WHERE dj = "%s"', $glosy, $dj);

a nie lepiej

$query = sprintf('UPDATE djpool SET glosy = glosy+1 WHERE dj = "%s"', $glosy, $dj);

Cytat(Raven1122 @ 10.08.2011, 21:42:31 ) *
To biorę się do roboty, ale zanim, czy mógłby mi ktoś wytłumaczyć jak ustawiać czas istnienia COOKIE? rozumiem ze to jest jak 60(sec)*60(min)*24(godz)? to jakby to wygladalo aby ustawic na 1 miesiac?

@edit
znalazlem juz tego User Agenta, czy to wyglada jak $_SERVER['HTTP_USER_AGENT']?
jezeli juz ten ciag uzyskalem, to powinienem go dodac do bazy danych i sprawdzac przez if?



60*60*24*30 jesli miesiac ma 30 dni tongue.gif
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.