Я понимаю, что при представлении формы вы можете использовать метод 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; }