查看/编辑/删除PHP


View/Edit/Delete in PHP

我得到了一个系统,用户必须注册并登录到我的网站添加食谱,其中非注册用户和显然注册用户可以从前端查看。到目前为止,我所做的是,我已经完成了注册页面,登录页面和"我的帐户"页面,供用户登录和提交食谱。一切工作,但现在我试图在我的系统中添加另一个功能,用户可以编辑/删除自己的食谱。我完成登录的方式是通过创建一个会话来保存用户名,而不是像这样在url中输出:www.cooking.com/my-account.php?user_id=26.

我想要同样的东西,但这次我希望食谱存储在会话中,而不是在url上显示的食谱id。我不知道如何做这件事。我在mysql中有一个'starters'表,包含以下字段:

username ()
recipename
ingredients
method
time
id

一旦你登录并想编辑/删除你上传的食谱,会显示一个表,其中包含你上传的所有食谱。我想要的是让用户点击任何食谱,它应该带用户到另一个页面,它允许用户编辑他们的东西。

我试过了,但是没有成功。以下是我使用的代码,一旦点击编辑,错误显示:

编辑起始页(editstarts .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>";
?>

starter编辑页(startersededit .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>

这是我得到的错误:

警告:mysql_fetch_array()期望参数1为resource, boolean,在/home/jahedhus_public_html/cook/editdelete/starterseded .php第55行

请帮帮我,我迷路了!

首先,不要在你的帖子标题中大喊大叫。没必要。

第二,我们不需要一堆代码来显示所有的东西,当实际唯一相关的位是你的错误消息时。这个特定的错误消息意味着您的查询失败了(可能是由于语法错误),这意味着mysql_query()返回了它通常的布尔值FALSE,而您没有检查它。您使用这个false作为语句句柄,并试图从中获取一行,这导致了实际的错误消息。

作为一般规则,永远不要假设数据库查询成功。即使查询字符串本身在语法上是100%有效的,也有许多其他原因可能导致查询失败。

基本的MySQL查询代码结构应该是:

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

这对调试/开发很有好处:如果查询失败,它会立即停止脚本并告诉您原因。对于产品代码,您需要一些更健壮的东西,而不是向用户发送长SQL错误消息。

在startsededit .php中调用mysql_query():

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

返回布尔值FALSE,因为发生了错误。当你调用mysql_query()时,你应该添加一些错误处理代码来处理这个,例如:

$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);

上面的代码可能对开发错误检查更有用,在生产站点中,您可能希望捕获错误并显示更优雅的内容。

另外,我注意到你正在呼叫require_once '../database.php';include '../database.php';。你不需要两者,只要第一个就可以了。

相关文章: