Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Blokada kliknięcia w link
Forum PHP.pl > Forum > Przedszkole
smrodek11
A więc moja wiedza jest początkująca na temat php, html winksmiley.jpg
Chodzi mi o to żeby przycisk "Zamow Nagrode" na stronie: http://timetoplay.org.pl/kamil18239restock.php można było kliknąć np. 5 razy przez dowolnego użytkownika, po czym zmieniał by się on nieosiągalny (nie do kliknięcia). Jak się za to zabrać? sad.gif
potreb
Zapisujesz cookies lub do bazy jego ip i sprawdzasz czy już nie może zamawiać. Cookies będzie lepsze. Wtedy np wysyłasz raz cookie później sprawdzasz czy istnieje jeżeli tak to dodajesz +1 aż wynik będzie = 5. I wtedy prosty if dla dezaktywacji przycisku smile.gif
smrodek11
Ale chodzi o to że kilka osób kliknie w ten przycisk i już nikt nie będzie mógł go kliknąć worriedsmiley.gif
potreb
Jeżeli wysyłasz cookie to tylko do tego użytkownika, który kliknął w przycisk.
  1. if(isset($_GET['przycisk'])) {
  2. if(!isset($_COOKIE["TestCookie"])) {
  3. setcookie("TestCookie", 1, time()+3600);
  4. } else {
  5. $value = $_COOKIE["TestCookie"]+1;
  6. setcookie("TestCookie", $value, time()+3600);
  7. }
  8.  
  9. }
  10.  
  11. if($_COOKIE["TestCookie"] > 5) echo "<a href='#'>Przycisk nie aktywny</a>"; else echo "<a href='index.php?przycisk=1'>Przycisk jest aktywny</a>";

smrodek11
No to właśnie mi chodzi co trzeba by byłi zrobić, żeby przycisk był do kliknięcia tylko pare razy, ogólnie? worriedsmiley.gif
PanGuzol
Musisz sobie zapisać na serwerze gdzieś, w pliku lub w bazie ile razy został kliknięty.
tehaha
przy kliknięciu wprowadzasz rekord do bazy, i przed każdym kliknięciem sprawdzasz ilość rekordów

  1. if(mysql_num_rows($result) > 5)
  2. {
  3. echo "przycisku nie można już kliknąć, osiągnięto max";
  4. }
smrodek11
A mógłbyś trochę opisać jak to zrobić? Specjalnie dałem to do tego działu bo oczekiwałem dokładniejszej pomocy. Jest to przycisk wysyłania formularza, i nie mam pojęcia jak to obcykać :/

Cytat(tehaha @ 27.12.2010, 22:06:55 ) *
przy kliknięciu wprowadzasz rekord do bazy, i przed każdym kliknięciem sprawdzasz ilość rekordów

  1. if(mysql_num_rows($result) > 5)
  2. {
  3. echo "przycisku nie można już kliknąć, osiągnięto max";
  4. }


a dało by się to w pliku na serwie zapisać zamiast w bazie?
potreb
Dałem ci odpowiedź na tacy, to że tutaj jest napisane przedszkole nie znaczy że robimy za ciebie wszystko. Wejdź do http://www.php.net/manual/en/function.file-put-contents.php
PanGuzol
Jeśli tylko o zliczanie do 5 chodzi to niema sensu korzystac z bazy danych.
Skorzystaj z funkcji
file_get_contents
file_put_contents
potreb
smile.gif
tehaha
Cytat(PanGuzol @ 27.12.2010, 22:13:24 ) *
Jeśli tylko o zliczanie do 5 chodzi to niema sensu korzystac z bazy danych.

to jeszcze zależy ile jest tych przycisków, ale skoro autor jest nie w temacie to pewnie jest tylko jeden przycisk,

p.s. trochę Ci się pomyliło, to w żłobku jest pełna obsługa, przedszkole zakłada podstawowe umiejętności
smrodek11
Jakoś tego żłobka nie widzę, a skoro tam jest coś takiego, z chęcią bym zajżał.
Nie wiem za bardzo jak obsłużyć się moim przyciskiem, gdyż wysyłać on miał na maila worriedsmiley.gif
  1. <input type="submit" value="Zamow nagrode!" />


Zrobiłem to tak:
  1. <input type="submit" value="Zamow nagrode!" />
  2. <?php
  3. $file = 'people.txt';
  4. $current = file_get_contents($file);
  5. $current .= "Test\n";
  6. file_put_contents($file, $current);
  7. ?>
<

