Autor Zpráva
Fastman
Profil
Dobrý den,

Potřeboval bych poradit ohledně PHP a SMS. Mám zřízenou SMS bránu, když uživatel odešle SMS ve tvaru "PM CSGO NICK" tak se SMS zapíše do logu, script vypadá nějak takhle po zapsání logu
<?php

    $log_file = FOpen('log.txt', 'a');  // Otevirate soubor

    FPutS($log_file, Date("Y-m-d H:i:s") . " " . $_GET['text'] . " " . $_GET['price'] . " " . $_GET['debug'] . "\n"); // Zapisujete text z prichozi SMS zpravy

    FClose($log_file);  // Uzavirate soubor

    echo "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.";  // Odpovidate zakaznikovi
?>

V logu po odeslání SMS to vypadá takhle
2013-08-27 07:52:46 pm csgo test 30.000 

Potřebuji konkrétně tohle:

Mám založenou databázi "vipcsgo" a potřebuji aby se napojil do tabulky "STAMM_DB_1" a našel uživatele v položce "steamid" a až ho najde tak mu připíše nějakou hodnotu (např: 250 bodů) do položky "points".

ukázka databáze


Jak by to probíhalo:

Uživatel odešle sms ve tvaru "PM CSGO STEAM_1:1:42471801" odešle. Při odeslání to vyvolá PHP kód a přijde mu SMS "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji." mezitím by se PHP kód napojil do databáze "vipcsgo" a v tabulce "STEAMM_DB_1" by našel "STEAM_1:1:42471801" a přičetl mu hodnotu 250 bodů do položky "points".

Omlouvám se, že je to takhle blbě popsaný, ale jinak to napsat či vysvětlit nejde. Děkuji všem za nápady, raději bych bral přímo kompletní PHP kód, ale i tak se pokusím pochopit vaše nápady či návrhy.
Alphard
Profil
Přičíst zvládne jednoduchý update
update tabulka set points = points + 250 where ...
Poskládejte si where část a je to hotové.
Fastman
Profil
Alphard:
<?php
    $log_file = FOpen('log.txt', 'a');  // Otevirate soubor

    FPutS($log_file, Date("Y-m-d H:i:s") . " " . $_GET['text'] . " " . $_GET['price'] . " " . $_GET['debug'] . "\n"); // Zapisujete text z prichozi SMS zpravy

    FClose($log_file);  // Uzavirate soubor

    echo "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.";  // Odpovidate zakaznikovi
  
 
$server = "localhost"; // jméno serveru 
$login = "xx"; // přihlašovací jméno 
$heslo = "xxxx"; // heslo 
$databaze = "vipcsgo"; // název databáze 
$table = "STAMM_DB_1";
$text = $_GET['text'];
mysql_query("UPDATE STAMM_DB_1 SET points = points + 250 1 WHERE steamid =". $_GET['text'] ."");  
MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi 
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze      


?>

Dobrý den, děkuji vám za odpověď. Zkusil jsem tohle a stejně to nefunguje. Stránka se normálně zobrazí, takže kód by měl být dobrý, ale nezapíše to nic do databáze.

Zde je soubor co spouští SMS http://www.xxxx.eu/sms.php?price=30.000&operator=et&text=PM+CSGO+STEAM_1%3A1%3A42471801&hash=gvzfk3&msisdn_gw=9033330&att=1&id=MOJEIDPROTELEFON&emulator=1
Keeehi
Profil
A nepřijde ti divné, že nejdřív spouštíš dotaz do databáze a pak se k ní snažíš teprve připojit?
v tom updatu jsi asi zapomněl 1 za 250
abc
Profil
řádek 17. má být až po 18. a 19.
Fastman
Profil
<?php

    $log_file = FOpen('log.txt', 'a');  // Otevirate soubor

    FPutS($log_file, Date("Y-m-d H:i:s") . " " . $_GET['text'] . " " . $_GET['price'] . " " . $_GET['debug'] . "\n"); // Zapisujete text z prichozi SMS zpravy

    FClose($log_file);  // Uzavirate soubor

    echo "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.";  // Odpovidate zakaznikovi
  
 
