Skrypt transakcji sms

0

Dzień dobry,

Chciałbym zasięgnąć do Was o poradę, poniżej przedstawiłem skrypt transakcji sms, który po poprawnej transakcji dodaje wirtualną gotówkę użytkownikowi w serwisie. Czy kod napisany jest poprawnie? Dodam, że nie nie jest mega bystry w skryptowaniu w PHP. W załączniku zaczepiłem plik z zawartością oraz strukturą bazy danych.

<?php
$kod=$_POST['kod']; //kod podany w SMS
$sms=$_POST['numer']; //numer na jaki wysłaliśmy sms
$email="adres@gmail.com"; //adres e-mail klienta w panelu Mintshost
if($_POST['wyslane'])
{
$handle = fopen("http://mintshost.pl/sms.php?kod=$kod&sms=$sms&email=$email", 'r');
$status = fgets($handle, 90);
switch ($status) {
case 0:
echo "Kod jest niepoprawny";
break;
case 1:
echo "Kod jest poprawny";
break;
case 2:
echo "adres email jest nie poprawny";
break;
case 3:
echo "sms, kod lub email jest pusty";
break;
}
         if($status == 1){
			$wynik = mysql_fetch_array(mysql_query("SELECT * FROM doladowanie_sms WHERE opcja='MINTS' and numer='".$sms."' ORDER BY id ASC"));
			
                $kwota_doladowania = $wynik['wartosc'];
				$kasa_po_zasileniu = $wallet_zasil + $kwota_doladowania;
				$dzisiaj = date('Y-m-d H:i:s');
				
				$zdarzenie = $podpis." zasilił Ci portfel o ".$kwota_doladowania." zł przez zasilacz";
				
			    mysql_query("INSERT INTO doladowanie_sms_hist SET id='', username='".$nick_zasil."', kwota='".$kwota_doladowania."', kwota_przed='".$wallet_zasil."', kod='".$kod."', opcja='Zasilacz', data='".$dzisiaj."'"); 				

				$zapytanie = "UPDATE userzy SET wallet='{$kasa_po_zasileniu}' WHERE username='".$nick_zasil."'";
                $idzapytania = mysql_query($zapytanie);  

				mysql_query("INSERT INTO logi SET id='', date='$dzisiaj', zdarzenie='$zdarzenie', username='$nick_zasil', status='0'");   
			echo "<div class='msg msg_ok'><span>Kod poprawny. Portfel został zasilony kwotą ".$kwota_doladowania." zł</span></div>";
		}elseif($status == 0){
			echo "<div class='msg msg_err'><span>Zły kod.</span></div>";
		}elseif($status == 3){
			echo "<div class='msg msg_err'><span>Kod znajduje się już w bazie danych.</span></div>";
		}elseif($status == 2){
			echo "<div class='msg msg_err'><span>Błąd - pusty kod</span></div>";
		}
	}
?>

<br>
<form action="/wallet/sms" method="post">
<table style="font-size: 11px; color: #FFFFFF;">
<?php
$numer = "0"; 
$wynik= mysql_query("SELECT * FROM doladowanie_sms WHERE opcja='MINTS' ORDER BY id ASC");
while($wiersz = mysql_fetch_array($wynik)) {
$numer++; 
$reklamy = $wiersz['wartosc'] * "100";
echo "<tr><td>".$numer.".</td><td><input type='radio' name='opcja' value='".$wiersz['numer']."'></td><td>Wyślij <b>SMS</b> o treści <b>".$wiersz['tresc'].".".$userid."</b> na numer <b>".$wiersz['numer']."</b> za  <b>".$wiersz['cena']." zł</b>, dostaniesz <b>".$wiersz['wartosc']." zł</b> czyli <b>".$reklamy." reklam</b> + gratisy</td></tr>";
}
?>
</table>
<br><br>


