Код:
PHP
// (с) MrBison [m.zubrov@gmail.com], 2010
// Эта программа является свободным программным обеспечением; вы можете распространять и / или изменять
// его в соответствии с условиями GNU General Public License, опубликованной
// Фонд свободного программного обеспечения; либо версии 2 Лицензии, или
// (по вашему выбору) любой более поздней версии.
//
// Эта программа распространяется в надежде, что это будет полезно (и весело!),
// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий
// или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ. См
// GNU General Public License для более подробной информации.
//
// Вы должны были получить копию GNU General Public License
// вместе с этой программой; если нет, то пишите на свободное программное обеспечение
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
require_once ('./includes/jsonRPCClient.php');
функция случайное зерно()
{
список($ tmp1, $ tmp2знак равно взрываться(«», микропоры());
возвращение (поплавок) $ tmp1 + ((С плавающей точкой) $ tmp2 * 100000);
}
mt_srand(случайное зерно());
если (! Исеть ($ _COOKIE["Bitcoinsessionid"])) { $ сессия знак равно mt_rand() + (INT) (микропоры() *1000); } Еще { $ сессия = (Целое) $ _COOKIE["Bitcoinsessionid"]; }
если (!is_numeric($ сессия)) умереть («Это выглядит как попытка инъекции SQL.»);
SetCookie("Bitcoinsessionid", $ сессия, время() +2592000); // куки действительны в течение 30 дней.
$ Bitcoin = новый jsonRPCClient("HTTP: // rpcuser: rpcpassword@127.0.0.1: 8332 /") или умереть("Невозможно соединиться");
$ ссылка знак равно mysql_connect("Mysqlserver", "Mysqluser", "Mysqlpass") или умереть("Не могли подключить: " . mysql_error());
mysql_select_db("Bitcoin");
если ((Исеть ($ _GET["GetAddress"])) && (is_numeric($ _GET["GetAddress"]))) {
// если мы просили адрес
$ ID знак равно $ _GET["GetAddress"];
$ запрос знак равно «Выбор адреса ОТ адреса WHERE ID =». $ ID . "И SessionID =" . $ сессия;
$ результат знак равно mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error());
$ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC); если (Исеть ($ строка["адрес"])) { $ адрес знак равно $ строка["адрес"]; } Еще {
$ адрес знак равно $ Bitcoin->getnewaddress("Временный адрес") или умереть («К сожалению, не может создать адрес»);
$ запрос знак равно "INSERT INTO адресов (ID, адрес, SESSIONID) значения (" . $ ID . », \ "" . $ адрес . "\",» . $ сессия . ")";
mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error()); }
// здесь мы проверяем, если кто-то уже не купить этот пункт
$ запрос знак равно «Выбор адреса ОТ адреса WHERE ID =». $ ID . "И SESSIONID! =" . $ сессия;
$ результат знак равно mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error());
$ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC); если (Исеть ($ строка["адрес"])) умереть(«К сожалению, этот товар уже частично или полностью оплачены кем-то другим.»);
$ запрос знак равно "ВЫБРАТЬ цена FROM товаров WHERE ID =" . $ ID;
$ pricex знак равно mysql_query($ запрос);
$ строка знак равно mysql_fetch_array($ pricex, MYSQL_ASSOC);
$ цена знак равно $ строка["цена"];
$ платный = (С плавающей точкой)$ Bitcoin->getreceivedbyaddress($ адрес, 1);
эхо "Пожалуйста, отправьте " . $ цена . «В Bitcoin адрес» . $ адрес . ". <бр />";
эхо "Уже отправлено: " . $ платный . "<бр />";
эхо ". $ ID . «»>Подтвердите удаление а><бр />"; }
еще {
эхо "У тебя есть ". $ цена - $ платный . "Осталось заплатить. <бр />"; }
}
еще
если ((Исеть ($ _GET["Удалить"])) && (is_numeric($ _GET["Удалить"]))) {
$ ID знак равно $ _GET["Удалить"];
$ запрос знак равно «Выбор адреса ОТ адреса WHERE ID =». $ ID . "И SessionID =" . $ сессия; // Только те, которые заплатили полностью удалить элементы
$ результат знак равно mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error()); $ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC);
если (Исеть ($ строка["адрес"])) { $ адрес знак равно $ строка["адрес"]; } Еще эхо «К сожалению, эта операция разрешена только для пользователей, которые приобрели этот пункт.»;
$ запрос знак равно "ВЫБРАТЬ цена FROM товаров WHERE ID =" . $ ID;
$ pricex знак равно mysql_query($ запрос);
$ строка знак равно mysql_fetch_array($ pricex, MYSQL_ASSOC);
$ цена знак равно $ строка["цена"];
$ платный = (С плавающей точкой)$ Bitcoin->getreceivedbyaddress($ адрес, 1);
если ($ платный >знак равно $ цена) {
// если пользователь действительно купил его
$ запрос знак равно "DELETE FROM товаров WHERE ID =". $ ID;
$ результат знак равно mysql_query($ запрос) или умереть(«Невозможно удалить пункт:» . mysql_error());
}
}
иначе если (! Исеть ($ _GET["показать"]) || !is_numeric($ _GET["показать"])) {
$ результат знак равно mysql_query(«SELECT ID, название, описание, цена от реализации товаров») или умереть(«Сбой запроса 1:» . mysql_error());
в то время как ($ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC)) {
Printf ("<б>% s б> а><бр />% s<бр />Цена: <б>% s б>", $ строка["Я бы"], $ строка["имя"], $ строка["описание"], $ строка["цена"]); }
} Еще {
$ ID знак равно $ _GET["показать"];
$ результат знак равно mysql_query("ВЫБРАТЬ имя, описание, цена товара FROM WHERE ID =" . $ ID) или умереть(«Сбой запроса 2:» . mysql_error());
в то время как ($ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC)) {
Printf ("<б>% s б><бр />% s<бр />Цена: <б>% s б><бр />Купить с Bitcoin а>", $ строка["имя"], $ строка["описание"], $ строка["цена"], $ ID); }
}
mysql_free_result($ результат);
mysql_close($ ссылка);
?>
// (с) MrBison [m.zubrov@gmail.com], 2010
// Эта программа является свободным программным обеспечением; вы можете распространять и / или изменять
// его в соответствии с условиями GNU General Public License, опубликованной
// Фонд свободного программного обеспечения; либо версии 2 Лицензии, или
// (по вашему выбору) любой более поздней версии.
//
// Эта программа распространяется в надежде, что это будет полезно (и весело!),
// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий
// или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ. См
// GNU General Public License для более подробной информации.
//
// Вы должны были получить копию GNU General Public License
// вместе с этой программой; если нет, то пишите на свободное программное обеспечение
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
require_once ('./includes/jsonRPCClient.php');
функция случайное зерно()
{
список($ tmp1, $ tmp2знак равно взрываться(«», микропоры());
возвращение (поплавок) $ tmp1 + ((С плавающей точкой) $ tmp2 * 100000);
}
mt_srand(случайное зерно());
если (! Исеть ($ _COOKIE["Bitcoinsessionid"])) { $ сессия знак равно mt_rand() + (INT) (микропоры() *1000); } Еще { $ сессия = (Целое) $ _COOKIE["Bitcoinsessionid"]; }
если (!is_numeric($ сессия)) умереть («Это выглядит как попытка инъекции SQL.»);
SetCookie("Bitcoinsessionid", $ сессия, время() +2592000); // куки действительны в течение 30 дней.
$ Bitcoin = новый jsonRPCClient("HTTP: // rpcuser: rpcpassword@127.0.0.1: 8332 /") или умереть("Невозможно соединиться");
$ ссылка знак равно mysql_connect("Mysqlserver", "Mysqluser", "Mysqlpass") или умереть("Не могли подключить: " . mysql_error());
mysql_select_db("Bitcoin");
если ((Исеть ($ _GET["GetAddress"])) && (is_numeric($ _GET["GetAddress"]))) {
// если мы просили адрес
$ ID знак равно $ _GET["GetAddress"];
$ запрос знак равно «Выбор адреса ОТ адреса WHERE ID =». $ ID . "И SessionID =" . $ сессия;
$ результат знак равно mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error());
$ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC); если (Исеть ($ строка["адрес"])) { $ адрес знак равно $ строка["адрес"]; } Еще {
$ адрес знак равно $ Bitcoin->getnewaddress("Временный адрес") или умереть («К сожалению, не может создать адрес»);
$ запрос знак равно "INSERT INTO адресов (ID, адрес, SESSIONID) значения (" . $ ID . », \ "" . $ адрес . "\",» . $ сессия . ")";
mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error()); }
// здесь мы проверяем, если кто-то уже не купить этот пункт
$ запрос знак равно «Выбор адреса ОТ адреса WHERE ID =». $ ID . "И SESSIONID! =" . $ сессия;
$ результат знак равно mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error());
$ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC); если (Исеть ($ строка["адрес"])) умереть(«К сожалению, этот товар уже частично или полностью оплачены кем-то другим.»);
$ запрос знак равно "ВЫБРАТЬ цена FROM товаров WHERE ID =" . $ ID;
$ pricex знак равно mysql_query($ запрос);
$ строка знак равно mysql_fetch_array($ pricex, MYSQL_ASSOC);
$ цена знак равно $ строка["цена"];
$ платный = (С плавающей точкой)$ Bitcoin->getreceivedbyaddress($ адрес, 1);
эхо "Пожалуйста, отправьте " . $ цена . «В Bitcoin адрес» . $ адрес . ". <бр />";
эхо "Уже отправлено: " . $ платный . "<бр />";
эхо ". $ ID . «»>Подтвердите удаление а><бр />"; }
еще {
эхо "У тебя есть ". $ цена - $ платный . "Осталось заплатить. <бр />"; }
}
еще
если ((Исеть ($ _GET["Удалить"])) && (is_numeric($ _GET["Удалить"]))) {
$ ID знак равно $ _GET["Удалить"];
$ запрос знак равно «Выбор адреса ОТ адреса WHERE ID =». $ ID . "И SessionID =" . $ сессия; // Только те, которые заплатили полностью удалить элементы
$ результат знак равно mysql_query($ запрос) или умереть(«Запрос не удалось:» . mysql_error()); $ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC);
если (Исеть ($ строка["адрес"])) { $ адрес знак равно $ строка["адрес"]; } Еще эхо «К сожалению, эта операция разрешена только для пользователей, которые приобрели этот пункт.»;
$ запрос знак равно "ВЫБРАТЬ цена FROM товаров WHERE ID =" . $ ID;
$ pricex знак равно mysql_query($ запрос);
$ строка знак равно mysql_fetch_array($ pricex, MYSQL_ASSOC);
$ цена знак равно $ строка["цена"];
$ платный = (С плавающей точкой)$ Bitcoin->getreceivedbyaddress($ адрес, 1);
если ($ платный >знак равно $ цена) {
// если пользователь действительно купил его
$ запрос знак равно "DELETE FROM товаров WHERE ID =". $ ID;
$ результат знак равно mysql_query($ запрос) или умереть(«Невозможно удалить пункт:» . mysql_error());
}
}
иначе если (! Исеть ($ _GET["показать"]) || !is_numeric($ _GET["показать"])) {
$ результат знак равно mysql_query(«SELECT ID, название, описание, цена от реализации товаров») или умереть(«Сбой запроса 1:» . mysql_error());
в то время как ($ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC)) {
Printf ("<б>% s б> а><бр />% s<бр />Цена: <б>% s б>", $ строка["Я бы"], $ строка["имя"], $ строка["описание"], $ строка["цена"]); }
} Еще {
$ ID знак равно $ _GET["показать"];
$ результат знак равно mysql_query("ВЫБРАТЬ имя, описание, цена товара FROM WHERE ID =" . $ ID) или умереть(«Сбой запроса 2:» . mysql_error());
в то время как ($ строка знак равно mysql_fetch_array($ результат, MYSQL_ASSOC)) {
Printf ("<б>% s б><бр />% s<бр />Цена: <б>% s б><бр />Купить с Bitcoin а>", $ строка["имя"], $ строка["описание"], $ строка["цена"], $ ID); }
}
mysql_free_result($ результат);
mysql_close($ ссылка);
?>
Система должна быть анонимными (поэтому он использует SessionIDs) и, возможно, даже безопасно (так как все данные, отправленные пользователем числовой (идентификатор элемента или SessionID), они фильтруются).
Он использует две таблицы MySQL: "товар" а также "адреса", Первый из них содержит 5 полей, "Я бы" (INT), "имя" (VARCHAR), "описание" (MEDIUMTEXT), "цена" (Дважды) и "пароль" (MEDIUMTEXT, это поле содержит информацию, пользователь получает, когда он платит за пункт полностью). "адреса" содержит в "Я бы" (Идентификатор элемента), "адрес" (Bitcoin адрес используется для получения денег для этого элемента) и "идентификатор сессии" (SessionID от пользователя, который решает купить товар).
Я знаю, этот код плохо, но 1) это работает (она была испытана), 2) я просто не знаю, где я должен использовать
Может быть, это послужит своего рода учебник для некоторых bitcoiners желающих использовать JSON-RPC и PHP, или что-нибудь еще, я не знаю.