$server = "localhost"; // jméno serveru 
$login = "xx"; // přihlašovací jméno 
$heslo = "xxxx"; // heslo 
$databaze = "vipcsgo"; // název databáze 
$table = "STAMM_DB_1";
$text = $_GET['text'];
MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi 
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze   
mysql_query("UPDATE STAMM_DB_1 SET points = points + 250 1 WHERE steamid =". $_GET['text'] ."");     


?>
tak jsem udělal a stejně to nejde
Keeehi
Profil
Tak si za to připoj ještě
echo mysql_errno() . ": " . mysql_error(). "\n";
Fastman
Profil
Keeehi:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 WHERE steamid =' at line 1

Tohle vyběhlo..
abc
Profil
Jak psal [#4] Keeehi - v tom update je 1 navíc, proto ten update neproleze
Fastman
Profil
abc:

Tak jsem smazal za 250 tu 1 a ukázalo to tohle

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Keeehi
Profil
Fastman:
Můj soukromý tip je, že v GET[text] nic není a pak z toho vzniká syntax error.

Tohle ukáže co?
var_dump("UPDATE STAMM_DB_1 SET points = points + 250 WHERE steamid =". $_GET['text'] ."");
Fastman
Profil
Keeehi:
<?php
    $log_file = FOpen('log.txt', 'a');  // Otevirate soubor

    FPutS($log_file, Date("Y-m-d H:i:s") . " " . $_GET['text'] . " " . $_GET['price'] . " " . $_GET['debug'] . "\n"); // Zapisujete text z prichozi SMS zpravy

    FClose($log_file);  // Uzavirate soubor

    echo "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.";  // Odpovidate zakaznikovi
  
 
$server = "127.0.0.1"; // jméno serveru 
$login = "xx"; // přihlašovací jméno 
$heslo = "xxxx"; // heslo 
$databaze = "vipcsgo"; // název databáze 
$table = "STAMM_DB_1";
$text = $_GET['text'];
MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi 
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze   
var_dump("UPDATE STAMM_DB_1 SET points = points + 250 WHERE steamid =". $_GET['text'] ."");
echo mysql_errno() . ": " . mysql_error(). "\n";     


?>

to ukáže tohle
string(59) "UPDATE STAMM_DB_1 SET points = points + 250 WHERE steamid =" 0:


Jak říkám, uživatel odešle SMS "PM CSGO steamid" a právě jsem to vyvodil z toho, že při ukládání do logu používá příkaz $_GET['text'] a celé je to

FPutS($log_file, Date("Y-m-d H:i:s") . " " . $_GET['text'] . " " . $_GET['price'] . " " . $_GET['debug'] . "\n");

2013-08-26 21:43:29 Fastmancz 30.00


Když odešlu (virtuální sms)

Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.string(85) "UPDATE STAMM_DB_1 SET points = points + 250 WHERE steamid =PM CSGO STEAM_1:1:42471801" 0:
Keeehi
Profil
Jak ale vidíš, tak v $_GET["text"] není Fastmancz ale " 0:

Jinak dle odkazu v [#3] by mělo být v $_GET["text"] toto PM CSGO STEAM_1:1:42471801

v [#12] jsi si nejspíš zapomněl přihlašovací údaje k databázi
Fastman
Profil
Keeehi:

Aha omlouvám se.. já blbec zadával do textu "PM CSGO STEAM ID" má tam být jenom "STEAM ID" .. ale stejně to nejde

Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.string(77) "UPDATE STAMM_DB_1 SET points = points + 250 WHERE steamid =STEAM_1:1:42471801"


odkaz se udělal tenhle

http://www.xxxxx.eu/vip/sms.php?price=30.000&operator=et&text=STEAM_1%3A1%3A42471801&hash=gvzfk3&msisdn_gw=9033330&att=1&id=xxxxxxxxxx&emulator=1
Rfilip
Profil
Kdyz si ten dotaz date do phpmyadminu vykona se?
Fastman
Profil
Rfilip:
Hodí to podobné chyby jako to bylo tady
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'var_dump(&quot;UPDATE STAMM_DB_1 SET points = points + 250 WHERE steamid =&quot;. $_GET['t' at line 1

Tohle se vykonalo, když jsem si points změnil přímo v databázi (manuálně).

UPDATE `vipcsgo`.`STAMM_DB_1` SET `points` = '350' WHERE `STAMM_DB_1`.`steamid` = 'STEAM_1:1:42471801';
Keeehi
Profil
Ok, tak to ještě obal uvozovkami a mohlo by to fungovat. Evidentně steamid je sloupec nějakého textového typu. A nebo ne?
abc
Profil
Fastman:
Když víš, jak má vypadat výsledný dotaz, tak pak už snad není těžké nahradit tam údaje proměnnými ze skriptu ne?

UPDATE `vipcsgo`.`STAMM_DB_1` SET `points` = `points` + 250 WHERE `STAMM_DB_1`.`steamid` = 'STEAM_1:1:42471801';
->
$sql = "UPDATE `vipcsgo`.`STAMM_DB_1` SET `points` = `points` + 250 WHERE `STAMM_DB_1`.`steamid` = '$_GET[text]'";
Keeehi
Profil
Nebo bezpečněji
$sql = "UPDATE `vipcsgo`.`STAMM_DB_1` SET `points` = `points` + 250 WHERE `STAMM_DB_1`.`steamid` = '".mysql_real_escape_string($_GET["text"])."'";
Fastman
Profil
Keeehi:

Dobrý den,

Děkuji Vám za odpověď. Zkusil jsem váš kód zapsat do PHP

<?php
    $log_file = FOpen('log.txt', 'a');  // Otevirate soubor

    FPutS($log_file, Date("Y-m-d H:i:s") . " " . $_GET['text'] . " " . $_GET['price'] . " " . $_GET['debug'] . "\n"); // Zapisujete text z prichozi SMS zpravy

    FClose($log_file);  // Uzavirate soubor

    echo "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.";  // Odpovidate zakaznikovi
  
 
$server = "127.0.0.1"; // jméno serveru 
$login = "xxx"; // přihlašovací jméno 
$heslo = "xxxx"; // heslo 
$databaze = "vipcsgo"; // název databáze 
$table = "STAMM_DB_1";
$text = $_GET['text'];
MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi 
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze   
$sql = "UPDATE `vipcsgo`.`STAMM_DB_1` SET `points` = `points` + 250 WHERE `STAMM_DB_1`.`steamid` = '".mysql_real_escape_string($_GET["text"])."'";
echo mysql_errno() . ": " . mysql_error(). "\n"; 
?>

Když se podívám na klasický PHP soubor bez odeslaní sms. Tak to ukazuje tohle:
Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.0:

Když odešlu přes emulátor sms

Tak to hodí tohle (jako výsledek odeslané sms).
Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.0:

abc:

Když zkusím váš kód, tak je to stejné.

Zatím to stále nepřipisuje.


Zde ještě uvedu, jak to vypadá při manuálním editování v databázi.



Ještě přiložím strukturu




Fastman
Profil
Tam je právě problém, že to píše "Dekujeme za platbu, zapsali jsme si ji. Vase VIP pro csgo aktivujeme co nejrychleji.0:" Tu 0: nevím jestli se jedná o chybu a nebo nějaký údaj. I po odeslání sms se nic nepřipíše. Už nevím, lámu si s tím hlavu už pár hodin. Opravdu nikdo neví, kde může být chyba?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: