PHP 板


LINE

看板 PHP  RSS
最近被老板交代做一个跨页表单, 亦即有多个页面、每个页面有一个表单, 同一个使用者填完每个表单後,再一次将数据结果记录在MySQL资料库里, 以下是我简化後的例子: 版本:PHP 5.2.6 页面:Test.php --> 有一个表单选项按钮 (value = 1 or 2, 命名为Choice) Test2.php --> 有一个表单选项按钮 (value = 1 or 2, 命名为Choice2) 资料表:Result (有两个栏位,分别记录 Choice 与 Choice2 的结果) 目前我打算利用 Session 变数, 将第一页的表单结果存在一个 Session 变数里, 之後到第二页後,再与第二页的结果一起记录到资料库的资料表中, 我的程式码如下: //Test.php <form action="Test2.php" method="POST" name="form1" id="form1"> <label> <input name="Choice" type="radio" value="1" /> A</label> <label> <input name="Choice" type="radio" value="2" /> B</label> <input type="submit" name="Submit" value="送出"/> </form> //Test2.php <?php require_once('Connections/Connect1.php'); ?> <?php function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } session_start(); $_SESSION['Choice'] = $_POST['Choice']; echo $_SESSION['Choice']; $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { $insertSQL = sprintf("INSERT INTO Result (Choice, Choice2) VALUES (%s, %s)", GetSQLValueString($_SESSION['Choice'], "int"), GetSQLValueString($_POST['Choice2'], "int")); mysql_select_db($database_Connect1, $Connect1); $Result1 = mysql_query($insertSQL, $Connect1) or die(mysql_error()); $insertGoTo = "index.html"; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } ?> <form action="<?php echo $editFormAction; ?>" method="POST" name="form1"> <label></label> <p> <label> <input name="Choice2" type="radio" value="1"> C</label> <label> <input name="Choice2" type="radio" value="2"> D</label> </p> <p> <label> <input type="submit" name="Submit" value="送出"> </label> </p> <input type="hidden" name="MM_insert" value="form1"> </form> 为了测试 Session 变数是否生效,我特别下了 echo 指令来测试 (红色字体的部分), 结果发现该 Session 的确会显示 Test.php 输入的结果, 但又出现以下错误: Notice: Undefined index: Choice in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Test2.php on line 29 Column 'Choice' cannot be null (line 29为黄色字体那一行) 这里我百思不得其解, 既然 echo 已经说明 Choice 输入结果确实存在於 Session 变数里, 但为何又说我没有对 Choice 下定义? 为了再测试自己是不是 Session 指令有写错, 我将黄色字体的部分改为:$_SESSION['Choice'] = 1; //强迫输入为1 再重新跑一次就完全正常了, 所以可见应该是出在 $_POST['Choice'] 写法的问题, 但我一直想不到该如何解决 ... 我才刚入门 PHP 而已, 很多地方还不是那麽熟悉,也不知道这样做对不对 @@~ 不知道是否有先进能伸出援手?万分感激~ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.188.19
1F:推 chadjye:要不要把session_start();移到程式的第一行试试看 05/21 13:15
2F:→ edlin:刚刚试过了还是一样不成功 >< 05/21 13:19
3F:推 arrack:session_register('Choice'); 05/21 13:32
4F:→ arrack:那只是NOTICE不是错误 05/21 13:32
5F:→ edlin:感谢说明~ 不过新版的PHP语法不是已经不用写register吗? 05/21 13:52
6F:→ edlin:我刚刚试了一次结果还是相同 ... 05/21 13:52
7F:推 JoeHorn:好像是数值没传过去? 把 $_POST 倒出来看看~ 05/21 15:33
8F:→ edlin:我用echo $_POST['Choice']来看,里面也有我先前输入的数值 05/22 10:25
9F:→ edlin:好像牵涉记录在资料库就会失效...是php.ini要额外设定吗 @@~ 05/22 10:26
10F:→ starjou:php 版本? 05/22 11:13
11F:→ starjou:上一行请无视,那个 notice 是不是你直接开 test2.php 时 05/22 11:14
12F:→ starjou:才有? 05/22 11:15
13F:→ edlin:Notice是出现在Test2.php选完并按送出後 05/22 11:33
14F:→ starjou:你的 test2.php form里的变数叫Choice2 $_POST里没 Choice 05/22 23:21
15F:→ edlin:我是将Choice写入Session变数後,在Test2里送出这个Session 05/23 20:18
16F:→ edlin:如程式码中亮白色的部分 ... 还是这种写法本来就不行? 05/23 20:19
17F:→ edlin:但文中我也提到Session里是直接指定的常数的话,是可行的 05/23 20:20
18F:→ starjou:session 里的变数就叫 $_SESSION 了,不会再叫 $_POST 05/23 20:47
19F:→ starjou:除非你在 test2.php 用 hidden input 再重指定一次 05/23 20:48
20F:→ edlin:真是一语惊醒梦中人!感谢楼上先进的建议~ 05/23 22:25







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP