祝新年快乐。我还是php的新手,所以我需要你的帮助。我正在设计一个帖子页面,访问者可以发布任何内容。我几乎通过,但是当我在页面上发布内容时,新帖子会超过旧帖子,我确定我需要使用foreach
循环,但我的问题是我无法定义$posting
变量。
我很糟糕,但我真的需要你们帮助我。这是我的编码:
<?php
include 'connect.php';
?>
<?php
if (isset($_POST['submit'])) {
$title = $_POST['title'];
$post = $_POST['post'];
$name = $_POST['name'];
if (empty($title) or empty($post) or empty($name)) {
$message = "Please fill in all fields";
} else {
mysql_query("INSERT INTO prayer VALUES('', '" . $title . "', '" . $post . "', '" . $name . "')");
$message = "PRAYER REQUEST SUBMITTED!!!";
}
echo"$message";
}
?>
<form method="post" action="prayerpage.php">
<table width="80%">
<tr>
<td><b>Name:</b><input type="text" name="name" />
<b>Title:</b><input type="text" name="title" /></td>
</tr>
<tr>
<td><b>Prayer<br>Request:</b></td>
<td><textarea name='post' rows='10' cols='40'></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="SUMIT"/></td>
</tr>
</table>
</form>
<hr width="70%">
<?php
function postid($id) {
$array = array();
$q = mysql_query("SLECT * FROM prayer WHERE id='.$id.'");
while ($r = mysql_fetch_assoc($q)) {
$array['id'] = $r['id'];
$array['title'] = $r['title'];
$array['name'] = $r['name'];
$array['post'] = $r['post'];
}
return $array;
}
foreach ($posting as $posting) {
?>
<table width="60%">
<tr>
<td><font color="blue"><?php echo $title; ?></font></td>
</tr>
<tr>
<td><?php echo $post; ?> - <font color="blue"><?php echo $name; ?></font> </td>
</tr>
</table>
<hr noshade width="50%">
<?php
}
?>
并且我还需要代码来使帖子成为其页面的链接
答案 0 :(得分:0)
如果没有,请检查您的ID是否为自动增量,然后将其自动增量
然后尝试在您的页面中更改此代码:
mysql_query("INSERT INTO prayer VALUES('', '".$title."', '".$post."', '".$name."')");
到
mysql_query("INSERT INTO prayer VALUES('".$title."', '".$post."', '".$name."')");
答案 1 :(得分:0)
您的代码存在一些问题。第一个是mysql_query,当你应该使用mysqli_query时,同样的mysql_fetch_assoc应该是mysqli_fetch_assoc - 请用mysqli_ *替换mysql_ *的所有引用。第二个是你在函数内部运行查询。第三个问题是你的查询错了。而且......你不需要像使用它一样使用foreach。
function postid($id) {
global $db;
$array = array();
$id = (int)$id; // cast as int to prevent SQL injection
$q = mysqli_query($db, "SELECT * FROM prayer WHERE id=$id");
while ($r = mysqli_fetch_assoc($q)) {
$array['id'] = $r['id'];
$array['title'] = $r['title'];
$array['name'] = $r['name'];
$array['post'] = $r['post'];
}
return $array;
}
您输错了,SELECT
而不是SLECT
。当你在双引号字符串中时,你需要连接变量。我会链接到关于它的PHP文档,但不是很清楚。基本上以下几行都会产生相同的输出:
$amazing = "neato!";
$example1 = "This is my variable: $amazing"; // Output: This is my variable: neato!
$example2 = 'This is my variable: ' . $amazing; // Output: This is my variable: neato!
$example3 = "This is my variable: " . $amazing; // Output: This is my variable: neato!
注意如何将变量放在带双引号的字符串中。但你不能这样做:
$doesNotWork = 'This is my variable: $amazing'; // Output: This is my variable: $amazing
$doesNotWork = "This is my variable: '.$amazing.'"; // Output: This is my variable: '.$amazing.'
你应该使用mysqli_query的原因是因为不再支持mysql_query。在您的函数内部,您需要使用特殊关键字global
来获取数据库连接的变量(我在示例中将其设置为$ db,但您可能会将其称为其他内容)。
基本上,global
是一个PHP关键字,允许您访问已在全局范围内定义的变量。 Read about in the documentation by clicking here
[..]在用户定义的函数中引入了本地函数作用域。函数内使用的任何变量默认限制为本地函数范围。
最后..你没有正确定义变量$ post。
您可以通过删除对foreach的调用来解决此问题,替换此行:
foreach ($posting as $posting) {
这两行:
$q = mysqli_query($db, "SELECT * FROM prayer");
while ($posting = mysqli_fetch_assoc($q)) {
你的$ posts变量是未定义的,看起来你实际上只是想查询数据库并从祈祷表中获取所有行。
答案 2 :(得分:0)
此查询将在MYSQL中为您提供警告,但由于PK自动增量而执行:
mysql_query("INSERT INTO prayer
VALUES('', '" . $title . "', '" . $post . "', '" . $name . "')");
解决方法是在此查询中定义列名称,如果您的ID为PK而不是因为其自动增量而使用:
mysql_query("INSERT INTO prayer (title,post,name)
VALUES('".$title."','".$post."','".$name."')");