我寫了一個下拉式選單(程式碼如下),想請教在選擇完開始執行跳頁,我該如何再test.php取得這個@$number變數;這有需要用到資料庫嗎?
<html>
<body>
<div style="text-align:center;">
<form action="c.php" method="post">
選擇使用者:
<select name="number">
<option value="0">請選擇</option>
<option value="1">黃</option>
<option value="2">吳</option>
</select><p/>
<input type="submit" value="提交"/> <hr/>
</form>
</div>
</body>
</html>
<?php
#使用者變數
@$number = $_POST["number"];
if ($number == "1"){
header ("location:/test/test.php");
}
else if ($number == "2") {
header ("location:/test/test.php");
}
?>
阿怎麼不直接 post 到 test.php 就好
然後用取 post
的取法就可以了
你那判斷直接在 test.php
寫就好了吧
雖然跟問題沒有直接關係,但有兩點我覺得滿重要的想說一下:
@$number = $_POST["number"];
,可以用 isset 去偵測是否有值。例如:$number = isset($_POST["number"]) ? $_POST["number"] : false;
(以下於可樂快跑提醒後補充)
上面取值的方式比較舊,在取完值後一般還要做一些過濾處理,因為「凡是從前端送來的資料是不可信賴的」。
今天發現 PHP 有 filter_input 這個函式,可以同時「檢查資料是否存在」、「過濾」、「取值」。
例如上面可以寫成:$number = filter_input(INPUT_POST, "number", FILTER_VALIDATE_INT);
這時 $number
將會是:
詳細用法可參考 https://www.php.net/manual/en/function.filter-input.php
為何都沒有人先告訴他。用@會不回報錯誤。
他知道@是幹嘛用的??
然後表單傳送給c.php。在test.php接的到值??
這已經是基本觀念沒有的問題吧??
居然還會吐出「需要用到資料庫嗎?」的話出來??
雖然明白你是初學者。不過這個問題要直接給你答案也沒難度。
只是,看你現在完全不知道表單,前端、後端。
給你答案後將會再延伸更多的問題。
我真的是初學者不好意思,當初看到出錯上網查過後發現他的變數前面加了@所以才以為可以這樣加
我當初是出現這個問題 Notice: Undefined index:
我參考了這個http://alfredwebdesign.blogspot.com/2013/05/php-notice-undefined-index.html
前制一個@是給php不回報這一行程式碼的任何錯誤。
但這是不正規的寫法。也很容易造成未來除錯的問題。
一般php在7版後就嚴格執行標準的參數宣告。
一般是搭配isset處理。
現在新的做法比較偏向post get值模組處理。再模組做一些機制。
會變成如
$name = $this->input('name');
這樣的寫法。
當然,初學者可以對於物件導向之類的東西不了解。
暫時先使用isset的方式處理。
或是用7版新的三元存在判斷式 ?? 或是三元判斷式 ?:
來做處理。
用@的方式是很不好的行為。大多數來說會用@的地方,大多數都是用在一些特規函數處理。
要不然就是承認自已很懶,不想規劃程式才會這樣做。
ps:我承認,有時小程式確實很懶,不想寫判斷模組,會用一下@
@ <== 建議無論如何都要強迫自己禁止使用他。
對此有需要錯誤處理的,請用try...catch...
沒物件觀念的人。還是先讓他慢慢學吧。
一下子跳級會死人的。
不要用 @$number = $_POST["number"]; ,可以用 isset 去偵測是否有值。例如:$number = isset($_POST["number"]) ? $_POST["number"] : false;
在 php7.4 底下,可以寫成
$number = $_POST["number"] ?? false ;
我覺得很爽,程式碼像女人的裙子,越短越好嘛,可是,我們家工程師不以為然,他說不太直觀。
我也滿喜歡這個的,應該有到php7就有了吧,我的版本還在7.1。
https://kinsta.com/blog/php-7-4/
按文章說,是 php7.4才有,
和 mysql 的 ifnull() , 有異曲同工之妙。
??只要7版就可以使用了。包含了新的?:簡用法。都是在7版的。
並不是7.4才有的。
不過拿ifnull比較怪怪的。雖然也不能說不對。
我倒是想將它做為?:的進化版會比較貼切。
畢竟原本以前的寫法會是 isset($c) ? $c : 'n'
要用簡寫法 isset($c) ?: 'n' 這樣子好像也不對。
才會衍生出 ?? 的寫法的。
其實??的寫法是為了要應用
isset($c) ?: 'n'
沒辦法這樣直接簡寫化使用。才生出來??的替代用法。
受教了!
我以前不知道這個寫法,是看了那篇文章才知道,以為 7.4 才有。
好吧!我的話就一件事………
誰准你們直接去拿$_POST的值的???
懂的人就知道我在指什麼了。
報告 cola 大大
我不懂您在指什麼?
可以多開一下金口嗎?或者,指點一下,要去 google 什麼關鍵字?
承認不懂對我來說,並不會難於啟齒,其實,有時,我也知道自己問的問題很愚蠢,不過,看到自己不懂的東西,卻要裝懂不問清楚,我覺得更是無可救藥。
聞道有先後,術業有專攻,我現在不懂,但總有一天,我也會懂,就是虛心學習就對了。
賢愚不肖,資質各有不同,我不頂聰明,領悟力自然不及眾人。
我再去 google 看看吧。
不要吵架
之前都是先拿出來丟到 filter_var
(更早之前是自己寫 filter 函式)
今天才知道有 filter_input
不過樓主只是比對字串,沒 filter 會有問題嗎?
淺水員
細微的事,從小處做起,總比日後再來學來得好。
就算他不是很清楚,至少先讓他知道:這在很多情況下是有危險性的。
現在的學習不比早年的學習模式了。
有太多的東西幾乎都要當成是基本配備才行。
感謝可樂,我補充在先前的回答好了。
@ckp6250
去上面看一下我回給他的話。
我已經建議post get值透過模組處理。
不過我倒是沒很明說就是了。
我跟叔叔不太一樣,比較不會說到更多要注意的地方。
因為這樣子要說的東西太多了。
所以我會選重點講而已。
不直接使用其一是防注入,其二是防改變程式。最後是防刷。
不過倒是很少人會做防刷就是了。(我自已是有做處理)
簡單來說,無法掌挃來源的外來變數。一般都最好洗過一偏後再給程式取用。
千萬不要直接使用。免得被攻到不要不要的。