[英]Why does my php foreach loop return only the last value of the array?
[英]why does my PHP foreach loop is inserting wrong value on mysql?
我在 PHP 中的 foreach 循環插入了錯誤的值。 我有一個表格,它使用帶有 jquery 的 html 表單收集有關一本書的數據。 在我插入數組值的表中,這是我的表單代碼。
表單.php
include_once 'config/database.php';
include_once 'config/bookclass.php';
$database = new Database();
$db = $database->getConnection();
$book = new Book($db);
if($_POST){
$book->book_title=$_POST['book_title'];
$book->number_of_ page=$_POST['number_of_ page'];
$book->genre=$_POST['genre'];
$book->author=$_POST['author'];
$book->type=$_POST['type'];
$book->publication=$_POST['publication'];
if($book->book()){
echo "saved";
}
else{
echo "not saved";
}
}
這是我用來插入數據的 bookclass.php 代碼
public function book(){
foreach($this-> book_title AS $this->key => $this->value) {
$query = "INSERT INTO
table_a
SET
book_title=:book_title,
number_of_ page = :number_of_page,
genre = :genre,
author = :author,
type = :type,
publication = :publication";
$stmt = $this->conn->prepare($query);
$this->book_title=$this->value;
$this->number_of_ page= $this->number_of_ page[$this->key];
$this->genre = $this->genre[$this->key];
$this-> author= $this-> author[$this->key];
$this-> type= $this-> type[$this->key];
$this-> publication = $this->publication[$this->key];
$stmt->bindParam(':book_title', $this->book_title);
$stmt->bindParam(':number_of_ page', $this->number_of_ page);
$stmt->bindParam(':genre ', $this->genre );
$stmt->bindParam(':author', $this->author);
$stmt->bindParam(': type', $this-> type);
$stmt->bindParam(':publication', $this->publication);
$stmt->execute();
}
這是我在表中插入的數據。
+-----------+---------------+-------+--------------+------------+-----------+
| book_title|number_of_ page| genre | author | type |publication|
+-----------+---------------+-------+--------------+------------+-----------+
| carrie | 199 | horror| stephen king | softcover | 1974 |
+-----------+---------------+-------+--------------+------------+-----------+
| dune | 412 | scifi | frank herbert| hardcover | 1965 |
但這是后端的結果。
+-----------+---------------+-------+--------------+------------+-----------+
| book_title|number_of_ page| genre | author | type |publication|
+-----------+---------------+-------+--------------+------------+-----------+
| carrie | 199 | horror| H | softcover | 1974 |
+-----------+---------------+-------+--------------+------------+-----------+
| dune | 9 | o | I | o | 9 |
我不確定是什么問題。 也許有人可以分享他們對此事的專家意見,我將不勝感激。 非常感謝您提前。
編輯:我能夠在第一行正確插入數據,這是現在的樣子。 第一行的作者是正確的,但在第二行的“I”上,它現在變成了“t”。
+-----------+---------------+-------+--------------+------------+-----------+
| book_title|number_of_ page| genre | author | type |publication|
+-----------+---------------+-------+--------------+------------+-----------+
| carrie | 199 | horror| stephen king | softcover | 1974 |
+-----------+---------------+-------+--------------+------------+-----------+
| dune | 9 | o | t | o | 9 |
附加編輯:
所以我在 form.php 中添加這些代碼
include_once 'config/database.php';
include_once 'config/bookclass.php';
$database = new Database();
$db = $database->getConnection();
$book = new Book($db);
if($_POST){
$book->book_title=$_POST['book_title'];
$book->number_of_ page=$_POST['number_of_ page'];
$book->genre=$_POST['genre'];
$book->author=$_POST['author'];
$book->type=$_POST['type'];
$book->publication=$_POST['publication'];
if($book->book()){
var_dump ($value);
var_dump($book->number_of_ page[$key]);
var_dump($book->genre[$key]);
var_dump($book->author[$key]);
var_dump($book->type[$key]);
var_dump($book->publication[$key]);
}
else{
echo "not saved";
}
}
這是我得到的:
Notice: Undefined variable: value in /var/www/html/library/form.php on line 106
NULL
Notice: Undefined variable: key in /var/www/html/library/form.php on line 107
Notice: String offset cast occurred in /var/www/html/library/form.php on line 107
string(1) "9"
Notice: Undefined variable: key in /var/www/html/library/form.php on line 108
Notice: String offset cast occurred in /var/www/html/library/form.php on line 108
string(1) "t"
Notice: Undefined variable: key in /var/www/html/library/form.php on line 109
Notice: String offset cast occurred in /var/www/html/library/form.php on line 109
string(1) "o"
Notice: Undefined variable: key in /var/www/html/library/form.php on line 110
Notice: String offset cast occurred in /var/www/html/library/form.php on line 110
string(1) "o"
Notice: Undefined variable: key in /var/www/html/library/form.php on line 111
Notice: String offset cast occurred in /var/www/html/library/form.php on line 111
string(1) "9"
為什么在foreach
循環中使用類成員? 你可以這樣做:
foreach ($this->book_title as $key => $value)
。
你也有很多圍繞$this->
調用的空格。 您的代碼也是 XSS 可注入的,因為您沒有使用htmlspecialchars
或htmlentities
清理您的輸入。 但所有這些都放在一邊。 調試 PHP 代碼的最佳方式是使用var_dump
。 首先檢查$this->author
通過執行var_dump($this->author)
。 不幸的是,我不能再告訴你了,因為你提供的代碼不完整,為了做出有效的判斷並為你提供所需的幫助,你需要提供分配給author
類成員的部分。
您確定要插入數據庫的值是真正的數組而不是字符串嗎? 從您的輸出來看,這些值看起來像字符串,否則您將不會只得到字符。
好的,我發布了一個答案,因為我終於破解了它,
我只是改變了這個:
public function book(){
foreach($this-> book_title AS $this->key => $this->value) {
$query = "INSERT INTO
table_a
SET
book_title=:book_title,
number_of_ page = :number_of_page,
genre = :genre,
author = :author,
type = :type,
publication = :publication";
$stmt = $this->conn->prepare($query);
$this->book_title=$this->value;
$this->number_of_ page= $this->number_of_ page[$this->key];
$this->genre = $this->genre[$this->key];
$this-> author= $this-> author[$this->key];
$this-> type= $this-> type[$this->key];
$this-> publication = $this->publication[$this->key];
$stmt->bindParam(':book_title', $this->book_title);
$stmt->bindParam(':number_of_ page', $this->number_of_ page);
$stmt->bindParam(':genre ', $this->genre );
$stmt->bindParam(':author', $this->author);
$stmt->bindParam(': type', $this-> type);
$stmt->bindParam(':publication', $this->publication);
$stmt->execute();
}
對此:
public function book(){
foreach($this-> book_title AS $key => $value) {
$query = "INSERT INTO
table_a
SET
book_title=:book_title,
number_of_ page = :number_of_page,
genre = :genre,
author = :author,
type = :type,
publication = :publication";
$stmt = $this->conn->prepare($query);
$this->book_title=$value;
$this->number_of_ page= $this->number_of_ page;
$this->genre = $this->genre;
$this-> author= $this-> author;
$this-> type= $this-> type;
$this-> publication = $this->publication;
$stmt->bindParam(':book_title', $value);
$stmt->bindParam(':number_of_ page', $this->number_of_ page[$key]);
$stmt->bindParam(':genre ', $this->genre[$key] );
$stmt->bindParam(':author', $this->author[$key]);
$stmt->bindParam(': type', $this-> type[$key]);
$stmt->bindParam(':publication', $this->publication[$key]);
$stmt->execute();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.