抱歉,如果这是一个愚蠢的问题,我是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,那么减少对数据库的调用次数以提高性能是个好主意。