在PHP中查看/编辑/删除

I got a system where users have to register and login to my website to add recipes in which the non-registered users and obviously registered users can view from the front end. What I have done so far is, I have done the registration page, login page, and an 'my account' page for users to login and submit recipes. Everything works but now I am trying to add another functionality in my system whereby users can edit/delete their own recipes. The way I've done the login is by creating a session which holds the username rather then outputting it in the url like so: www.cooking.com/my-account.php?user_id=26.

I want the same sort of thing but this time I want the recipes to be stored in a session rather then the recipe id being shown on the url. I am clueless in how to do this. I have a 'starters' table in mysql with the following fields:

username ()
recipename
ingredients
method
time
id

Once you login and want to edit/delete the recipes you have uploaded, there is a table shown which contains all the recipes you uploaded. What i want is for the user to click on any recipe and it shall take the user to another page where it allows the user to edit their stuff.

I have tried this but with no success. The following are the codes I have used with the error displaying once clicked on edit:

EDIT STARTERS PAGE (editstarters.php)

<?php
session_start();
require_once '../database.php';
if (isset($_SESSION['myusername'])){
echo "Welcome ". $_SESSION['myusername'];
}
?>
<br /><br />You have uploaded the following starters:
<br /><BR />
<?php
include '../database.php';

$userid = $_SESSION["myusername"];

$result = mysql_query("SELECT * FROM starters WHERE username = '". $_SESSION['myusername']."' ");

echo "<table border='1'><table border width=65%><tr><th>Recipie Name</th><th>Ingredients</th><th>Method</th><th>Time</th></tr>";
while($getrecipie = mysql_fetch_array($result))
{
        echo "<tr>";
        echo "<td>" . $recipiename = $getrecipie['recipename']. "</td>";
        echo "<td>" . $ingredients = $getrecipie['ingredients']. "</td>";
        echo "<td>" . $method = $getrecipie['method']. "</td>";
        echo "<td>" . $time = $getrecipie['time']. 'minutes'."</td>";

        ?>
      <td><a href = "startersedited.php?rec=<?php echo $getrecipie['id'] ?>" >Edit</a></td>
      <td><a href = "DELETE1.php?rec=<?php echo $getrecipie['Recipie_ID'] ?>&id=<?php echo $user_id?>" >Delete</a></td>
      <!--using the stu_id value in the URL to select the correct data when wego to the relevant pages -->
      <?php
}
echo "</tr>";
echo "</table>";
?>

STARTERS EDITED PAGE (startersedited.php)

<?php
session_start();
require_once '../database.php';
if (isset($_SESSION['myusername'])){
echo "Welcome ". $_SESSION['myusername'];
}
?>
<br /><br />EDIT/DELETE YOUR STARTERS
<br /><BR />
<?php
include '../database.php';

$userid = $_SESSION["myusername"];

$result = mysql_query("SELECT * FROM starters WHERE username = '". $_SESSION['myusername']."' AND recipie_id='{$_GET['rec']}'");

$getrecipie = mysql_fetch_array($result);
$recipie = $getrecipie['recipename'];
$ingredients = $getrecipie['ingredients'];
$method = $getrecipie['method'];
$time = $getrecipie['time'];
?>
 <h1>Edit Recipies</h1>
      <p>&nbsp;</p>
      <form name="form1" method="post" action="startereditsuccess.php?rec=<?php echo $_GET['id']?>">
        <table width="609" height="250" border="0">
          <tr> 
            <td width="155">Recipie Name</td>
            <td width="347"><label for="recipiename"></label> <input type="text" name="recipename"  value="<? echo $recipe ?>" id="recipename" > 
            </td>
          </tr>
          <tr> 
            <td>Ingredients</td>
            <td><label for="ingredients"></label> <textarea name="ingredients" cols="50" rows="5" id="ingredients"><? echo $ingredients ?></textarea></td>
          </tr>
          <tr> 
            <td>Method</td>
            <td><label for="method"></label> <textarea name="method" cols="50" rows="5" id="method"><? echo $method ?></textarea></td>
          </tr>
          <tr> 
            <td>Time</td>
            <td><label for="time"></label> <input type="text" name="time" value="<? echo $time ?>" id="time"></td>
          </tr>
        </table>
        <p> 
          <input type="submit" name="update" id="update" value="Update">
        </p>
      </form>

This is the error I get:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/jahedhus/public_html/cook/editdelete/startersedited.php on line 55

Please help me, I am LOST!

First off, don't shout in your posting titles. It's not necessary.

Second, we don't need a wall of code showing everything, when the actual only relevant bit is your error message. That particular error message means that your query has failed (probably due to a syntax error), which means mysql_query() has returned its usual boolean FALSE, and you didn't check for that. You used this false as a statement handle and tried to fetch a row from it, which has caused the actual error message.

As a general rule, NEVER assume that a database query succeeds. Even if the query string itself is 100% syntactically valid, there's many many other reasons that can cause it to fail.

Your basic MySQL query code structure should be:

$sql = "...";
$result = mysql_query($sql) or die(mysql_error());

This is good for debugging/development: if a query fails, it'll halt the script immediately and tell you why. For production code, you'd want something a bit more robust, rather than sending a long SQL error message to your users.

Your call to mysql_query() in startersedited.php at this line:

$result = mysql_query("SELECT * FROM starters WHERE username = '". $_SESSION['myusername']."' AND recipie_id='{$_GET['rec']}'");

is returning boolean FALSE, because an error has occurred. You should add some error handling code to deal with this whenever you call mysql_query(), for example:

$result = mysql_query("SELECT * FROM starters WHERE username = '". $_SESSION['myusername']."' AND recipie_id='{$_GET['rec']}'");
if($result === FALSE) {
    echo "Database Error: ".mysql_error() ;
    exit ;
}
$getrecipie = mysql_fetch_array($result);

The above is probably more useful for development error checking, in a production site you would probably want to capture the error and display something more graceful.

Also, I noticed you are calling require_once '../database.php'; and include '../database.php';. You don't need both, just the first will do.