php中的Foreach循环和变量

php中的Foreach循环和变量,php,Php,新年快乐。我对php还是新手,所以我需要你的帮助。我正在设计一个帖子页面,在这里访问者可以发布任何东西。我几乎完成了,但是当我在页面上发布一些东西时,新的帖子超过了旧的帖子,我确定我需要使用foreach循环,但我的问题是我无法定义$posting变量 我的错,但我真的需要你们帮我。这是我的代码: <?php include 'connect.php'; ?> <?php if (isset($_POST['submit'])) { $title = $_POST['

新年快乐。我对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
}
?>


检查您的id是否为自动递增,如果不是,则将其设置为自动递增

然后尝试在页面中更改此代码:

mysql_query("INSERT INTO prayer VALUES('', '".$title."', '".$post."', '".$name."')");


检查您的id是否为自动递增,如果不是,则将其设置为自动递增

然后尝试在页面中更改此代码:

mysql_query("INSERT INTO prayer VALUES('', '".$title."', '".$post."', '".$name."')");


您的代码有几个问题。首先,当您应该使用mysqli\u查询时,您使用mysql\u查询,相同的mysql\u fetch\u assoc,应该是mysqli\u fetch\u assoc——请将mysql\u*的所有引用替换为mysqli\u*。第二个是在函数内部运行查询。第三个问题是你的查询是错误的。而且。。。在使用foreach的方式中,您不需要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\u查询的原因是不再支持mysql\u查询。在函数内部,您需要使用特殊关键字
global
来获取数据库连接的变量(在本例中,我将其设置为$db,但您可能会将其调用其他名称)

基本上,
global
是一个PHP关键字,它允许您访问在全局范围内定义的变量

[…]在用户定义的函数中引入了局部函数范围。默认情况下,函数中使用的任何变量都限制在局部函数范围内

最后。。您没有正确定义变量$POST

您可以通过取消对foreach的呼叫来解决此问题,替换此行:

foreach ($posting as $posting) {
使用这两行代码:

$q = mysqli_query($db, "SELECT * FROM prayer");
while ($posting = mysqli_fetch_assoc($q)) {

$posting变量未定义,看起来您实际上只是想查询数据库并从祈祷表中获取所有行。

您的代码有几个问题。首先,当您应该使用mysqli\u查询时,您使用mysql\u查询,相同的mysql\u fetch\u assoc,应该是mysqli\u fetch\u assoc——请将mysql\u*的所有引用替换为mysqli\u*。第二个是在函数内部运行查询。第三个问题是你的查询是错误的。而且。。。在使用foreach的方式中,您不需要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\u查询的原因是不再支持mysql\u查询。在函数内部,您需要使用特殊关键字
global
来获取数据库连接的变量(在本例中,我将其设置为$db,但您可能会将其调用其他名称)

基本上,
global
是一个PHP关键字,它允许您访问在全局范围内定义的变量

[…]在用户定义的函数中引入了局部函数范围。默认情况下,函数中使用的任何变量都限制在局部函数范围内

最后。。您没有正确定义变量$POST

您可以通过取消对foreach的呼叫来解决此问题,替换此行:

foreach ($posting as $posting) {
使用这两行代码:

$q = mysqli_query($db, "SELECT * FROM prayer");
while ($posting = mysqli_fetch_assoc($q)) {

$posting变量未定义,看起来您实际上只是想查询数据库并从祈祷表中获取所有行。

此查询将在MYSQL中向您发出警告,但由于PK自动递增而执行:

mysql_query("INSERT INTO prayer 
            VALUES('', '" . $title . "', '" . $post . "', '" . $name . "')");
mysql_query("INSERT INTO prayer (title,post,name) 
             VALUES('".$title."','".$post."','".$name."')");
解决方案是在此查询中定义列名,如果您的id为PK,则不使用,因为它会自动递增:

mysql_query("INSERT INTO prayer 
            VALUES('', '" . $title . "', '" . $post . "', '" . $name . "')");
mysql_query("INSERT INTO prayer (title,post,name) 
             VALUES('".$title."','".$post."','".$name."')");

此查询将在MYSQL中向您发出警告,但由于PK自动递增而执行:

mysql_query("INSERT INTO prayer 
            VALUES('', '" . $title . "', '" . $post . "', '" . $name . "')");
mysql_query("INSERT INTO prayer (title,post,name) 
             VALUES('".$title."','".$post."','".$name."')");
解决方案是在此查询中定义列名,如果您的id为PK,则不使用,因为它会自动递增:

mysql_query("INSERT INTO prayer 
            VALUES('', '" . $title . "', '" . $post . "', '" . $name . "')");
mysql_query("INSERT INTO prayer (title,post,name) 
             VALUES('".$title."','".$post."','".$name."')");

你能检查一下你的数据库字段“id”是自动递增的吗?突击测验:我用标题
”填写你的表格;放下桌子祈祷,你认为会发生什么?第二个小测验:
msql.
函数是否已弃用?(提示:“哦,上帝”和“这很容易查找”)是的,这不适用于标题,但首先我们需要帮助他解决基本问题,然后我们去缓和下一步@Mike'Pomax'Kamermansmysql_*函数不是不推荐的,它们曾经是。mysql_uu函数已从中删除PHP@bansi,在仍然流行(并已维护)的5.*分支中已弃用,但是的:完全从PHP7中删除,这一点很好。您能检查一下您的数据库字段“id”是否为自动增量吗?突击测验:我用标题填写您的表单
);放下桌子祈祷,你认为会发生什么?第二个小测验:
msql.
函数是否已弃用?(提示:“哦,上帝”和“这很容易查找”)是的,这不适用于标题,但首先我们需要帮助他解决基本问题,然后我们去缓和下一步@Mike'Pomax'Kamermansmysql_*函数不是不推荐的,它们曾经是。mysql_uu函数已从中删除PHP@bansi,在仍然流行(并维护)的5.*分支中被弃用,但是是的:完全从PHP7中删除,这一点很好