PHP-通过api获取单元格的值


PHP- getting the value of a cell for use with an api

抱歉,如果这是一个愚蠢的问题,我是PHP的新手。

首先,这是我要做的:

我正在从MYSQL中提取信息并在页面上显示信息。特别是这一点:

while($rowsID = mysql_fetch_assoc($sIDD))
{
echo '<tr>';
foreach($rowsID as $key => $cell){
    print '<td>'.$cell.'</td>';
}

显示我想要的信息。

我要插入的单元格的信息:

$sid = $rowsID['steamID'];
$key = '<yoink>';
$slink =file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' .        $key . '&steamids=' . $sid . '&format=json');
$myarray = json_decode($slink, true);
print '<img src=';
print $myarray['response']['players'][0]['avatarmedium'];
print '>'; `

这不起作用。它不会从单元格中提取实际数字并将其放入$sid中。我有点不知所措。我在谷歌上搜索了好几天,我的大部分代码都是根据我在这里找到的东西改编的,所以我甚至不确定我的方向是否正确。我希望我已经清楚地解释了我的问题并提供了足够的信息。谢谢你的帮助。

完整代码:

<?php
$hostname = "";   // eg. mysql.yourdomain.com (unique)
$username = "";   // the username specified when setting-up the database
$password = "";   // the password specified when setting-up the database
$database = "";   // the database name chosen when setting-up the database (unique)
$imgR =  "<td><img src='/images/red-dot2.png".$cell['red-dot2.png']."'></td>";
$imgG =  "<td><img src='/images/green-dot2.png".$cell['green-dot2.png']."'></td>";
setlocale(LC_MONETARY, 'en_US');
// Line 10
$_GET['id'];
$name = $_GET['id'];
$link = mysql_connect($hostname,$username,$password);
mysql_select_db($database) or die("Unable to select database");
$sql = "SELECT Members.PID, Members.ID, Members.Steam_Name, Members.SG_ID'n"
    . "FROM Members WHERE Members.PID = '$name%' ";
//Line 20
$gas = "SELECT Giveaways.title, Giveaways.cv, Members_1.Page, Giveaways.B, Giveaways.entries'n"
    . "FROM Members_1 INNER JOIN (Members INNER JOIN Giveaways ON Members.SG_ID = Giveaways.giver) ON Members_1.SG_ID = Giveaways.status'n"
    . "WHERE (((Members.PID)='$name'))";
$cvGiven = "SELECT Members.PID, Sum(Giveaways.cv) AS SumOfcv'n"
    . "FROM Members INNER JOIN Giveaways ON Members.SG_ID = Giveaways.giver'n"
    . "GROUP BY Members.PID'n"
    . "HAVING (((Members.PID)=$name)) ";
//Line 30
$winResults = "SELECT Giveaways.title, Members_1.Page, Giveaways.cv, Giveaways.B, Giveaways.entries'n"
    . "FROM Members INNER JOIN (Members_1 INNER JOIN Giveaways ON Members_1.SG_ID = Giveaways.giver) ON Members.SG_ID = Giveaways.status'n"
    . "WHERE (((Members.PID)=$name)) ";
$cvWon = "SELECT Members.PID, Sum(Giveaways.cv) AS SumOfcvW'n"
    . "FROM Members INNER JOIN Giveaways ON Members.SG_ID = Giveaways.status'n"
    . "GROUP BY Members.PID'n"
    . "HAVING (((Members.PID)=$name)) ";
$sID = "SELECT Members.ID'n"
    . "FROM Members'n"
    . "WHERE (((Members.PID)=$name))";
$get = "SELECT Members.PID, Members.SG_ID'n"
    . "FROM Members";
//Line 40
$result = mysql_query($sql,$link) or die("Unable to select: ".mysql_error());
$result2 = mysql_query($gas,$link) or die("Unable to select: ".mysql_error());
$cvTotal = mysql_query($cvGiven,$link) or die("Unable to select: ".mysql_error());
$cvTotalW = mysql_query($cvWon,$link) or die("Unable to select: ".mysql_error());
$wins = mysql_query($winResults,$link) or die("Unable to select: ".mysql_error());
$sIDD = mysql_query($sID,$link) or die("Unable to select: ".mysql_error());
$getN= mysql_query($get,$link) or die("Unable to select: ".mysql_error());

if (!$result) {
    die("Query to show fields from table failed");
}
if (!$result2) {
    die("Query to show fields from table failed");
}
if (!$cvTotal) {
    die("Query to show fields from table failed");
}
if (!$sIDD) {
    die("Query to show fields from table failed");
}
if (!$getN) {
    die("Query to show fields from table failed");
}
//Line 60
if (!$cvTotalW) {
    die("Query to show fields from table failed");
}
if (!$wins) {
    die("Query to show fields from table failed");
}

///////////////////////////////////////////////////////////////////////////////////
//////////////////////////Start Structure//////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

//Display name
echo '<h2>[[Breadcrumbs?showHomeCrumb = 0  ]]</h2>';
//Display Steam ID
$sid = $rowsID['steamID'];
$key = '';
   $slink = file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' . $key . '&steamids=' . $sid . '&format=json');
   $myarray = json_decode($slink, true);
    print $myarray['response']['players'][0]['avatarmedium'];
   // print '>'; 
print $sid;

echo '<table>';
while($rowsID = mysql_fetch_assoc($sIDD))
{
echo '<tr>';
    foreach($rowsID as $key => $cell){
        print '<th>Steam ID:</th>'.'<td>'.$cell.'</td>';
    }
echo'</tr>';
}
echo '</table>';
//CV totals
$row = mysql_fetch_assoc($cvTotal);
$sum = $row['SumOfcv'];
$rowW = mysql_fetch_assoc($cvTotalW);
$sumW = $rowW['SumOfcvW'];
//Start CV table
echo '<div class=cv>';
echo '<table>';
echo '<tr>';
echo '<td>Total CV Given:</td>';
echo '<td> $'. number_format ($sum,2). '</td>';
echo '<tr>';
echo "<td>Total CV Won:</td>";
echo '<td> $'. number_format ($sumW,2). '</td>';
echo '</tr>';
echo "</tr>'n'n";
echo '</table>';
echo '</div>';


//Start Giveaways List
echo '<h3>Giveaways</h3>';
echo '<div class=llamatable>';
echo"<table>'n";
echo'<th>Game</th><th>CV</th><th>Winner</th><th></th><th>NB?</th><th>Entries</th>';

while($row = mysql_fetch_assoc($result2)) {

    print "<tr>'n";
      //Is it a bundle?
      foreach($row as $key => $cell){
       if ($key == 'B' && strpos($cell,'1') !== false){
         $cell = str_replace('1',$cell,$imgR);
        } 
        elseif($key == 'B' && $cell == "0"){
            $cell= $imgG;
       }
      //Set cv format
       if($key == 'cv'){
         $cell= '$'. number_format ($cell,2); //Line 80
        }
        //set breaks if multiple winners
       if (strpos($cell,',') !== false){
         $cell= str_replace(',','<br />',$cell);
        }
       if($key == 'status' && strpos($cell, $nameName)){
         $cell = $test;
       }        
        echo"<td>$cell</td>'n";
    }

    print "</tr>'n";

    //print "</br>'n";
}// End Giveaways list
//////////////////////////////////////////////////////////////////////////////////////////
print "</table>'n";
print "</div>";

//Start Wins List
echo '<h3>Wins</h3>';
echo '<div class=llamatable>';
//$fields_num = mysql_num_fields($results);
echo"<table>'n";
echo'<th>Game</th><th>Contributor</th><th>cv</th><th></th><th>NB?</th><th>Entries</th>';

while($row = mysql_fetch_assoc($wins)) {
    print "<tr>'n";
      //Is it a bundle?
      foreach($row as $key => $cell){
       if ($key == 'B' && strpos($cell,'1') !== false){
         $cell = str_replace('1',$cell,$imgR);
        } //Line 110
        elseif($key == 'B' && $cell == "0"){
            $cell= $imgG;
       }
      //Set cv amount
       if($key == 'cv'){
         $cell= '$'. number_format ($cell,2);
        }
        //set breaks if multiple winners
       if (strpos($cell,',') !== false){
         $cell= str_replace(',','<br />',$cell);
        }
        echo"<td>$cell</td>'n";
    }
print "</tr>'n";

}// End wins list
print "</table>'n";
    echo "</div>";

//echo '</table>';
//echo '</div>';
mysql_close($link);
?>

我意识到这段代码可能是一场灾难,我计划在让它工作并更全面地理解我所看到的内容后清理它。我从许多不同的来源复制和修补代码,以及尝试我自己的。别恨我。: -)

有几个问题。首先,也是最重要的,您在$rowsID变量具有数据之前使用它。

$sid = $rowsID['steamID']; 
        ^-------- You don't assign this a value until 12 lines later, here:
while($rowsID = mysql_fetch_assoc($sIDD))
其次,您应该而不是使用mysql_*函数。相反,可以使用mysqli或PDO来替代已弃用的 mysql函数

第三,净化你的输入。您正在采取$_GET['id']中的值并将其直接传递给您的查询。你好,小鲍比表。

解决了这些问题,你就可以上路了。

你可能需要考虑改进的一些事情:

  • 如果我正确阅读你的查询,你是基于球员的名字查询,对吗?如果两个人的名字都是Llama会发生什么?
  • 如果你要为每个用户查询Steam API,建立一个由逗号分隔的配置文件id字符串,然后在你进行API调用时将所有这些(最多100)传递给steamids变量。这减少了你往返于Valve服务器的次数
  • 我不知道你的数据库结构,但其中一些查询看起来可以与一些花哨的SQL相结合。如果您了解更复杂的SQL,那么减少对数据库的调用次数以提高性能是个好主意。