[英]Foreach loop and variables in php
新年快樂。 我還是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."')");
至
mysql_query("INSERT INTO prayer VALUES('".$title."', '".$post."', '".$name."')");
您的代碼有幾個問題。 第一個是當您應該使用mysqli_query時使用mysql_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
not 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關鍵字,它將允許您訪問已在全局范圍中定義的變量。 點擊此處閱讀文檔
[..]在用戶定義的函數中引入了局部函數范圍。 默認情況下,函數內部使用的任何變量都限於局部函數范圍。
最后..您沒有正確定義變量$ posting。
您可以通過擺脫對foreach的調用來解決此問題,替換此行:
foreach ($posting as $posting) {
用這2行:
$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 . "')");
解決方案是在此查詢中定義列名稱,如果您的ID為PK,則定義為不使用,因為其自動遞增:
mysql_query("INSERT INTO prayer (title,post,name)
VALUES('".$title."','".$post."','".$name."')");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.