Instrukcja warunkowa php i mysql

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 :slight_smile:

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 :wink:

$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]

?