Zapisuje poprawnie do pliku, tylko jak zrobić z tym blokowaniem żeby po 5 kliknięciach kliknięcie w przycisk stało się niemożliwe? wstydnis.gif
tehaha
1. przed wyświetleniem przycisku musisz odczytać z pliku jego wartość
2. sprawdzasz przy pomocy if() czy wartość nie przekracza dopuszczalnej
3. jeżeli nie przekracza to wyświetlasz przycisk submit, a jeżeli przekracza to wyświetlasz informacja np. "limit przekroczony"
smrodek11
Tylko ja w tym pliku mam 5 takich samych wpisów. Próbowałem z fgets

  1. <?php
  2. $uchwyt = @fopen ("people.txt", "r");
  3. if ($uchwyt) {
  4. while (!feof($uchwyt)) {
  5. $buffer = fgets($uchwyt, 4096);
  6. echo $buffer;
  7. }
  8. fclose ($uchwyt);
  9. }
  10. ?>


I teraz jak miałbym to ustawić żeby po kliknięciu 5 ciu razy tego przycisku, przycisk stawał się nieklikalny?

  1. if($file = 'people.txt';
  2. $current = file_get_contents($file);
  3. $current .= "John Smith\n";
  4. file_put_contents($file, $current);)


Próbowałem z czymś takim to kod mi się wyświetlał zamiast poprawnego skryptu worriedsmiley.gif
Co źle zrobiłem?
PanGuzol
W pliku zapisuj liczbę kliknięć.
Korzystając z file_get_contents pobierasz tę liczbę, jeśli równa 5 to blokujesz przycisk submit.
Po kliknięciu pobierasz tą liczbę, dla pewności sprawdzasz czy jest mniejsza od 5, jeśli tak to zapisujesz do pliku powiększoną o 1 za pomocą file_put_contents oraz co tam chcesz aby się stało w innym wypadku nic nie robisz.
smrodek11
Zrobiłem że ma odczytywać
  1. if($file = 'people.txt')
  2. if($max = 11)
  3. echo Przycisk nie dostepny


Ale znów sam skrypt mam zamiast braku przycisku :/
I co teraz mam źle?

Mam dodany skrypt który dodaje cyfrę 1 kiedy ktoś kliknie ten przycisk, tylko jak ja mam ten skrypt ułożyć żeby blokował wczytywanie tego przycisku po 5 ciu kliknięciach? worriedsmiley.gif
Próbowałem z $max ale coś mi to nie wychodził sad.gif
tehaha
przed wyświetleniem przycisku odczytujesz plik i sprawdzasz jaką zawiera wartość, jeżeli większa lub równa maksymalnej to nie wyświetlasz lub blokujesz przycisk
smrodek11
Zdecydowałem się jednak na mysql.
  1. <input type="submit" value="Test"<?php if($klik['klikniecia'])>5 { echo disbled='disabled' } ?> />

Co tu jest źle zrobione? Wyskakuje syntax error :/
PanGuzol
Za wcześnie zamknąłeś nawias ) oraz brakuje Ci średnika.
smrodek11
Dalej to samo
worriedsmiley.gif
  1. <input type="submit" value="Zamow nagrode"<?php if($klik['klikniecia']>5){ echo disbled='disabled' } ?> />;


tręść błedu:
Parse error: syntax error, unexpected '=', expecting ',' or ';' in /homez.379/timetopl/www/pp.php on line 71
PanGuzol
A gdzie się wstawia średnik?

W ogóle to jak wyskakują Ci jakieś błędy to umieszczaj ich treść, wróżki tego forum nie czytają.
smrodek11
Po ostatniej operacji? Dodałem treść błędu w poprzednim poście
PanGuzol
Ehh nie zauważyłem, daj w cudzysłowy to co chcesz wyświetlić.

Po każdej operacji.
smrodek11
Ok poprawiłem ale teraz to już nie wiem co robić, kolejny błąd
Cytat
Parse error: syntax error, unexpected '>' in /homez.379/timetopl/www/pp.php on line 71


kod mam taki:
  1. <input type="submit" value="Zamow nagrode"<?php if($klik['klikniecia'])>5 { echo 'disabled="disabled"'; } ?> />

A nie, wszystko w porządku smile.gif
Dominator
Parse error: syntax error, unexpected '>' in /home/sites/p/pr/pro/promaniak.trixy.pl/account/redeemed.php on line 1

Dałem kod co kolega na górze, co teraz ?
evolucja
Dominator, w tym kodzie wyżej jest błąd. Za wcześnie zamknięty nawias w instrukcji if.
Dominator
dzięki, zamieniłem sobie i działa edit; kliknąłem 5 razy i dalej jest zamów nagrodę
evolucja
Pokaż resztę kodu.
Dominator
Cytat(evolucja @ 28.12.2010, 20:21:58 ) *
Pokaż resztę kodu.



Tak to podmieniłem


  1. <input type="submit" value="Zamow nagrode"<?php if($klik['klikniecia'] >5) { echo 'disabled="disabled"'; } ?> />


