Intereting Posts
Gettext всегда будет использовать системный стандарт по умолчанию PHP-статистика Объект хранится в памяти Параллельные обновления = потеря данных? Symfony / Doctrine – значения дат запроса в отношении существующих значений базы данных Данные PHP / Angularjs / Post пусты Backbone + RequireJS: файлы HTML, загруженные RequireJS, интерпретируются как файлы JS как использовать DISTINCT здесь в моем запросе CODEIGNITER В Yii существует ли способ проверки табличного ввода с помощью CActiveForm? Laravel запрещает пользователям редактировать / просматривать ресурсы других пользователей PHP Показать исходный код вместо файла .html SQL-запрос, похоже, не работает Регулярные выражения: как совместить числа? Преобразование mysql_query в $ wpdb-> get_results Ошибка php soap извлечения заголовков http PHP заменяет все символы звездочкой Как разделить разделенный запятыми отдельный столбец на несколько столбцов в php mysql

Проблемы с POST и GET

Я понимаю, что при представлении формы вы можете использовать метод POST или GET, а не оба одновременно.

Но я пытаюсь создать сценарий форума, поэтому, когда вы отвечаете на тему, он будет запрашивать это в базе данных и указывать ему reply_id в зависимости от того, что было $ _GET ['id'], когда вы отправляли ответ. Единственная проблема заключается в том, когда я нажимаю submit для отправки POST-данных методом POST, я не могу переносить $ _GET на следующую страницу после отправки. Поэтому я не могу запросить $ _GET ['id'].

Теперь я подумал, почему бы не сделать действие «topic.php? Id =», но это почему-то не сработало.

Неправильно то, что когда я нажимаю кнопку «Отправить» в форме, она даже не запрашивает ничего. : /

Кто-нибудь понял, что не так с кодом?

Форма:

<form action="topic.php?id=$postid" method="POST"> <textarea name="comment" class="field span6" rows="3" placeholder="Content..."></textarea><br /><br /> <input type="hidden" name="id" value="<?php echo $_GET['id'];?>"> <div><input type="submit" name="submit" value="Reply" /></div> </form> 

Действие формы:

  if(isset($_POST['submit'])) { $postid=$_POST['id']; $errors = array(); if(isset($_POST['comment'])){ if(empty($_POST['comment'])){ $errors[] = 'Error, try again!'; } if(strlen($_POST['comment']) > 400){ $errors[] = 'Comment must be in a 10 to 400 characters range!'; } if(empty($errors)){ //write to topics and replies tables $q2 = @mysql_query("INSERT INTO reply VALUES('$postid', \"$comment\", now(), '$id')"); } else { echo 'You have '. (count($errors) + 1).' errors in your form:<br />'; foreach($errors as $error){ echo $error .'<br />'; } echo '<a href="new_topic.php">Try again</a>'; } } 

попробуйте использовать скрытое поле в форме, чтобы вы могли хранить идентификатор в скрытом поле, иначе вы можете сохранить его в сеансах

  <input type="hidden" name="id" value="<?php echo urlencode($postid); ?>" /> 

а также

$_REQUEST['id']; в форме действия

Один из способов сделать это легко – использовать скрытое поле. Поэтому используйте

 <input type="hidden" name="id" value="<?php echo GET['id'];?>"> 

Затем на странице действий вы сможете использовать

  $postid=$_POST['id']; 

В противном случае, если у меня неправильный конец палки, используйте это вместо формы

 <input type="hidden" name="id" value="<?php echo $postid;?>"> 

Также измените действие формы на action = "topic.php".

Как должен выглядеть обновленный код

 <form action="topic.php" method="POST"> <textarea name="comment" class="field span6" rows="3" placeholder="Content..."></textarea><br /><br /> <input type="hidden" name="id" value="<?php echo $postid;?>"> <div> <input type="submit" name="submit" value="Reply" /> </div> </form> 

Вы можете использовать $ _REQUEST для получения значений из $ _POST и $ _GET или просто использовать скрытое поле ввода в своей форме для отправки идентификатора, что-то вроде

 <input type='hidden' name='id' value='<?php echo $postid' /> 

Это может быть лучший способ отправить идентификатор.

2 вещи, о которых нужно подумать. Передавайте любые переменные с предыдущих страниц, которые вам нужны в скрытых формах, как это было сказано выше. Кроме того, прекратите использовать $ _GET и $ _POST напрямую, вам нужно проверить вход, поэтому используйте общую функцию, чтобы сделать это, что также даст вам возможность просто просить var, не беспокоясь о том, что он находится в либо $ _GET, либо $ _POST. Что-то в этом роде:

 /** * returns the contents of the GET or POST variable * favours POST over GET */ function GP($var,$trusted=false) { $op=$_GET[$var]; if(isset($_POST[$var])) { $op=$_POST[$var]; } if(is_string($op)) { $op=trim(urldecode($op)); if(!$trusted){ $op=htmlspecialchars($op,ENT_QUOTES); } // $op=addslashes($op); } return $op; }