我執行發生一個問題是:
其中這個變數$ckname=$_POST["ckname$p"]
在第一個判斷式中是可以正確讀取到資料
if($ckname!=NULL&&$gnid!=NULL){ //檢查不為空值
$query_insert = "INSERT INTO `vdname` (`vnid`,`vname`,`vgroup`,`type`,`enumber` )
VALUES ('".$gnid."', '".$ckname."', '".$_POST["ckgroup$p"]."', '".$_POST["cktype$p"]."', '".$_POST["cknum$p"]."')";
mysql_query($query_insert);
header("location:npvdn.php?nid=$gnid");}
但是在更下面的query或者再下面的判斷式都抓不到變數$ckname=$_POST["ckname$p"]
請問有人知道為什麼嗎???
*主要問題是明明都在同一個FOR迴圈但是前面可以抓的到$ckname變數後面抓不到 *
以下是完整CODE
//執行POST後的動作
if(isset($_POST["action"])&&($_POST["action"]=="join")){
for($p=1;$p<=50;$p++){//迴圈跑50次
$gnid=$_GET["nid"];
$ckname=$_POST["ckname$p"];
if($ckname!=NULL&&$gnid!=NULL){ //檢查不為空值 這個地方是可以抓到變數$ckname
$query_insert = "INSERT INTO `vdname` (`vnid`,`vname`,`vgroup`,`type`,`enumber` )
VALUES ('".$gnid."', '".$ckname."', '".$_POST["ckgroup$p"]."', '".$_POST["cktype$p"]."', '".$_POST["cknum$p"]."')";
mysql_query($query_insert);
header("location:npvdn.php?nid=$gnid");}
//以下搜尋或判斷都抓不到變數$ckname,都是NULL的
$query_user = "SELECT * FROM `vdname` WHERE `vnid`=$gnid AND `vname`=$ckname ";
$user=mysql_query($query_user);
if (mysql_num_rows($user)>0){ header("Location:npvdn.php?errMsg=1&vname=$ckname"); }
elseif($gnid==NULL||$ckname==NULL){ header("Location:npvdn.php?errMsg=2&nid=$gnid&vname=$ckname"); }
}}
參考看看
是否可能改寫成「傳陣列」的方式
範例如下:
Example pseudo code:
Many web sites do this:
<form ....>
<input name="person_0_first_name" value="john" />
<input name="person_0_last_name" value="smith" />
...
<input name="person_1_first_name" value="jane" />
<input name="person_1_last_name" value="jones" />
</form>
When they could do this:
<form ....>
<input name="person[0][first_name]" value="john" />
<input name="person[0][last_name]" value="smith" />
...
<input name="person[1][first_name]" value="jane" />
<input name="person[1][last_name]" value="jones" />
</form>
With the first example you'd have to do string parsing / regexes to get the correct values out so they can be married with other data in your app... whereas with the second example.. you will end up with something like:
<?php
var_dump($_POST['person']);
//will get you something like:
array (
0 => array('first_name'=>'john','last_name'=>'smith'),
1 => array('first_name'=>'jane','last_name'=>'jones'),
)
另外有一點我不明白
如果在迴圈裡的讀的到值
你原本期待$ckname=$_POST["ckname$p"]
這列執行 50 次
讀到的是「相同的值」還是「不同的值」?
如果是
相同的值-->把這列搬到迴圈之外(前面),讀一次就好
不同的值-->改成「傳陣列」的寫法
因為你將整串 SQL 都用雙引號包覆,變數的值沒有被帶進去,你可以利用 .
將字串跟變數隔開,或是用 "{$var}"
的方式。
請參考連結。
像是把
$query_user = "SELECT * FROM `vdname` WHERE `vnid`=$gnid AND `vname`=$ckname ";
變成
$query_user = "SELECT * FROM `vdname` WHERE `vnid`={$gnid} AND `vname`={$ckname} ";
PS: 我不太會寫 PHP ,有錯誤還請不吝指教。
可是我之前一樣的寫法可以成功耶 換成這個頁面就不行!看好久就是看不出來差異在哪,我改用括號起來還是讀到空值耶 試了很多種方就是無法讓
$query_user = "SELECT * FROM `vdname` WHERE `vnid`={$gnid} AND `vname`={$ckname} ";
跟
elseif($gnid==NULL||$ckname==NULL){ header("Location:npvdn.php?errMsg=2&nid=$gnid&vname=$ckname"); }
讀取到$ckname的值 讀到的都是空的
只有在
if($ckname!=NULL&&$gnid!=NULL){ //檢查不為空值 這個地方是可以抓到變數$ckname
$query_insert = "INSERT INTO `vdname` (`vnid`,`vname`,`vgroup`,`type`,`enumber` )
VALUES ('".$gnid."', '".$ckname."', '".$_POST["ckgroup$p"]."', '".$_POST["cktype$p"]."', '".$_POST["cknum$p"]."')";
mysql_query($query_insert);
header("location:npvdn.php?nid=$gnid");}
這邊是正常可以判斷使用的
還是在迴圈中要換其他種寫法呢?
謝謝
yhn2880
這個檔案是 npvdn.php
嗎?
你在第一塊執行完下了
header("location:npvdn.php?nid=$gnid");
進行轉址,在這邊你有將 $gnid
重傳,但 $ckname
沒有重傳阿阿,所以不存在是正常的 XD
可是我就算把
if($ckname!=NULL&&$gnid!=NULL){ //檢查不為空值 這個地方是可以抓到變數$ckname
$query_insert = "INSERT INTO `vdname` (`vnid`,`vname`,`vgroup`,`type`,`enumber` )
VALUES ('".$gnid."', '".$ckname."', '".$_POST["ckgroup$p"]."', '".$_POST["cktype$p"]."', '".$_POST["cknum$p"]."')";
mysql_query($query_insert);
header("location:npvdn.php?nid=$gnid");}
這整段的CODE都刪掉 也讀不進去上面說的那兩個搜尋
等於說不管我有沒有這段
問題好像都出在讀不進去的那段code 但不知道為何讀不到
yhn2880
我先釐清一下:
想請問這段程式碼為何要執行迴圈?
以及該程式的用途及行為是什麼?謝謝
迴圈是因為我每個類別可能有1~50個廠商會列出來(列出的方式是用AJAX回傳DOM格式)
目的是為了選取分配哪個廠商配合哪個工程再新增做列表如下圖所示
selest option的部分是選到後下面就會AJAX列出幾個廠商(checkbox)
然後我再依照選擇到的checked去做POST 新增進資料庫
目前新增都是可以正常
只是我想加入一些判斷
1.只輸入工程沒選擇廠商 則判斷錯誤
2.已經新增過的 則判斷錯誤
上面程式碼就是想加入這兩個判斷但是無法存取到$ckname變數