iT邦幫忙

0

foreach與直接宣告

php
  • 分享至 

  • xImage

既上一個問題
我用foreach跑出來的

$keyName = ['a','b','c'];
foreach($keyName AS $_key){
    echo '$'."$_key" ."=$_POST[$_key]".'' ;}
    //結果:$a=$_POST['a'],$b=$_POST['b'],$c=$_POST['c']
$sql = "insert into english (a,b,c) values ('$a','$b','$c')";

跟我直接宣告

$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
$sql = "insert into english (a,b,c) values ('$a','$b','$c')";

有什麼差別嗎,我直接宣告的話values是抓的到值的,但我用foreach跑出來的,values卻抓不到值

<!--結果-->
insert into english (a,b,c) values ('','','')//這是foreach的
insert into english (a,b,c) values ('aa','bb','cc')//這是直接宣告的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2022-08-12 17:46:18

不是「foreach」和「直接宣告」的差別
是你在 foreach 裡寫的就只是echo(把文字顯示出來)
所以沒有去「執行」那段程式碼

你要做的大概是這個

我大概看懂了,感謝海綿大的回覆

0

雖然在上一題中跟你解釋了魔術引數。
但你似乎誤會了什麼。

雙引號可以協助將組合變數的值為一個「字串」
但並不代表著值有轉變出來。

認真來說,魔術引數只是幫你組合字串。
而不會做執行動作。

就正規來說。你並沒宣告 $a $b $c
變數就不會存在。
如果你有打開錯誤警告。
理論上你會獲得變數未宣告的警告才對。

那如果我先宣告$a,等於後面的用foreach帶入,這樣就可以成立了嗎?
(沒有錯誤警告是因為我想讓查詢完的值留在輸入欄上,所以用post的方式回填,但如果重開的時候會跑Notice出來,我就把他關了)

1
淺水員
iT邦大師 6 級 ‧ 2022-08-12 23:22:03

其實你要的是這樣吧?

$keyName = ['a', 'b', 'c'];
foreach ($keyName as $_key) {
    $$_key = $_POST[$_key] ?? '[某預設值]';
}
$sql = "insert into english (a,b,c) values ('$a','$b','$c')";
echo $sql;

PS. 現在 SQL 比較不推薦用字串連接,而是用 prepare 來代參數,會安全很多。

請問這行的某預設值是指我要post的值嗎

$$_key = $_POST[$_key] ?? '[某預設值]';
淺水員 iT邦大師 6 級 ‧ 2022-08-15 11:07:32 檢舉

這是讓 $_POST[$_key] 沒有給的時候,會變成預設值(可自訂)
這寫法是 php 7 之後才有的,相當於

$$_key = isset($_POST[$_key]) ? $_POST[$_key] : '[某預設值]';

或是

if(isset($_POST[$_key])) {
    $$_key = $_POST[$_key];
} else {
    $$_key = '[某預設值]';
}

了解了,感謝淺水員大大的回答

我要發表回答

立即登入回答