因此,我被困了幾個小時,試圖將存盤為變數的 $_SESSION 資料與更新的表單欄位中的 $_POST 資料進行比較,但是當我使用陣列 array_diff_assoc 或 array_diff 時,我得到了整個會話資料陣列或整個 post 資料陣列(取決于哦我如何在陣列函式中對它們進行排序),而不是區別。我希望能夠只輸出差異。
<?php
if(isset($_SESSION['username'])) {
$username = $_SESSION['username'];
$query = "SELECT * FROM updatetest WHERE username = '{$username}' ";
$select_users= mysqli_query($db, $query);
while ($row = mysqli_fetch_array($select_users)) {
$user_info['name'] = $row['name'];
$user_info['phone'] = $row['phone'];
$user_info['dob'] = $row['dob'];
$user_info['email'] = $row['email'];
$user_info['address_line_1'] = $row['address_line_1'];
$user_info['town_city'] = $row['town_city'];
$user_info['postcode'] = $row['postcode'];
$your_data[]=$user_info;
}
}
?>
<?php
if(isset($_POST['submit'])) {
$name= $_POST['name'];
$phone = $_POST['phone'];
$dob = $_POST['dob'];
$email = $_POST['email'];
$address_line_1 = $_POST['address_line_1'];
$town_city = $_POST['town_city'];
$postcode = $_POST['postcode'];
$result = array_diff_assoc($_SESSION['your_data'],$_POST);
print_r($result);
}
?>
注意:當我列印 $_SESSION['your_data'] 或 $_POST 時,我可以看到陣列。目標是使用 phpmail() 發送包含表單更新欄位的電子郵件
uj5u.com熱心網友回復:
我認為兩個陣列中都沒有匹配的鍵和值!這就是為什么您在 $result 變數中回傳整個陣列的原因。
我在下面解釋了為什么會發生這種情況:
array_diff_assoc
array_diff_assoc將第一個陣列中的鍵和值與第二個陣列進行比較。第一個陣列中存在但第二個陣列中沒有的鍵和值回傳到$result
例如
<?php
$array1 = array("a" => "apple", "b" => "banana", "c" => "mango");
$array2 = array("a" => "apple", "b" => "banana", "c" => "mango");
$result = array_diff_assoc($array1, $array2);
print_r($result)
?>
輸出:
Array ( )
如果您現在將 $array2 與 $array1 進行比較
<?php
$result = array_diff_assoc($array2, $array1);
print_r($result);
?>
輸出:
Array ( [d] => salad )
如您所見,唯一不匹配的鍵和值是"d" => "salad"
現在讓我們試試這個:
<?php
$array1 = array("a" => "apple", "b" => "banana", "c" => "mango");
$array2 = array("m" => "apple", "n" => "banana", "o" => "mango");
$result = array_diff_assoc($array1, $array2);
print_r($result)
?>
輸出:
Array ( [a] => apple [b] => banana [c] => mango )
如您所見,兩個陣列中的值相同,但鍵不同,因此 $array1 回傳到 $result。所以你必須使用array_diff(),如果你只想比較值。
陣列差異
array_diff僅比較陣列中的值。現在讓我們再次嘗試上面的相同示例!
<?php
$array1 = array("a" => "apple", "b" => "banana", "c" => "mango");
$array2 = array("m" => "apple", "n" => "banana", "o" => "mango");
$result = array_diff($array1, $array2);
print_r($result)
?>
輸出:
Array ( )
這里鍵不同但值相同,所以所有結果都匹配,所以回傳空陣列!
結論你的問題
由于您嘗試了 array_diff() 和 array_diff_assoc(),因此您的兩個陣列既沒有相同的值,也沒有相同的鍵和值,因此在這兩種情況下都會回傳第一個引數中的整個陣列!
我認為您必須使用其他方法來比較它們!
[編輯:您可以使用問題評論下提到的 array_diff() 比較 $row 和 $_POST] 參考:
https://www.php.net/manual/en/function.array-diff-assoc.php
https://www.php.net/manual/en/function.array-diff.php
uj5u.com熱心網友回復:
在沒有與您相同的資料庫資訊的情況下,我花了一些時間盡我所能重寫您的代碼。
讓我知道它是否有效/錯誤!:)
關鍵變化:
- 將 'MYSQLI_ASSOC' 添加到 'mysqli_fetch_array'
- 改變:
'$your_data[] = $user_info;'
至
'_SESSION['your_data'] = $user_info;'
$_SESSION['username'] = 'userone';
if (!empty($_SESSION['username'])) {
// $_SESSION variables are safely stored server side
//$username = $_SESSION['username'];
$select = '*';
$table = 'updatetest';
$column = $_SESSION['username'];
$query = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE username = ' . $column;
//$query = "SELECT * FROM updatetest WHERE username = '{$username}' ";
$select_users = mysqli_query($db, $query);
/* associative array
* https://www.php.net/manual/en/mysqli-result.fetch-array.php
*/
while ($row = mysqli_fetch_array($select_users, MYSQLI_ASSOC)) {
//while ($row = mysqli_fetch_array($select_users)) {
$user_info['name'] = $row['name'];
$user_info['phone'] = $row['phone'];
$user_info['dob'] = $row['dob'];
$user_info['email'] = $row['email'];
$user_info['address_line_1'] = $row['address_line_1'];
$user_info['town_city'] = $row['town_city'];
$user_info['postcode'] = $row['postcode'];
//$your_data[] = $user_info;
$_SESSION['your_data'] = $user_info;
}
}
// form submission
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$phone = $_POST['phone'];
$dob = $_POST['dob'];
$email = $_POST['email'];
$address_line_1 = $_POST['address_line_1'];
$town_city = $_POST['town_city'];
$postcode = $_POST['postcode'];
$result = array_diff_assoc($_SESSION['your_data'], $_POST);
// '<pre></pre>' formats array output for html
echo '<pre>';
print_r($result);
echo '</pre>';
}
uj5u.com熱心網友回復:
在瀏覽了社區成員提供的一些解決方案之后,我編輯了我的代碼并且它作業了。我的代碼現在看起來像這樣;
<?php
if(isset($_SESSION['username'])) {
$username = $_SESSION['username'];
$query = "SELECT * FROM updatetest WHERE username = '{$username}' ";
$select_users= mysqli_query($db, $query);
while ($row = mysqli_fetch_array($select_users, MYSQLI_ASSOC)) {
$user_info['name'] = $row['name'];
$user_info['phone'] = $row['phone'];
$user_info['dob'] = $row['dob'];
$user_info['email'] = $row['email'];
$user_info['address_line_1'] = $row['address_line_1'];
$user_info['address_line_2'] = $row['address_line_2'];
$user_info['town_city'] = $row['town_city'];
$user_info['county'] = $row['county'];
$user_info['postcode'] = $row['postcode'];
// $your_data[] = $user_info;
$_SESSION['your_data'] = $user_info;
}
}
?>
<?php
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$phone = $_POST['phone'];
$dob = $_POST['dob'];
$email = $_POST['email'];
$address_line_1 = $_POST['address_line_1'];
$town_city = $_POST['town_city'];
$postcode = $_POST['postcode'];
$result = array_diff_assoc($_POST, $_SESSION['your_data']);
// '<pre></pre>' formats array output for html
echo '<pre>';
print_r($result);
echo '</pre>';
}
?>
注意:$result = array_diff_assoc($_POST, $_SESSION['your_data'])。順序顛倒,以獲得差異。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/484757.html