Kod zwrotny:<br>
<input type="text" name="kod" placeholder="Kod zwrotny" maxlength="8" style="width: 690px;"><br><br>
<?php if(!isset($zalogowany_nick)){ ?>
Podpis (żeby właściciel wiedział kto doładował mu konto):<br>
<input type="text" name="podpis" value="anonim" maxlength="20" style="width: 690px;"><br><br>
<?php } ?>
<center><input type="submit" value="Doładuj" maxlength="8" name="doladuj"></center>
</form> 
0

Dziurawe i brzydkie, całe do kosza, ale zapewne jakoś działa i być może nie da się tego skutecznie zaatakować.

Widzę, że kolejny hostink pod nazwą Mintshost powstaje, dobrze wiedzieć ;)

0
  1. mysqli/PDO
  2. walidacja danych
  3. oddzielenie widoku od logiki
0

Napisałeś 1. mysqli/PDO , połączenie z bazą jest zaincludowane już więc pytam tylko o same działanie skryptu. Ponieważ nie mogę poradzić sobie z nie wyświetlającymi się komunikatami czy kod jest błędny czy jest poprawny, najbardziej chodzi o zaznaczoną cześć poniżej czyli część wykonująca się po stronie mintshost a druga po stronie bazy mysql.

<?php
$kod=$_POST['kod']; //kod podany w SMS
$sms=$_POST['numer']; //numer na jaki wysłaliśmy sms
$email="adres@gmail.com"; //adres e-mail klienta w panelu Mintshost
if($_POST['wyslane'])
{
$handle = fopen("http://mintshost.pl/sms.php?kod=$kod&sms=$sms&email=$email", 'r');
$status = fgets($handle, 90);
switch ($status) {
case 0:
echo "Kod jest niepoprawny";
break;
case 1:
echo "Kod jest poprawny";
break;
case 2:
echo "adres email jest nie poprawny";
break;
case 3:
echo "sms, kod lub email jest pusty";
break;
}
         if($status == 1){
            $wynik = mysql_fetch_array(mysql_query("SELECT * FROM doladowanie_sms WHERE opcja='MINTS' and numer='".$sms."' ORDER BY id ASC"));
 
                $kwota_doladowania = $wynik['wartosc'];
                $kasa_po_zasileniu = $wallet_zasil + $kwota_doladowania;
                $dzisiaj = date('Y-m-d H:i:s');
 
                $zdarzenie = $podpis." zasilił Ci portfel o ".$kwota_doladowania." zł przez zasilacz";
 
                mysql_query("INSERT INTO doladowanie_sms_hist SET id='', username='".$nick_zasil."', kwota='".$kwota_doladowania."', kwota_przed='".$wallet_zasil."', kod='".$kod."', opcja='Zasilacz', data='".$dzisiaj."'");                 
 
                $zapytanie = "UPDATE userzy SET wallet='{$kasa_po_zasileniu}' WHERE username='".$nick_zasil."'";
                $idzapytania = mysql_query($zapytanie);  
 
                mysql_query("INSERT INTO logi SET id='', date='$dzisiaj', zdarzenie='$zdarzenie', username='$nick_zasil', status='0'");   
            echo "<div class='msg msg_ok'><span>Kod poprawny. Portfel został zasilony kwotą ".$kwota_doladowania." zł</span></div>";
        }elseif($status == 0){
            echo "<div class='msg msg_err'><span>Zły kod.</span></div>";
        }elseif($status == 3){
            echo "<div class='msg msg_err'><span>Kod znajduje się już w bazie danych.</span></div>";
        }elseif($status == 2){
            echo "<div class='msg msg_err'><span>Błąd - pusty kod</span></div>";
        }
    }
?> 
0

Dlaczego napisałem 'mysqli/PDO' -> http://www.php.net/mysql_fetch_array (czerwona, rzucająca się w oczy tabelka).
Bardziej zmierzam jednak do: http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php

Co do Twojego głównego problemu to polecam użyć funkcji var_dump() i sprawdzać przebieg działania całego skryptu po kolei, podglądając wartości zmiennych.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.