Populating drop down menus with user specific data
Populating drop down menus with user specific data
I need to condense battle functions into one page. Going off to a completely diff page for an item or spell use is silly. So my question is this..How do I populate drop down menus with user specific data. I imagine a button for standard attack w/ two drop down menus for items and spells respectively..each with its own submit button.
- Jackolantern
- Posts: 10891
- Joined: Wed Jul 01, 2009 11:00 pm
Re: Populating drop down menus with user specific data
You could would could do something like this:
Hope this helps, and if you have any questions about it, let me know!
Code: Select all
<form action="doaction.php" method="post">
<?php
//Next line assumes that each player may have more than one skill in the "skills"
//...table with their player ID, thus returning more than 1 result
if ($skillResult = mysqli_query($db, "SELECT * FROM skills WHERE playerid='$playerid'")) {
echo '<select name="skills">';
while ($row = mysqli_fetch_row($skillResult)) {
//Next line assumes that the name of the skill is in the first column of the "skills" table.
//If it is not, just modify the number. For example, if the name of the skill is in the
//...fourth column, you would use $row[3] (remember arrays are 0-based).
echo "<option value=\"$row[0]\">$row[0]</option>";
}
echo "</select>";
echo "</form";
} else {
echo "You do not have any usable skills";
}The indelible lord of tl;dr
Re: Populating drop down menus with user specific data
Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in C:\wamp\www\Tutorial\battle.php on line 162
Never seen that kind of message before.
Probably because $db isn't set? What's its function in the above usage? Obviously not player skills because its being queried right next to it.
Never seen that kind of message before.
Probably because $db isn't set? What's its function in the above usage? Obviously not player skills because its being queried right next to it.
- Jackolantern
- Posts: 10891
- Joined: Wed Jul 01, 2009 11:00 pm
Re: Populating drop down menus with user specific data
As far as I know, you are free to change any of these mysqli functions to mysqli (edit: Oops! I meant "mysql" here. So used to typing mysqli) functions, and then you can drop off the $db parameters. However, I always write my code as mysqli because it is faster, has more features, and is more secure. I suggest everyone else use it as well, since mysql extension may be deprecated and removed in a later release of PHP, seeing as it has no use now.
If you are still early in coding, you can change to mysqli extension by updating your connect.php script like this:
However, if you already have tons of database queries sprinkled throughout your code, it would likely not be a worthy effort/benefit trade-off to go back and change all your mysql instances to mysqli. In that case, simply change the code to mysql_..., and remove the leading $db references in the parameter lists.
EDIT: And as for the usage of $db, it is a reference to the database connection you would have received and stored in the connect.php file. mysqli requires this resource handle for some advanced options it offers, and also so that you can have multiple database connections active in the same script, whereas it is a bit more difficult to do that with mysql.
If you are still early in coding, you can change to mysqli extension by updating your connect.php script like this:
Code: Select all
//////Get reference to DB
$db = mysqli_connect("localhost", "username", "password" ) or die("Could not obtain initial connection");
if(!$db) {
echo "No connection obtained";
exit;
}
if (!mysqli_select_db($db, "databaseName")){
echo "Could not select database";
exit;
}EDIT: And as for the usage of $db, it is a reference to the database connection you would have received and stored in the connect.php file. mysqli requires this resource handle for some advanced options it offers, and also so that you can have multiple database connections active in the same script, whereas it is a bit more difficult to do that with mysql.
The indelible lord of tl;dr
Re: Populating drop down menus with user specific data
ah nice, works just fine. Even put a before the loop to tidy it.
edit: fixed ;o Its going to the proper page now but I dont see the information carrying over. Gonna work on it a minute.
The form action needs to be attack.php?sid=$sid
then $sid to = the selected spells id.
Trying to figure out how to get the php within the form tag...or am I going about it wrong?
Code: Select all
echo "<option value=>*Select a Skill*</option>";edit: fixed ;o Its going to the proper page now but I dont see the information carrying over. Gonna work on it a minute.
The form action needs to be attack.php?sid=$sid
then $sid to = the selected spells id.
Trying to figure out how to get the php within the form tag...or am I going about it wrong?
- Jackolantern
- Posts: 10891
- Joined: Wed Jul 01, 2009 11:00 pm
Re: Populating drop down menus with user specific data
Provided the value is not determined at the moment the player clicks the link, you could always store it in a session variable! However, if you do want to send it through $GET, you could do it like this:
Code: Select all
<?php
echo "<form action=\"attack.php?sid=$sid\" method=\"post\">";
//Next line assumes that each player may have more than one skill in the "skills"
...The indelible lord of tl;dr
Re: Populating drop down menus with user specific data
Jackolantern wrote:Provided the value is not determined at the moment the player clicks the link, you could always store it in a session variable! However, if you do want to send it through $GET, you could do it like this:
Code: Select all
<?php echo "<form action=\"attack.php?sid=$sid\" method=\"post\">"; //Next line assumes that each player may have more than one skill in the "skills" ...
Yeah wont work. Considering that I have to define $sid below the Loop...because $sid = $row[1]; ...sticking the loop above the definition....functions...but of course it doubles up on the whole forum.
- Jackolantern
- Posts: 10891
- Joined: Wed Jul 01, 2009 11:00 pm
Re: Populating drop down menus with user specific data
Yes, the value will be undefined if you are relying on the query in the form to populate the value. You should store it in a session variable when you get the value out of the db, and then re-access it in the attack script.
The indelible lord of tl;dr
Re: Populating drop down menus with user specific data
Googled for a tutorial & tried a bit. Kept getting 'depreciated' errors. Too late to stress over new learnings. I'll take a crack at it tomorrow. Thanks for the help jack 
Re: Populating drop down menus with user specific data
Not only am I unable to get the damn session variable functioning..but now my attack & battle have completely lost functionality. No means of attack by the player registers damage.
battle.php
Attack.php
Countless tutorials read..mainly w3schools tuts on forms & sessions..It looks too damn simple to be this frustrating.
battle.php
Code: Select all
<?php
include_once 'connect.php';
session_start();
include_once 'logo.php';
?>
<link href="style.css" rel="stylesheet" type="text/css" />
<div id="login2" div align="center">
<?php
if (isset($_SESSION['player']))
{
$player=$_SESSION['player'];
}
else
{
echo "Not Logged in <br><br> <A href='login.php'>Login</a>";
exit;
}
?>
</div>
<?php
$playerinfo="SELECT * from players where name='$player'";
$playerinfo2=mysql_query($playerinfo) or die("could not get player stats!");
$playerinfo3=mysql_fetch_array($playerinfo2);
include_once 'statpanel.php';
$pid = $playerinfo3['id'];
$name = $playerinfo3['name'];
$playerhp = $playerinfo3['hpoints'];
$playerattack = $playerinfo3['attack'];
$playerdefense = $playerinfo3['defense'];
if ($playerhp < 1)
{
echo "You are dead!" ;
echo "<br><a href='inn.php>Heal at the lake";
exit;
}
?>
<div id="table">
<?php
if (isset($_GET['randid']))
{
$randid=$_GET['randid'];
$iteminfo="SELECT * from inventory where randid='$randid' AND id ='$pid'";
$iteminfo2=mysql_query($iteminfo) or die("could not get item stats!");
$iteminfo3=mysql_fetch_array($iteminfo2);
if (!$iteminfo3['name'])
{
}
else
{
$iname = $iteminfo3['name'];
$stats = $iteminfo3['stats'];
$statadd = $iteminfo3['statadd'];
$type = $iteminfo3['type'];
if ($type == "healing")
{
$newhp = $statadd + $playerhp;
if ($newhp > $playerinfo3['maxhp'])
{
$newhp = $playerinfo3['maxhp'];
}
$updateplayer="update players set hpoints='$newhp' where id='$pid'";
mysql_query($updateplayer) or die("Could not update player");
$updateitem="DELETE from inventory where id='$pid' AND randid='$randid' limit 1";
mysql_query($updateitem) or die("Could not delete item");
$playerhp = $newhp;
echo "Used " . $iname . " and recovered " . $statadd . ".<br>";
}
}}
$creature = $playerinfo3['creature'];
if ($creature != 0)
{
$creatureinfo="SELECT * from creatures where id='$creature'";
$creatureinfo2=mysql_query($creatureinfo) or die("could not get the creature you were fighting!");
$creatureinfo3=mysql_fetch_array($creatureinfo2);
}
else
{
$creatureinfo="SELECT * from creatures order by rand() limit 1";
$creatureinfo2=mysql_query($creatureinfo) or die("could get a creature!");
$creatureinfo3=mysql_fetch_array($creatureinfo2);
$cid = $creatureinfo3['id'];
$updateplayer="update players set creature='$cid' where name='$name'";
mysql_query($updateplayer) or die("Could not update player");
}
$creature = $creatureinfo3['name'];
$creaturehp = $creatureinfo3['hpoints'];
$creatureattack = $creatureinfo3['attack'];
$creaturedefense = $creatureinfo3['defense'];
?>
</div>
<div id="player">
<?php
/////player info
echo "<u> " . $playerinfo3['name'] . "</u><br>";
echo "Hit points = " . $playerhp . "<br>";
echo "Attack = " . $playerattack . "<br>";
echo "Defense = " . $playerdefense . "<br><br><br>";
?>
</div>
<div id="creature">
<img src="images/<?php echo $creatureinfo3['imgurl'];?>" <br>
<?php
///////creature info
echo "<u> " . $creatureinfo3['name'] . "</u><br>";
echo "Hit points = " . $creaturehp . "<br>";
echo "Attack = " . $creatureattack . "<br>";
echo "Defense = " . $creaturedefense . "<br><br><br>";
?>
</div>
<div id="options">
<?php
echo "<a href='attack.php'>Attack</a>";
echo "<br><a href='usemagic.php'>Use Magic</a>";
echo "<br><a href='useitem.php'>Use Item</a>";
echo "<br><a href='index.php'>Exit Arena</a>";
?>
</div>
<div id="logout">
<?php
echo "<br><a href='logout.php'><img src='images/logout.gif' border='0'></a>";
?>
</div>
<div id="skillselect">
<?php
$playerid = $playerinfo3['id'];
//Next line assumes that each player may have more than one skill in the "skills"
//...table with their player ID, thus returning more than 1 result
if ($skillresult = mysql_query("SELECT * FROM playermagic WHERE pid='$playerid'")) {
echo "<form action='attack.php' method=\"post\">";
echo '<select name="skills">';
echo "<option value=>*Select a Skill*</option>";
while ($row = mysql_fetch_row($skillresult)) {
//Next line assumes that the name of the skill is in the first column of the "skills" table.
//If it is not, just modify the number. For example, if the name of the skill is in the
//...fourth column, you would use $row[3] (remember arrays are 0-based).
echo "<option value=\"$row[2]\">$row[2] <font color='ffffff'>____</font> $row[6]sp</option>";
}
echo "</select>";
echo '<input type="submit" value="Use skill" name="skills">';
echo "</form>";
} else {
echo "You do not have any usable skills";
}
?>Code: Select all
<?php
include_once 'connect.php';
session_start();
include_once 'logo.php';
?>
<link href="style.css" rel="stylesheet" type="text/css" />
<div id="login1" div align="center">
<?php
if (isset($_SESSION['player']))
{
$player=$_SESSION['player'];
}
else
{
echo "Not Logged in <br><br> <A href='login.php'>Login</a>";
exit;
}
?>
</div>
<?php
$string = $_POST['skills'];
$sid = $string['1'];
$playerinfo="SELECT * from players where name='$player'";
$playerinfo2=mysql_query($playerinfo) or die("could not get player stats!");
$playerinfo3=mysql_fetch_array($playerinfo2);
include_once 'statpanel.php';
$pid = $playerinfo3['id'];
?>
</div>
<div id="table">
<?php
$creature = $playerinfo3['creature'];
if ($creature != 0)
{
$creatureinfo="SELECT * from creatures where id='$creature'";
$creatureinfo2=mysql_query($creatureinfo) or die("could not get the creature you were fighting!");
$creatureinfo3=mysql_fetch_array($creatureinfo2);
$gold = $creatureinfo3['gold'];
}
else
{
echo "<a href='battle.php'>No Creature selected. Go Back!";
exit;
}
$playerhp = $playerinfo3['hpoints'];
$playerattack = $playerinfo3['attack'];
$playerdefense = $playerinfo3['defense'];
$playerpass = 0;
$creature = $creatureinfo3['name'];
$creaturehp = $creatureinfo3['hpoints'];
$creatureattack = $creatureinfo3['attack'];
$creaturedefense = $creatureinfo3['defense'];
$creatureid = $creatureinfo3['id'];
if ($playerhp < 1)
{
echo "You are dead!" ;
echo "<br><a href='inn.php>Heal at the lake";
exit;
}
?>
</div>
<div id="player">
<?php
///////////////////////players turn////////////////////
echo "<center><u> " . $playerinfo3['name'] . "'s Attack</u><br>";
if (isset($_GET['sid']))
{
$spellinfo="SELECT * from playermagic where sid='$string' AND pid='$pid'";
$spellinfo2=mysql_query( $spellinfo) or die("could not get spell!");
$spellinfo3=mysql_fetch_array( $spellinfo2);
$sname = $spellinfo3['name'];
if ($spellinfo3['type'] == "combat")
{
if ($spellinfo3['scost'] > $playerinfo3['spoints'])
{
echo "You do not have enough Spell Points for this spell.<br>";
echo "<a href='battle.php'>Go Back";
exit;
}
else
{
$weaponinfo="SELECT * from playerweapons where equip=1 AND pid='$pid'";
$weaponinfo2=mysql_query( $weaponinfo) or die("could not get player weapon!");
$weaponinfo3=mysql_fetch_array( $weaponinfo2);
$spoints = $spellinfo3['scost'];
$moddamage = $spellinfo3['svalue'] / 10;
$moddamage = (int)$moddamage;
$sdamage = $spellinfo3['svalue'];
$totalspoints = $playerinfo3['spoints'];
$sresult = $totalspoints - $spoints;
$playerdamage = $sdamage;
$newcreaturehp = $creaturehp - $playerdamage;
echo " You Cast " . $sname . " and do " . $sdamage . " points of damage";
$updateplayer="update players set spoints='$sresult' where name='$player'";
mysql_query($updateplayer) or die("Could not update creature");
if ($newcreaturehp < 1)
{
echo "<br>The " . $creature . " has been killed";
$crmaxhp=$creatureinfo3['maxhpoints'];
$updatecreature="update creatures set hpoints='$crmaxhp' where name='$creature' limit 1";
mysql_query($updatecreature) or die("Could not update creature");
if ($playerinfo3['level'] > $creatureinfo3['level'])
{
$firstmod = $playerinfo3['level'] - $creatureinfo3['level'];
$secondmod = $firstmod * 10 ;
if ($secondmod > 90){$secondmod = 90;}
$thirdmod = ($secondmod / 100) * $creatureinfo3['exper'];
$totalexper =$creatureinfo3['exper'] - $thirdmod;
}
else
{
$firstmod = $creatureinfo3['level'] - $playerinfo3['level'];
$secondmod = $firstmod * 10 ;
if ($secondmod > 90){$secondmod = 90;}
$thirdmod = ($secondmod / 100) * $creatureinfo3['exper'];
$totalexper =$creatureinfo3['exper'] + $thirdmod;
}
$totalexper = (int)$totalexper;
echo "<br><b><big>You gain " . $totalexper . " experience and " . $gold . " gold.</b></big><br>";
$updateplayer="update players set exper=exper+'$totalexper', gold=gold+'$gold', creature=0 where name='$player'";
mysql_query($updateplayer) or die("Could not update player");
echo "<a href='battle.php'>Go Back";
exit;
}
$playerpass = 0;
$updateplayer="update players set spoints=spoints-'$spoints'where name='$player'";
mysql_query($updateplayer) or die("Could not update player");
$updatecreaturef="update creatures set hpoints='$newcreaturehp' where name='$creature' limit 1";
mysql_query($updatecreaturef) or die("Could not update creature");
}}
}
if ($playerpass != 1)
{
$weaponinfo="SELECT * from playerweapons where equip=1 AND pid='$pid'";
$weaponinfo2=mysql_query( $weaponinfo) or die("could not get player weapon!");
$weaponinfo3=mysql_fetch_array( $weaponinfo2);
$playerattack = rand(1,20) + $playerattack + $weaponinfo3['rating'];
//////////////////////////////////////////////////////
$creaturedefense = rand(1,20) + $creaturedefense;
//echo $playerinfo3['name'] . "'s Attack roll is " . $playerattack . "<br>";
//echo $creature . "'s defense roll is " . $creaturedefense. "<br>";
if ($playerattack > $creaturedefense)
{
echo $playerinfo3['name'] . " " . $weaponinfo3['hittext'] . " and hits!<br>";
$weapdamage = $weaponinfo3['damage'];
$halfdamage = $weaponinfo3['damage'] / 2;
$playerdamage = rand($halfdamage,$weapdamage);
$newcreaturehp = $creaturehp - $playerdamage;
echo "For " . $playerdamage . " points of damage. <br>";
if ($newcreaturehp < 1)
{
echo "The " . $creature . " has been killed";
$crmaxhp=$creatureinfo3['maxhpoints'];
$updatecreature="update creatures set hpoints='$crmaxhp' where name='$creature' limit 1";
mysql_query($updatecreature) or die("Could not update creature");
if ($playerinfo3['level'] > $creatureinfo3['level'])
{
$firstmod = $playerinfo3['level'] - $creatureinfo3['level'];
$secondmod = $firstmod * 100 ;
if ($secondmod > 90){$secondmod = 90;}
$thirdmod = ($secondmod / 100) * $creatureinfo3['exper'];
$totalexper =$creatureinfo3['exper'] - $thirdmod;
}
else
{
$firstmod = $creatureinfo3['level'] - $playerinfo3['level'];
$secondmod = $firstmod * 10 ;
if ($secondmod > 90){$secondmod = 90;}
$thirdmod = ($secondmod / 100) * $creatureinfo3['exper'];
$totalexper =$creatureinfo3['exper'] + $thirdmod;
}
$totalexper = (int)$totalexper;
echo "<br><b><big>You gain " . $totalexper . " experience and " . $gold . " gold.</b></big><br>";
$updateplayer="update players set exper=exper+'$totalexper', gold=gold+'$gold', creature=0 where name='$player'";
mysql_query($updateplayer) or die("Could not update player");
echo "<a href='battle.php'>Go Back";
exit;
}
$updatecreature="update creatures set hpoints='$newcreaturehp' where name='$creature' limit 1";
mysql_query($updatecreature) or die("Could not update creature");
}
else
{
echo $playerinfo3['name'] . " " . $weaponinfo3['hittext'] . " and misses!";
}}
?>
</div>
<div id="creature">
<?php
//////////////////////creatures turn //////////////////
echo "<center><u> " . $creature . "'s Attack</u><br>";
///////hit location//////////////////////////////////////
$randlocation = rand(0,100);
if ($randlocation <= 15)
{$location = "arms";}
elseif ($randlocation <= 70)
{$location = "chest";}
elseif ($randlocation <= 90)
{$location = "legs";}
elseif ($randlocation <= 100)
{$location = "head";}
$playerarmor="SELECT * from playerarmor where pid='$pid' AND location='$location' AND equip=1";
$playerarmor2=mysql_query($playerarmor) or die("Could not get player armmor");
$playerarmor3=mysql_fetch_array($playerarmor2);
$noarmor = 0;
if(is_null($playerarmor3['rating']))
{
$playerarmor3['rating'] = 0;
$noarmor = 1;
}
////////////////////////////////////
$creatureattack = rand(1,20) + $creatureattack;
$playerdefense = rand(1,20) + $playerdefense + $playerarmor3['rating'];
//echo $creature . "'s Attack roll is " . $creatureattack . "<br>";
//echo $playerinfo3['name'] . "'s defense roll is " . $playerdefense . "<br>";
if ($creatureattack > $playerdefense)
{
echo $creature . " hits for a strike to the " . $location . "<br>";
$creaturedamage = rand(1,6);
$newplayerhp = $playerhp - $creaturedamage;
echo "For " . $creaturedamage . " points of damage. <br>";
if ($noarmor == 1)
{
".<br>";
echo "You are not wearing armor on your " . $location . ".<br>";
$extradamage = rand(1,3);
echo "You take an additional " . $extradamage . " points of damage.<br>";
$newplayerhp = $newplayerhp - $extradamage;
$updateplayer="update players set hpoints='$newplayerhp' where name='$player'";
mysql_query($updateplayer) or die("Could not update player");
}
if ($newplayerhp < 1)
{
echo $playerinfo3['name'] . " has been killed<br>";
echo "<a href='index.php'>Back to town.";
exit;
}
}
else
{
echo $creature . " misses!";
}
echo "<br><br><a href='battle.php?creature=$creature'>Fucke'm up some more!";
?>
</div>