PDA

View Full Version : Coding problem


sambah
06-07-2006, 10:56 PM
A little history first:

I am a completely new php/sql coder (been doing it 4 days) and have chosen a fantasy football/sports game hack for vb to start with.

Its coming along fairly well: Users can register, and view the mainpage, admin can add players, and users can view those players and buy them if they have enough money.

Once a user has bought a player the userid (same as the vb userid) and playerid goes into a new table.

I am trying to make a new page with their current "team" (ie. the players they have bought.

Problem is...it isnt working. I suspect the problem isn't in my query, but it could be.

Heres the code for the team page:

$teaminfo = ($db->query("SELECT *
FROM footy_players
INNER JOIN footy_teams
ON footy_teams.playerid=footy_players.pid
WHERE footy_teams.userid = " . $vbulletin->userinfo['userid'] . "")
);

while ($row = mysql_fetch_array($teaminfo)) {

$tpname = $row['pname'];
$tpvalue = $row['pvalue'];
$tpnationality = $row['pnationality'];

$tpage .= "
<font class=\"normal\">
<hr>
<b>$tpname </b><br>
$tpvalue<br>
$tpnationality
<br>
<br>
</font>
";
}

And

if ($_GET['do'] == 'myteam')
{
eval('print_output("' . fetch_template('footy_team') . '");');
}
?>

However when I run ?do=myteam it just loads the original template and not footy_team.

Any ideas?

noppid
06-07-2006, 11:11 PM
Could you do a show table query and let us see the two table structures before we comment on the query?

sambah
06-07-2006, 11:25 PM
sorry. i couldnt work out how to make show table show the details about one table as opposed to a list of all the tables. so i screenshotted instead

http://img215.imageshack.us/img215/1871/tablestructures5cm.th.jpg (http://img215.imageshack.us/my.php?image=tablestructures5cm.jpg)

Its installed on a stock vb 3.5.4 with no other modifications.

No standard tables have been modified and 3 tables added:

footy_registration
footy_players
footy_teams

noppid
06-08-2006, 01:30 AM
What I'm looking for are indexes.

Damn, I can see how this could be frustrating. I want to just try my ideas. :p

Eikinskjaldi
06-10-2006, 05:39 AM
From the looks of it, one of the issues at the least seems the placement of your if, maybe attach the file you are working on so we can get a better look at the script on a whole rather then this small chunk.

sambah
06-11-2006, 12:04 AM
Sure. Thanks for answering :)

Here we go:

<?php

error_reporting(E_ALL & ~E_NOTICE);

// #################### CONSTANTS #######################
define('NO_REGISTER_GLOBALS', 1);
define('THIS_SCRIPT', 'football');

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array('timezone', 'user', 'register');

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array(
'footy_main',
'footy_team',
'footy_users',
);

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');


// GET THE VB HEADER/FOOTER/NAVBAR
eval('$headinclude = "' . fetch_template('headinclude') . '";');
eval('$header = "' . fetch_template('header') . '";');
eval('$navbar = "' . fetch_template('navbar') . '";');

if ($_POST['buttonpressed']==1 && $_POST['cashvalue']>0)
$db->query("UPDATE footy_registration SET cash=cash-".$_POST['cashvalue']." WHERE userid = " . $vbulletin->userinfo['userid'] . "");
$db->query("
INSERT INTO `footy_teams` ( `userid` , `playerid` )
VALUES (" . $vbulletin->userinfo[userid] . ", '".$_POST['pid']."')
");

// QUERY DATABASE SO WE CAN PRINT DATA ON THE PAGE
$reginfo = ($db->query_first("SELECT * FROM footy_registration WHERE userid = " . $vbulletin->userinfo['userid'] . ""));
$playerinfo = ($db->query("SELECT * FROM footy_players ORDER BY pid desc LIMIT 50"));
$cash = $reginfo['cash'];

while ($row = mysql_fetch_array($playerinfo)) {

$pname = $row['pname'];
$pvalue = $row['pvalue'];
$pnationality = $row['pnationality'];
$pid = $row['pid'];

$paybutton="";
if ($pvalue <= $cash)
$paybutton='<form name="myform" method="post" action="football.php">
<input type="hidden" name="cashvalue" value="'.$pvalue.'">
<input type="hidden" name="pid" value="'.$pid.'">
<input type="hidden" name="buttonpressed" value="1">
<input type="submit" value="Buy Player" title="Buy player">
</form>';

$page .= "
<font class=\"normal\">
<hr>
<b>$pname </b><br><br>
$pvalue
$pnationality
--->".$paybutton."<---
<br>
<br>
</font>
";
}

$teaminfo = ($db->query("SELECT *
FROM footy_players
INNER JOIN footy_teams
ON footy_teams.playerid=footy_players.pid
WHERE footy_teams.userid = " . $vbulletin->userinfo['userid'] . "")
);

while ($row = mysql_fetch_array($teaminfo)) {

$tpname = $row['pname'];
$tpvalue = $row['pvalue'];
$tpnationality = $row['pnationality'];

$tpage .= "
<font class=\"normal\">
<hr>
<b>$tpname </b><br>
$tpvalue<br>
$tpnationality
<br>
<br>
</font>
";
}



var_dump($playerinfo);


// ############################# START MAIN PAGE ###############################

// Check whether the user has registered for the game
if (!$vbulletin->GPC['do'])
{
if (!$db->query_first("SELECT * FROM footy_registration WHERE userid = " . $vbulletin->userinfo['userid'] . ""))
{
standard_error(fetch_error('footy_youneedtoregiste r'));
}
else
{
eval('print_output("' . fetch_template('footy_main') . '");');
}
}

if ($_GET['do'] == 'myteam')
{
eval('print_output("' . fetch_template('footy_team') . '");');
}
?>

Everything actually works except the do=myteam

Adrian Schneider
06-11-2006, 12:06 AM
Like I told you earlier, $vbulletin->GPC['do'] is never defined. Change that to $_GET['do'] and it will work as expected.

Your if (!$vbulletin->GPC['do']) condition will always return true, because of the above.

sambah
06-11-2006, 12:37 AM
Aha, sorry I didnt read that. Thanks

/me tests it

edit: cant believe i missed that PM. thats had me hung for days. Thanks so much adrian.

Under what circumstances WOULD you use $vbulletin->GPC['do']) ?

vb seems to use it in a few places

Adrian Schneider
06-11-2006, 12:46 AM
Aha, sorry I didnt read that. Thanks

* Adrian Schneider tests it

edit: cant believe i missed that PM. thats had me hung for days. Thanks so much adrian.

Under what circumstances WOULD you use $vbulletin->GPC['do']) ?

vb seems to use it in a few places
No problem.

There isn't much point in cleaning the $_GET['do'] value unless you are using it in queries (or as data). But if you are just using it for navigation, why bother...

To "clean" it, you would have to first: $vbulletin->input->clean_array_gpc('g', array(
'do' => TYPE_STR
));