Zgodnie żeby po pięciu klikach było disabled
smrodek11
No właśnie źle robię ten skrypt co ma wstawiać do bazy rekord, nie działa i wielkie "G" robi ...
Co ja tam musiałbym dodać żeby to poprawnie w tej bazie zapisywało? :/
evolucja
Pokaż to co masz bo ja nie w temacie.
Dominator
Cytat(smrodek11 @ 28.12.2010, 20:24:01 ) *
No właśnie źle robię ten skrypt co ma wstawiać do bazy rekord, nie działa i wielkie "G" robi ...
Co ja tam musiałbym dodać żeby to poprawnie w tej bazie zapisywało? :/


Ty chcesz zrobić taki skrypt jak na restocku na Lockerz, 5 osób zamówi tacza 32GB i się robi FRESH OUT ?
smrodek11
No dokładnie, tego fresh out to se moge odpuścić. Wystarczyłaby mi blokada przycisku

Proszę:
http://wklej.to/qnaBiW
To jest wszystko co mam w pp.php tutaj: http://timetoplay.org.pl/pp.php
Dominator
Cytat(smrodek11 @ 28.12.2010, 20:41:24 ) *
No dokładnie, tego fresh out to se moge odpuścić. Wystarczyłaby mi blokada przycisku

Proszę:
http://wklej.to/qnaBiW
To jest wszystko co mam w pp.php tutaj: http://timetoplay.org.pl/pp.php


Wiesz co, możesz kupić taki za 19,99zł od Killera na Lockerz-Forum.Eu, zjedź na dół strony i zobacz dział o sprzedaży, wejdź i będzie tam temat Killera.

Forum może czasami nie działać bo jest zmiana DNS.
evolucja
Cytat(smrodek11 @ 28.12.2010, 20:41:24 ) *
No dokładnie, tego fresh out to se moge odpuścić. Wystarczyłaby mi blokada przycisku

Proszę:
http://wklej.to/qnaBiW
To jest wszystko co mam w pp.php tutaj: http://timetoplay.org.pl/pp.php

I gdzie masz tam kod odpowiadający za zliczanie kliknięć i ich pobieranie? Widzę, że zmodyfikowałeś sam przycisk....

A kolega wyżej lepiej niech wyjdzie z tego tematu zanim dostanie ostrzeżenie. Tfu! Dwie dychy wydawać za skrypt długości 4 linijek.
smrodek11
  1. $zapytanie=mysql_query("SELECT * FROM klikniecia WHERE id='".$_GET['id']."'") or die(mysql_error());
  2. $klik=mysql_fetch_array($zapytanie);

To miało zliczać dry.gif

  1. <script type="text/javascript"><!--
  2. function wy(id)
  3. {
  4. o = new Image();
  5. o.src = "test.php?id=" + id + "&z=78";
  6. }
  7. --></script>


A to miało niby dodawać, ale wielkie G dodaje ..
Tamten skrypt jest niezły, ale to wierna kopia z lockerza, pozatym wolałbym mieć swój


Zrobiłem dla przykładu, aby byle co wpisywało:
  1. <?php
  2. $db_host = 'mysql5-1.starter';
  3. $db_user='--';//user majacy dostep do bazy
  4. $db_password='--';//haslo
  5. $database='--';//nazwa bazy danych
  6.  
  7. mysql_connect('mysql5-1.starter',$db_user,$db_password);//jesli pliki html i php beda na tym samym serwerze co baza to musisz wpisac 'localhost' w przeciwnym razie dostep do bazy czyli lokalizacje
  8. mysql_select_db($database) or die ("Nie udalo sie wybrac bazy danych");
  9.  
  10. $zapytanie = "INSERT INTO `klikniecia` (`id`, `nazwisko`, `lata`, `punkty` , `mistrzostwa`) VALUES ('', 'Jordan', '13', '32', '6')";
  11. $idzapytania = mysql_query($zapytanie);
  12. ?>


Mam to jako odzielnny plik na serwerze, włączam go, nie ma żadnych błędów lecz w tabeli klikniecia nic nie zostało dodane ..
Przecież wszystko jest odpowiednio napisane, w czym problem?
thek
A sprawdziłeś chociaż czy zapytanie się wykonuje? Jeśli nie to skaszaniłeś je i tyle smile.gif Zrób sobie jego debug i tyle. Jak? Masz temat o zadawaniu pytań. Tam masz wskazówki jak to robić.
smrodek11
Dobra jakoś sobie poradziłem. Mam zrobione że przy kliknięciu odejmuje 1 z ilości nagród w bazie danych. Teraz tylko jak zrobić skrypt który by dodawał, zamiast odejmować, ten rekord? Chciałbym to robić z poziomu strony, zamiast za każdym razem do sql wbijać ;/
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.