我正在尝试编写一个PHP项目。在这个站点中,人们可以通过登录共享照片,照片显示在index.php中,这是该程序的主页面。现在我有三个数据库用户图像和消息。我可以通过保存有关照片的信息,让用户分享他们的照片,然后从图像表中的数据库中获取它们。现在我想提供一个用户在主页面上对照片做出评论。有textarea和在图像下方发布按钮。但是当我对图像发表评论时,它不仅注册了相关的图片ID,还注册了其他图片ID。为什么会发生这种情况?
这是php代码的一部分,我还打开并关闭了必要部分中的数据库连接。
while($x < mysql_num_rows($result))
{
$picid=mysql_result($result, $x, 'id');
$name=mysql_result($result, $x, 'imageName');
$date=mysql_result($result, $x, 'imageDate');
echo "<div><img src = 'upload/$name' height='300 width='300' /></div>";
echo "Name: $name Date: $date";
echo "<br/>";
?>
<p>Post a Comment</p>
<form action="<?= $_SERVER['PHP_SELF']?>" method="POST">
<textarea name="message" cols="70" rows="6" placeholder="Enter a comment">
</textarea><br/><br/><br/><br/><br/><br/>
<input type="submit" name="submit" value="Post" style="float:left"><br/><br/>
<br/>
</form>
<!--<textarea name="message" cols="70" rows="6" ></textarea><br/><br/><br/><br/>
<br/><br/>-->
<?php
extract($_REQUEST);
if (isset($submit)) {
$y=0;
$email=$_SESSION['email'];
$asdf = mysql_query("SELECT * from users WHERE email='$email'");
//var_dump(mysql_error());
while( $y<mysql_num_rows($asdf) )
{
$iduser=mysql_result($asdf,$y,'id');
$y++;
}
echo "$iduser";
$sql ="INSERT INTO messages (id_user, message,picid) VALUES
('$iduser','$message','$picid');";
$rslt = mysql_query($sql);
if ($rslt== false) {
echo '<p>Error: cannot execute query</p>';
}
} ?>
<?php
$x++;
}
答案 0 :(得分:0)
更好的你应该尝试AJAx评论系统,你可能因为这个代码而遇到这个问题 -
$asdf = mysql_query("SELECT * from users WHERE email='$email'");
//var_dump(mysql_error());
while( $y<mysql_num_rows($asdf) )
{
$iduser=mysql_result($asdf,$y,'id');
$y++;
}
答案 1 :(得分:0)
您正在使用while循环while($x < mysql_num_rows($result))
,它会插入直到条件结束。
在$picid =mysql_result($result, $x, 'id');
中提供所有$ picid并且因为isset($ submit)为真,程序将在所有行中插入消息。
答案 2 :(得分:0)
首先,您在while
循环中执行INSERT语句。这意味着当他们提交表单时,您的输出循环(顶部while
)将检索记录,并且在构建HTML输出时,它将为每个输出记录执行INSERT 。当$picid
经过输出记录时,while
变量被设置为下一个图片ID。但INSERT
正在该循环中运行,并为每个$picid
添加相同的评论。
让我们不要说有更清晰的方法来编写这段代码。要么你是一个新手程序员,要么对项目的结构没有多少控制 - 这两者都不是负面的事情,但让我们坚持你现在所拥有的。
即使在您拥有的结构中,此代码也需要进行重大更改。
while($row < mysql_fetch_assoc($result))
{
// $row is an array with all the columns,
// No need to keep calling a separate function to get the columns.
//
//$picid=mysql_result($result, $x, 'id');
//$name=mysql_result($result, $x, 'imageName');
//$date=mysql_result($result, $x, 'imageDate');
echo "<div><img src = 'upload/{$row['name']}' height='300 width='300' /></div>";
echo "Name: {$row['name']} Date: {$row['date']}";
echo "<br/>";
// Notice the new <input> tag in the FORM below.
// You still need to identify which picid to add the message to.
?>
<p>Post a Comment</p>
<form action="<?= $_SERVER['PHP_SELF']?>" method="POST">
<input type="hidden" name="picid" value="<?= $row['id']; ?>"/>
<textarea name="message" cols="70" rows="6" placeholder="Enter a comment">
</textarea>
<br/><br/><br/><br/><br/><br/>
<input type="submit" name="submit" value="Post" style="float:left">
<br/><br/><br/>
</form>
<?php
} // END RESULTS OUTPUT (while)
// BEGIN SUBMIT DATA PROCESSING
if (isset($submit))
{
// This is not recommended, but it's not the point here.
extract($_REQUEST);
//$y=0;
$email=$_SESSION['email'];
$result = mysql_query("SELECT * from users WHERE email='{$email}'");
// Unless an email can have multiple records in [users] table,
// the loop is unnecessary.
//while ($row = mysql_fetch_assoc($result))
//{
// $row is an array with all the columns,
// No need to keep calling a separate function to get the columns.
// $iduser=mysql_result($asdf,$y,'id');
// $y++;
//}
// Instead... This automatically gets the first row from $result.
$row = mysql_fetch_assoc($result);
$iduser = $row['id'];
//echo "$iduser";
$sql ="INSERT INTO messages (id_user, message,picid) VALUES
('{$iduser}','{$message}','{$picid}');";
$result = mysql_query($sql);
if ($result === false)
{
echo '<p>Error: cannot execute query</p>';
}
} // END IF isset($submit)
?>
这是未经测试的,但希望它会让你朝着更好的方向前进。
答案 3 :(得分:0)
试试这个:
while($x < mysql_num_rows($result)) {
$picid=mysql_result($result, $x, 'id');
$name=mysql_result($result, $x, 'imageName');
$date=mysql_result($result, $x, 'imageDate');
echo "<div><img src = 'upload/$name' height='300 width='300' /></div>";
echo "Name: $name Date: $date";
echo "<br/>";
?>
<p>Post a Comment</p>
<form action="<?= $_SERVER['PHP_SELF']?>" method="POST">
<textarea name="message" cols="70" rows="6" placeholder="Enter a comment">
</textarea><br/><br/><br/><br/><br/><br/>
<input tyep='hidden' name='pic_id' value='<?php= $picid; ?>' />
<input type="submit" name="submit" value="Post" style="float:left"><br/><br/>
<br/>
</form>
<?php
$x++;
}
?>
这是生成表单和图片,当您提交表单时,您将获得pic_id
中的message
和post
,并且您已经拥有{{1}在email
。
现在,尝试插入。