Dark57 Posted April 5, 2010 Share Posted April 5, 2010 Sorry for two basic questions in one day but as I'm writing this I find myself at a loss as to how I am supposed to detect this form of input. This is the page you start on: <html> <body> <?php $con = mysql_connect("127.0.0.1","xxxx","xxxxxxxxxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("train_db1", $con); $result = mysql_query("SELECT * FROM Persons"); echo "<table border='1'> <tr> <th>Strength</th> <th>Defense</th> <th>Speed</th> </tr>"; $row = mysql_fetch_array($result); echo "<tr>"; echo "<td>" . $row['str'] . "</td>"; echo "<td>" . $row['def'] . "</td>"; echo "<td>" . $row['spd'] . "</td>"; echo "</tr>"; echo "<tr> <td><form method='post' action='train.php'><input type='submit' name='full_strength' value='All Strength' action='train.php'></form></td> <td><form method='post' action='train.php'><input type='submit' name='full_defense' value='All Defense' action='train.php'></form></td> <td><form method='post' action='train.php'><input type='submit' name='full_speed' value='All Speed' action='train.php'></form></td></tr>"; echo "</table>"; ?> </body> </html> And this is the part that it will redirect you to once you click a button so it can "train" the stat you choose. What I am having a problem is how I'm trying to detect this type of input. I was experimenting and was trying to figure out how I would detect this. Right now its training and adding to the database but no matter what button you push it only adds to the strength stat. <html> <body> <?php $doACTION = $_REQUEST['full_strength']; if (!$doACTION) { $doACTION = $_REQUEST['full_defense']; if (!$doACTION) { $doACTION = $_REQUEST['full_speed']; } } $train = rand(1,20); $con = mysql_connect("127.0.0.1","xxxx","xxxxxxxxxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("train_db1", $con); $result = mysql_query("SELECT * FROM Persons"); $row = mysql_fetch_array($result); if ($doACTION = 'full_strength') { $train = $train + $row['str']; mysql_query("UPDATE Persons SET str ='$train' WHERE id='1'"); } elseif ($doACTION='full_defense') { $train = $train + $row['def']; mysql_query("UPDATE Persons SET def ='$train' WHERE id='1'"); } elseif ($doACTION='full_speed') { $train = $train + $row['spd']; mysql_query("UPDATE Persons SET spd ='$train' WHERE id='1'"); } mysql_close($con); header( 'Location:read.php' ) ; ?> </body> </html> Any help or insight on the problem would be much appreciated. Link to comment https://forums.phpfreaks.com/topic/197586-input-detection-fairly-simple-but-im-lost/ Share on other sites More sharing options...
mikesta707 Posted April 5, 2010 Share Posted April 5, 2010 the problem is here if ($doACTION = 'full_strength') you are doing an assignment there, and because you assign $doACTION to a non empty string, the assignment returns a value that equates to true. You want to do a comparison (==). if ($doACTION == 'full_strength') same idea with the subsequent if statements btw, if you want to check if something is set, instead of doing something like $var = $_REQUEST['var'] if (!$var) ... you can do if (isset($_REQUEST['var'])){ $var = $_REQUEST['var']; } Link to comment https://forums.phpfreaks.com/topic/197586-input-detection-fairly-simple-but-im-lost/#findComment-1036979 Share on other sites More sharing options...
Dark57 Posted April 5, 2010 Author Share Posted April 5, 2010 Well I tried what you said. It's not doing anything now. <html> <body> <?php //$doACTION = $_REQUEST['full_strength']; //if (!$doACTION) // { $doACTION = $_REQUEST['full_defense']; // if (!$doACTION) // { // $doACTION = $_REQUEST['full_speed']; // } // } if (isset($_REQUEST['full_strength'])) { $doACTION = $_REQUEST['full_strength']; } if (isset($_REQUEST['full_defense'])) { $doACTION = $_REQUEST['full_defense']; } if (isset($_REQUEST['full_speed'])) { $doACTION = $_REQUEST['full_speed']; } $train = rand(1,20); $con = mysql_connect("127.0.0.1","xxxx","xxxxxxxxxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("train_db1", $con); $result = mysql_query("SELECT * FROM Persons"); $row = mysql_fetch_array($result); if ($doACTION == 'full_strength') { $train = $train + $row['str']; mysql_query("UPDATE Persons SET str ='$train' WHERE id='1'"); } elseif ($doACTION=='full_defense') { $train = $train + $row['def']; mysql_query("UPDATE Persons SET def ='$train' WHERE id='1'"); } elseif ($doACTION=='full_speed') { $train = $train + $row['spd']; mysql_query("UPDATE Persons SET spd ='$train' WHERE id='1'"); } mysql_close($con); header( 'Location:read.php' ) ; ?> </body> </html> Link to comment https://forums.phpfreaks.com/topic/197586-input-detection-fairly-simple-but-im-lost/#findComment-1036988 Share on other sites More sharing options...
mikesta707 Posted April 5, 2010 Share Posted April 5, 2010 try echoing $doACTION before the if statements to see what it has. If its empty, try doing a print_r on $_REQUEST. if that doesn't work for some reason, try using $_POST instead of $_REQUEST (since your forms send the data through $_POST) Link to comment https://forums.phpfreaks.com/topic/197586-input-detection-fairly-simple-but-im-lost/#findComment-1036998 Share on other sites More sharing options...
Dark57 Posted April 5, 2010 Author Share Posted April 5, 2010 I changed this: if (isset($_REQUEST['full_strength'])) { $doACTION = $_REQUEST['full_strength']; } if (isset($_REQUEST['full_defense'])) { $doACTION = $_REQUEST['full_defense']; } if (isset($_REQUEST['full_speed'])) { $doACTION = $_REQUEST['full_speed']; } To this: if (isset($_REQUEST['full_strength'])) { $doACTION = 1; } if (isset($_REQUEST['full_defense'])) { $doACTION = 2; } if (isset($_REQUEST['full_speed'])) { $doACTION = 3; } And then changed the if statements at the bottom and now it works perfectly. Thanks for the help, that isset will help me in the future I'm sure Link to comment https://forums.phpfreaks.com/topic/197586-input-detection-fairly-simple-but-im-lost/#findComment-1037000 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.