Witam! Mógł by mi ktoś wytłumaczyć jak napisać instrukcję warunkową która by zmieniała daną wartość w bazie po wpisaniu danego słowa w formularzu? Chodzi mi o to, aby po wpisaniu loginu użytkownika i słowu “promocja” zmieniało mu rangę na stronie, w bazie jest to jedna wartość “6”.
Może kawałek kodu z którym masz problem. Na razie to takie wróżenie ze szklanej kuli można tylko zrobić.
jeliś wartość jest w jakimś formularzu to potem sprawdzasz dane pole formularza
if($_POST["field_name"] == "promocja")
i robisz update w bazie
update some_table set some_column = 6 where login = $_POST["field_login"]
rozwiązanie równie ogólnikowe jak zadane pytanie.
grzelix , dokładniej chodzi mi o integrację API dotpay.pl z moim CMS i w nim chciał bym dodać funkcję rangi VIP po wpisaniu kodu zwrotnego który przychodzi smsem.
W panelu administracyjnym powinieneś mieć przykładowe skrypty dot. pobrania / walidacji kodu (tą część potrzebujesz), potrzebujesz też pola dającego odróżnić usera prem od non prem. Np tak: (kod z dotpay z moimi poprawkami, celowo zostawiłem komentarze)
<?php= 10; # numer ID zarejestrowanego klienta $code = "abcd"; # identyfikator usług SMS $type = "c1"; # typ konta: C1 - 8 znakowy kod bezobsługowy # typ konta: sms dla sprawdzania SMSow
drobok , bardzo słabo znam PHP, a co zrobić aby trzeba było wpisać login na stronie, a pod tym kod SMS i wtedy by zmieniało rangę na podstawie tych danych, jeśli kod smsów by się oczywiście zgadzał?
I nadać prawo dostępu do tej sekcji VIP np. na tydzień. Kolumna “time_limit” zapisuje datę w takim systemie “1346614380” jak np dodać do tego 3 dni albo 7 dni i/lub więcej?
Dodaj kolejny input do form, a później po mysql_real_escape_string, dajesz jako warunek dla mysq_query (zamiast tej sesji w moim przykładzie)
Tutaj sprawdzasz datę przy logowaniu, a zmienną trzymasz w sesji (czy jest vip).
Najlepiej jednak (by nie mieć kolejnego elementu w bazie), zapisać datę skończenia tego prem, po czym sprawdzać czy masz datę dalszą, jeśli tak zmieniamy prem na 0.
Np (date masz zapisaną w stringu, imo o wiele wygodniejszy
date( 'y-m-d', strtotime( date( 'y-md-d' ) .' +3 day' ));
Oczywiście możesz zrobić też tak:
date('Y-m-d', time()+259200);
(ilość dni *3600) Potem porównujesz i ew zmieniasz na non prem (wszystko przy logowaniu) $d to data wyjęta z bazy (powinieneś wymienić na DateTime):
if($d>= new DateTime('Y-m-d') mysql_query("UPDATE tabela SET(prem=0) WHERE user='$_SESSION['user']');
Jeśli chcesz mieć różne długości prem, musisz obsłużyć różne rodzaje sms:
-url z dotpay powinien mieć przed ? check_code_fullinfo.php zamiast check_code.php
4 linijka to kwota netto (więc dajesz fgets($handle);, a potem $wplata = fgets($handle, 10); i to sprawdzasz (i dajesz odpowiednie prem)
Mógłbyś również skorzystać z płatności online http://www.paweldanielewski.pl/integrac … doskonala/
Ogólnie rzadko piszę takie długie posty, więc pewnie za chwilę coś będę zmieniać. Wszystko pisane z palca, więc mogą być błędy.
drobok , nie chce Cię wykorzystywać ale ja praktycznie nic nie umiem w PHP, czy to ma tak wyglądać:
<?php
$id = 10; # numer ID zarejestrowanego klienta
$code = "abcd"; # identyfikator usług SMS
$type = "c1"; # typ konta: C1 - 8 znakowy kod bezobsługowy
# typ konta: sms dla sprawdzania SMSow
# gdy sprawdzane będą zarówno konta smsowe jak i konta przy płatnościach kartą
# to należy wtedy użyć zapisu:
# $type = "c1,sms";
#
# przy sprawdzaniu kilku kont o różnych identyfikatorach należy użyć zapisu:
# $code = "abcd1,abcd2,kody2,kody6";
$del=1; # jeżeli kod ma nie być skasowany od razu po sprawdzeniu to ustaw wartość na 0
#################################################################################
$check = $_POST['check']; # podany kod na stronie gdzie wejście jest płatne i wymagany jest zakupiony kod
if($check == NULL){
?>
Co wysłać i gdzie (jakoś userowi to podać musisz :P)
Wpisz swój login:
Tutaj należy wpisać kod otrzymany sms'em:
<?php if($_GET['err']==1) echo 'Poprzedni kod był niepoprawny'; ?>
\<?php }else{ $handle = fopen("http://dotpay.pl/check\_code.php?&check=".$check."&id=".$id."&code=".$code."&type=".$type."&del=".$del, 'r'); $status = fgets($handle, 8); $czas\_zycia = fgets($handle, 24); fclose($handle); $czas\_zycia = rtrim($czas\_zycia); if ($status == 0) header("location: ".$\_SERVER['PHP\_SELF']."&err=1"); else { mysql\_query("UPDATE `users` SET `user_group` = '4' WHERE `name` = $login"); } } ?\>[/code]
?
Nie, nie przypisujesz nic do $login. Jeśli form input ma name login, to w $_POST będziesz miał element login z wartością tego input’a.
Poza tym, powinieneś użyć mysql_real_escape_string, gdyż ktoś mógłby se po użyciu kodu za sms’a dostać admina na serwerze po wpisaniu zamiast loginu odpowiedniego zapytania
drobok , tylko nie wiem jak użyć tej funkcji. Wiem, że mogę wymagać dużo i że na forum oczekuje się pomocy, ale czy mógł bym Cię prosić o napisanie “gotowca” dla tej funkcji? Ja go sobie przeanalizuję żeby na przyszłość wiedzieć jak się coś takiego robi
$login = mysql_real_escape_string($_POST['login']);
Czyli całość powinna wyglądać tak:
<?php
$id = 10; # numer ID zarejestrowanego klienta
$code = "abcd"; # identyfikator usług SMS
$type = "c1"; # typ konta: C1 - 8 znakowy kod bezobsługowy
# typ konta: sms dla sprawdzania SMSow
# gdy sprawdzane będą zarówno konta smsowe jak i konta przy płatnościach kartą
# to należy wtedy użyć zapisu:
# $type = "c1,sms";
#
# przy sprawdzaniu kilku kont o różnych identyfikatorach należy użyć zapisu:
# $code = "abcd1,abcd2,kody2,kody6";
$del=1; # jeżeli kod ma nie być skasowany od razu po sprawdzeniu to ustaw wartość na 0
#################################################################################
$check = $_POST['check']; # podany kod na stronie gdzie wejście jest płatne i wymagany jest zakupiony kod
if($check == NULL){
?>
Co wysłać i gdzie (jakoś userowi to podać musisz :P)
Wpisz swój login:
Tutaj należy wpisać kod otrzymany sms'em:
<?php if($_GET['err']==1) echo 'Poprzedni kod był niepoprawny'; ?>
\<?php }else{ $handle = fopen("http://dotpay.pl/check\_code.php?&check=".$check."&id=".$id."&code=".$code."&type=".$type."&del=".$del, 'r'); $status = fgets($handle, 8); $czas\_zycia = fgets($handle, 24); fclose($handle); $czas\_zycia = rtrim($czas\_zycia); if ($status == 0) header("location: ".$\_SERVER['PHP\_SELF']."&err=1"); else { mysql\_query("UPDATE `users` SET `user_group` = '4' WHERE `name` = '$login = mysql\_real\_escape\_string($\_POST['login']);'"); } } ?\>[/code]
?