2013-11-26 59 views
0

你好,我试图得到一个选定的值,并选择它时做的东西。也试图打印文本框(打印只是临时)php获取选择选项和文本输入

<form name="recAdd" method="GET" action="add.php"> 
    <select name="rec"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
    </select><br> 
    <input type="text" name="name" /> 
    <input type="submit" value="Submit" /> 
</form> 

PHP(add.php):

switch($_POST['rec']){ 
case '1': 
    $rec1 = "rec1.txt"; 
    $fh = fopen($rec1, 'a') or die("can't open file"); 
    $romString = $_GET['name']; 
    fwrite($fh, $romString); 
    fclose($fh); 
    print() 
break; 
case '2': 
    // do Something 
break; 
case '3': 
    // do Something 
break; 
default: 
    print("Not working ;("); 
} 

没有尽一切看的文本框,下拉我用这个和它的工作(只是看是否写入文件被罚款等)

$recAll = "recAll.txt"; 
$fh = fopen($recAll, 'a') or die("can't open file"); 
$stringData = "New Stuff 1\n"; 
fwrite($fh, $stringData); 
$stringData = "New Stuff 2\n"; 
fwrite($fh, $stringData); 
fclose($fh); 
+0

Stackoverflow使它只显示123. - 谢谢Theraot编辑它 – user1043816

+2

你是在混合GET和POST的目的?而...你又有什么问题了?如果你不确定使用了什么请求方法,你可以试试$ _SERVER ['REQUEST_METHOD']; – Theraot

+0

@Theraot你应该发布它作为答案。 –

回答

2

因为公众要求它!这是我的意见扩展为一个完整的答案:

您正在使用$_GET$_POST,这是不常见的,你这样做的目的?我的猜测是:不。

如果你在你的HTML看到您有:

<form name="recAdd" method="GET" action="add.php"> 

这意味着从浏览器的请求将是一个GET。你既可以将其更改为POST:

<form name="recAdd" method="POST" action="add.php"> 

PHP(add.php):

switch($_POST['rec']){ 
case '1': 
    $rec1 = "rec1.txt"; 
    $fh = fopen($rec1, 'a') or die("can't open file"); 
    $romString = $_POST['name']; //<--- 
    fwrite($fh, $romString); 
    fclose($fh); 
    print 'something'; //<<--- fixed syntax, btw: I would use echo 
break; 
case '2': 
    // do Something 
break; 
case '3': 
    // do Something 
break; 
default: 
    print("Not working ;("); 
} 

注:我有这种变化测试,这是工作。

或者改变这一切GET(我建议留在POST)

switch($_GET['rec']){ //<----- 
case '1': 
    $rec1 = "rec1.txt"; 
    $fh = fopen($rec1, 'a') or die("can't open file"); 
    $romString = $_GET['name']; 
    fwrite($fh, $romString); 
    fclose($fh); 
    print 'something'; //<<--- fixed syntax, btw: I would use echo 
break; 
case '2': 
    // do Something 
break; 
case '3': 
    // do Something 
break; 
default: 
    print("Not working ;("); 
} 

确保Web服务器(即Apache的)有权在目标文件夹来写。这可能会阻止操作成功。

您也可以打开来自PHP的错误消息,这可能会提供有关正在发生的事情的信息。您可以为当前的PHP脚本这样做:

error_reporting(E_ALL | E_STRICT); 

注:error_reporting at php.net


如果你不知道用什么样的请求方法,你可以尝试$_SERVER['REQUEST_METHOD']像这样:

if ($_SERVER['REQUEST_METHOD'] === 'POST') 
{ 
    //Ok we got a POST, probably from a FORM, read from $_POST. 
    var_dump($_PSOT); //Use this to see what info we got! 
} 
else 
{ 
    //You could assume you got a GET 
    var_dump($_GET); //Use this to see what info we got! 
} 

注:$_SERVER at php.net

您可能也对PHP Session managementPost-Redirect-Get感兴趣。$_SESSION at php.net

+0

非常丰富,但它仍然没有写入文件 – user1043816

+0

@ user104381​​6它在我的个人服务器上执行。我敢打赌,这是一个压力问题。确保Web服务器正在用户上运行,并有权在目标文件夹上进行写入。 – Theraot

+0

啊得到它的工作我输入你的答案时犯了一个错字。感谢您的信息和链接! :) – user1043816

0

更改以下...

<form name="recAdd" method="POST" action="add.php"> 

$romString = $_POST['name']; 
+0

仍然没有写入文件 – user1043816

0

你的表单使用GET方法将数据发送到add.php:有了你可以这样做:

if ($_SERVER['REQUEST_METHOD'] === 'POST') 
{ 
    //Ok we got a POST, probably from a FORM, read from $_POST. 
    var_dump($_PSOT); //Use this to see what info we got! 
    //Do stuff... 
    //Write results to session 
    session_start(); 
    $_SESSION['stuff'] = $something; 
    //redirect: 
    header('Location: add.php', true, 303); 
    //The redirection will cause the browser to request with GET 
    //The results of the operation are in the session variable 
    exit(); 
} 
else 
{ 
    //You could assume you got a GET 
    var_dump($_GET); //Use this to see what info we got! 
    //Get stuff from session 
    session_start(); 
    if (array_key_exists('stuff', $_SESSION)) 
    { 
     $something = $_SESSION['stuff']; 
     //we got stuff 
     //later use present the results of the operation to the user. 
    } 
    //clear stuff from session: 
    unset($_SESSION['stuff']); 
} 

注意。但是,您正在使用$_POST来检索rec值。有两种方法可以解决这个问题:

方法1:

变化<form name="recAdd" method="GET" action="add.php"><form name="recAdd" method="POST" action="add.php">。还将$romString = $_GET['name'];更改为$romString = $_POST['name'];

方法2:

变化switch($_POST['rec']){switch($_GET['rec']){。只要您的表单的方法得到,这将工作。

方法3:

变化switch($_POST['rec']){switch($_REQUEST['rec']){。无论你的表单的方法是什么,这都可以工作。 $_REQUEST包括来自$_POST$_GET的值。

我从最理想到最少的顺序列出了这些解决方案。混合$ _GET和$ _POST通常不是最佳解决方案。

+0

与上面的内容相同,但不写入文件 – user1043816