Ошибка места в методе PHP GET - PullRequest
1 голос
/ 29 декабря 2011
<?php

$current_subject = $_GET['subject_id'];
$current_content = $_GET['note_id'];

echo "<form method=\"post\" action=mainpage.php?subject_id=".$current_subject."&note_id=".$current_content.">";

?> 
  <input type='text' name='list_item' value=''>
  <input type='submit' name="new_item" value="New Item">   
</form>

Проблема в том, что когда одна из переменных GET - это два слова, ссылка не записывает это таким образом. Так, например, если $current_subject="Advanced Chemistry" и $current_content="Valence Electrons" ссылка будет выглядеть как:

<form method=​"post" action=​"mainpage.php?subject_id=Advanced" chemistry&note_id=​"Valence" electrons>​

Ответы [ 5 ]

5 голосов
/ 29 декабря 2011

Вам нужно urlencode() переменные, например, так:

<?php

$current_subject = $_GET['subject_id'];
$current_content = $_GET['note_id'];

$subject = urlencode($current_subject);
$content = urlencode($current_content);

$action = "mainpage.php?subject_id=" . $subject . "&note_id=" . $content;

?>

<form method="post" action="<?php echo $action; ?>">
  <input type="text" name="list_item" value="">
  <input type="submit" name="new_item" value="New Item">   
</form>

Кроме того, вы должны привыкнуть проверять эти данные. Вы, вероятно, хотите проверить, что они являются целыми числами.

4 голосов
/ 29 декабря 2011

Используйте urlencode() или rawurlencode()

3 голосов
/ 29 декабря 2011

Всегда цитируйте свои атрибуты и избегайте ваших данных.Процитировано, это будет работать:

<?php

$current_subject = $_GET['subject_id'];
$current_content = $_GET['note_id'];

echo "<form method=\"post\" action=\"mainpage.php?subject_id=" . $current_subject . "&note_id=" . $current_content . "\">";

?> 
    <input type="text" name="list_item" value="" />
    <input type="submit" name="new_item" value="New Item" />   
</form>

Но, конечно, вы должны urlencode сначала:

<?php
$current_subject = $_GET['subject_id'];
$current_content = $_GET['note_id'];
$url = 'mainpage.php?subject_id=' . urlencode($current_subject) . '&note_id=' . urlencode($current_content);
?> 
<form method="POST" action="<?php echo $url; ?>">
    <input type="text" name="list_item" value="" />
    <input type="submit" name="new_item" value="New Item" />   
</form>
1 голос
/ 29 декабря 2011

Я бы, вероятно, использовал http_build_query:

$query = http_build_query(array('subject_id' => $_GET['subject_id'], 'foo' => 'bar'));
<form action="mainpage.php?<?php echo $query; ?>">

У меня есть подозрение, что $query также должно быть htmlentities 'd.
http_build_queryобрабатывает кодировку URI, но я не уверен, должен ли он также быть в HTML-кодировке поверх этого (в конце концов, это атрибут HTML).

0 голосов
/ 29 декабря 2011

Вы должны взглянуть на PHP urlencode ()

$current_subject = urlencode($_GET['subject_id']);
$current_content = urlencode($_GET['note_id']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...