Form get's resent on refresh, я прочитал о header("Location:my_page.php")
unset($_POST)
, но я не уверен, где его разместить.
Это наш скрипт, он работает по мере необходимости, но он сохраняет повторную отправку на странице обновления (уведомления браузера Chrome снова и снова), может ли кто-то исправить код и объяснить моему, как 2-летнему ребенку.
<form action='thi_very_same_page.php' method='post'> Search for Christian Movies <input type='text' name='query' id='text' /> <input type='submit' name='submit' id='search' value='Search' /> </form> <?php if (isset($_POST['submit'])) { mysql_connect("localhost", "root", "toor") or die("Error connecting to database: " . mysql_error()); mysql_select_db("db_name") or die(mysql_error()); $query = $_POST['query']; $min_length = 2; if (strlen($query) >= $min_length) { $query = htmlspecialchars($query); $query = mysql_real_escape_string($query); echo ""; $result = mysql_query("SELECT *, DATE_FORMAT(lasteditdate, '%m-%d-%Y') AS lasteditdate FROM movies WHERE (`moviename` LIKE '%" . $query . "%') OR (`year` LIKE '%" . $query . "%')") or die(mysql_error()); if (mysql_num_rows($result) > 0) { while ($results = mysql_fetch_array($result)) { echo ""; } } else { echo ""; } } else { echo ""; } }
Если вы имеете в виду, что данные формы снова отправляются после обновления, проверьте этот метод
http://www.andypemberton.com/engineering/the-post-redirect-get-pattern/
Вы устанавливаете заголовок заголовком ('HTTP / 1.1 303 See Other');
Данные не будут кэшироваться, поэтому, когда страница обновит данные формы, они не будут снова отправлены!
Проблема заключается в том, что вы используете метод post
для отправки значений формы, поэтому, когда вы пытаетесь обновить браузер, вы спрашиваете, следует ли отправлять информацию о форме или нет, это поведение браузера по умолчанию для решения размещенной информации, альтернативное решение для вашей проблемы вы можете использовать метод get
например, в методе form method='get'
что он делает, он будет добавлять всю информацию формы в url, которую мы называем query string
и в php-коде, к которому вы обращаетесь к значениям формы в $_POST
но при использовании метода get значения формы теперь будут отображаться в методе $_GET
эти методы называются методом запроса и являются глобальными переменными php. Теперь, когда вы пытаетесь обновить его, вы не будете просить вас повторно отправить информацию, поскольку информация теперь находится в URL
<form action='thi_very_same_page.php' method='get'> Search for Christian Movies <input type='text' name='query' id='text' /> <input type='submit' name='submit' id='search' value='Search' /> </form> <?php if (isset($_GET['submit'])) { mysql_connect("localhost", "root", "toor") or die("Error connecting to database: " . mysql_error()); mysql_select_db("db_name") or die(mysql_error()); $query = $_GET['query']; $min_length = 2; if (strlen($query) >= $min_length) { $query = htmlspecialchars($query); $query = mysql_real_escape_string($query); echo ""; $result = mysql_query("SELECT *, DATE_FORMAT(lasteditdate, '%m-%d-%Y') AS lasteditdate FROM movies WHERE (`moviename` LIKE '%" . $query . "%') OR (`year` LIKE '%" . $query . "%')") or die(mysql_error()); if (mysql_num_rows($result) > 0) { while ($results = mysql_fetch_array($result)) { echo ""; } } else { echo ""; } } else { echo ""; } } ?>
Надеюсь, этого достаточно, чтобы объяснить вам о представлении формы, я предлагаю вам глубоко посмотреть ниже
Пожалуйста, не используйте функции
mysql_*
в новом коде . Они больше не поддерживаются и официально устарели . См. Красную рамку ? Узнайте о подготовленных инструкциях и используйте PDO или MySQLi – эта статья поможет вам решить, какой из них. Если вы выберете PDO, вот хороший учебник .