2013-11-26 5 views
0

Здравствуйте, я пытаюсь получить выбранное значение и делать что-то, когда оно выбрано. Кроме того, пытаясь напечатать, что текстовое поле (печать только температура)php get select option и ввод текста

<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 ;("); 
} 

Убедитесь, что веб-сервер (то есть 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 management и Post-Redirect-Get.При том, что вы могли бы сделать это:

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']); 
} 

Примечание: $_SESSION at php.net

+0

Очень информативный, но он все еще не пишет в файл – user1043816

+0

@ user1043816 Он делает на моем личном сервере .. Бьюсь об заклад, это проблема прессой. Убедитесь, что веб-сервер работает на пользователе с правом записи в папке назначения. – Theraot

+0

ah получил его работу Я сделал опечатку, набрав ваш ответ. Спасибо за информацию и ссылки! :) – user1043816

0

Измените следующие ...

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

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

Еще не писал в файл – user1043816

0

Ваша форма использует метод GET для передачи данных в add.php. Однако вы используете $_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