我有一个带有“提交”按钮的表单,当单击它时,它调用display()
函数。
display()
是一个包含另一个。php文件的函数,在该文件中我可以对IDS进行不同的转换。
基本上,我在问,我是否做错了什么,或者是否有更好/更合乎逻辑的方法来做这件事,所以我可以调用这些变量。(请记住,我每次都需要它们,因为提交表单时会提交URL。)
下面是我的代码(index.php)
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>STEAM CONV</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<form method="post">
<input type="text" name="profile_url">
<input type="submit" value="click" name="submit">
</form>
<h1><?php echo $userid; ?></h1>
<img onerror="this.style.display='none'" src="<?php
require_once 'steamid.class.php';
$input = $_POST["profile_url"];
$api_key = "XXXXXXXXXXXXXXXXXXXX";
$id = new SteamID($input,$api_key);
if ($id->resolveVanity()) {
$avatar = $id->toAvatar();
echo $avatar;
}
?>">
</body>
<?php
require_once 'steamid.class.php';
function urlCheck() {
$input = $_POST["profile_url"];
if(substr_count($input, ' ') === strlen($input)) {
echo "Enter URL";
return false;
} else {
return true;
}
}
if(isset($_POST['submit']))
{
display();
}
function display() {
require_once 'steamid.class.php';
$input = $_POST["profile_url"];
$api_key = "XXXXXXXXXXXX";
$id = new SteamID($input,$api_key);
if(urlCheck()) {
if ($id->resolveVanity()) {
$communityid = $id->toCommunityID();
echo $communityid . ", " . " ";
$steamid = $id->toSteamID();
echo $steamid . ", " . " ";
global $userid;
$userid = '[U:1:'.$id->toUserID().']';
echo $userid . ", " . " ";
} else {
echo "Profile wasnt found!";
}
}
}
?>
steamid.class.php
<?php
class SteamID {
protected $id;
protected $key;
public function __construct($id,$api_key = '') {
$this->id = $id;
$this->key = $api_key;
return $this;
}
public function isID32() {
if(preg_match('/^STEAM_0:[01]:[0-9]{8,9}$/', $this->id)) {
return true;
}
return false;
}
public function isID64() {
if(preg_match('/7656119[0-9]{10}/i', $this->id)) {
$this->id = $this->cleanOutput(str_replace('https://steamcommunity.com/profiles/', '', $this->id));
return true;
}
return false;
}
public function resolveVanity() {
$search = $this->cleanOutput(str_replace('https://steamcommunity.com/id/', '', $this->id));
$api = 'http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key='.$this->key.'&vanityurl='.$search;
$vanity = $this->getCURL($api);
if ($vanity['response']['success'] === 1) {
$this->id = $vanity['response']['steamid'];
return true;
}
else {
return false;
}
}
public function toAvatar() {
if ($this->isID32() || $this->isID64() || $this->resolveVanity()) {
$key = $this->toCommunityID();
$api = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='.$this->key.'&steamids='.$key;
$data = $this->getCURL($api);
$image = $data['response']['players'][0]['avatarfull'];
return $image;
}
else {
return false;
}
}
public function toCommunityID() {
if (preg_match('/^STEAM_/', $this->id)) {
$parts = explode(':', $this->id);
return bcadd(bcadd(bcmul($parts[2], '2'), '76561197960265728'), $parts[1]);
} elseif (is_numeric($this->id) && strlen($this->id) < 16) {
return bcadd($this->id, '76561197960265728');
} else {
return $this->id;
}
}
public function toSteamID() {
if (is_numeric($this->id) && strlen($this->id) >= 16) {
$this->id = bcsub($this->id, '76561197960265728');
//If subtraction goes negative, shift value up
if ($this->id < 0) {
$this->id += 4294967296;
}
$z = bcdiv($this->id, '2');
} elseif (is_numeric($this->id)) {
$z = bcdiv($this->id, '2');
} else {
return $this->id;
}
$y = bcmod($this->id, '2');
return 'STEAM_0:' . $y . ':' . floor($z);
}
public function toUserID() {
if (preg_match('/^STEAM_/', $this->id)) {
$split = explode(':', $this->id);
echo $split;
return $split[2] * 2 + $split[1];
} elseif (preg_match('/^765/', $this->id) && strlen($this->id) > 15) {
$uid = bcsub($this->id, '76561197960265728');
if ($uid < 0) {
$uid += 4294967296;
}
return $uid;
} else {
return $this->id;
}
}
//Function to sent request to SteamAPI
private function getCURL($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$request = curl_exec($ch);
curl_close($ch);
$json = json_decode($request, true);
return $json;
}
//Remove end slash if present as well as trailing whitespace
private function cleanOutput($input) {
$specialInput = htmlspecialchars(str_replace('/', '', $input));
$cleanInput = preg_replace('/\s/', '', $specialInput);
return $cleanInput;
}
}
问候:)
这样做的正确方法是从函数返回对象并根据需要使用它。请注意,我使用的是PHP速记echo(
)。一个更好的方法是使用另一个函数用预期的字符串格式化变量,这样就不需要在HTML中这样做了。
function urlCheck() {
$input = $_POST["profile_url"];
if(substr_count($input, ' ') === strlen($input)) {
echo "Enter URL";
return false;
} else {
return $input;
}
}
function display() {
$input = urlCheck();
if($input) {
require_once 'steamid.class.php';
$api_key = "XXXXXXXXXXXX";
$id = new SteamID($input,$api_key);
if ($id->resolveVanity()) {
return $id;
} else {
echo "Profile wasn't found!";
return false;
}
}
}
if(isset($_POST['submit']))
{
$id = display();
}
...
<h1><?= (isset($id)) ? "[U:1:".$id->toUserID()."], " : "" ?></h1>
...
<img onerror="this.style.display='none'" src="<?= (isset($id)) ? {$id->toAvatar()} : "" ?>">
问题内容: 我想知道是否存在一种实现类似于map getter的功能的方法:它返回返回值作为第一个参数,(可选地分配)第二个值作为第二个参数。因此,我需要可以通过以下方式调用的函数: 问题答案: 不,它无法完成,唯一的选择是返回一个指针并检查它是否为nil。
我被迫在getJSON回调函数中使用该函数之外的数据。看一看: 这就是我尝试的,但是失败了,$值仍然设置为0,尽管在回调中它肯定设置为实际值。我知道为什么它会失败,因为AJAX请求是异步发送的。问题是,正确的方法,做回调里面的一切,是不可能的。如你所见,我需要在raty(插件)设置中检索JSON对象。我只会使用$. ajax()并将其设置为同步,但留档将其标记为1.8不建议使用。我宁愿不引入一个我
问题内容: 我有以下代码: 我要解决的问题是这个,我要在 里面 使用。我该怎么做呢? PS:内部的函数在Go中称为回调吗? 问题答案: 您也可以尝试返回一个函数:
问题内容: 我对JavaScript比较陌生,我想我知道回调函数的工作原理,但是在搜索Web几个小时后,我仍然不明白为什么我的代码不起作用。 我正在提出一个AJAX请求,该请求返回一个字符串数组。我正在尝试将此数组设置为局部变量,但是一旦执行回调函数,它似乎就失去了它的值。 在控制台中,显示为未定义。谁能向我解释为什么未设置此参数,以及如何在回调函数中设置局部变量。 问题答案: 这里的问题是aja
问题内容: 我正在读一本叫做《 Go编程语言》的书,在有关指针的第二章中,写了以下内容 函数返回局部变量的地址是绝对安全的。例如,在下面的代码中,即使调用返回后,由对f的特定调用创建的局部变量v仍将存在,并且指针p仍将引用它: 我完全不明白这一点,应该在执行函数后销毁局部变量。是因为可能v是在堆上分配的。我知道在C语言中,如果您使用malloc分配空间,函数执行后就不会销毁它,因为它在堆上。 问题