2014-12-17 2 views
-1
<?php 
    require ('db_connect.php'); 

    $Name = $_POST["name"]; $Email = $_POST["email"]; $Message = $_POST["message"]; 

    if(isset($_POST["submit2"])) { 
    $insertString2 = "INSERT INTO Messages(Name,Email,Message)  
     VALUES('$Name','$Email','$Message')"; 

    mysql_query($insertString2); 
    header("Location:register.php?msg=Successfully Send Message! You will get reply soon..."); 
    } 

?> 

Это мой код. Часть MySQL работает. Но это не перенаправляется на register.php. Зачем?Header Местонахождение в php

+2

какая ошибка появляется? – Girish

+3

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://stackoverflow.com/q/12859942). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://uk.php.net/manual/en/function.mysql-connect.php)? Узнайте о [* подготовленных заявлениях *] (http://en.wikipedia.org/wiki/Prepared_statement) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http: // php.net/mysqli) - [эта статья] (http://php.net/manual/en/mysqlinfo.api.choosing.php) поможет вам решить, какой из них. – Dinistro

+0

действительно ли файл существует? проверить путь и т. д., ошибку? – MixedVeg

ответ

3

Вы можете поставить вызов заголовка в Условный условного предшествуют другим кодом, до тех пор, пока вы будете следовать, что Руководство рекомендует:

You can use output buffering ... by calling ob_start() and ob_end_flush() in your 
script, or setting the output_buffering configuration directive on in your php.ini 
or server configuration files. 

Если вы хотите изменить файл php.ini, вы можете включить буферизацию на следующий образ:

output_buffering = On 

С буферизацией вывода включен, этот код структура должна работать:

Попробуйте это для вызова заголовка:

// setting variables here, then: 
if (condition) { 

    // other code here, then: 

    $location = "http://yourdomain.whatever/register.php"; 
    $encoded = urlencode("Successfully Send Message! You will get reply soon..."); 
    header("Location: $location?msg=$encoded");   
    exit; 
} 

Примечание: при использовании заголовка(), если вы имеете любую заботу с сохранением обратной совместимости с HTTP1.0, то вы должны обеспечить полный URL, включая протокол того, что является «HTTP», «HTTPS» или что-то другое. Кроме того, строка запроса содержит символы, которые должны быть ранжированы. После прохождения значения должны быть закодирована в UrlEncode(), строка выглядит следующим образом:

Successfully+Send+Message%21+You+will+get+reply+soon... 

Часть радость использование PHP является то, что он делает хорошие вещи, как автоматически декодировать кодированный URL. Так что все, что вам нужно сделать, чтобы отобразить сообщение пользователю, это написать что-то подобное следующему коду на register.php:

<?php echo htmlentities($_GET['msg']); 

, если вы хотите, чтобы декодировать переменную $ _GET с JavaScript, просто надо знать, что PHP и JavaScript так же не сортирует пространства urlencode, поэтому вам нужно вручную самостоятельно декодировать значение переменной $ _GET, а не полностью полагаться на decodeURIComponent() JavaScript. Следующий JavaScript будет urldecode значение «msg», включая преобразование любых символов «+» в пробелы:

var str=location.search.substring(5); 
str = decodeURIComponent(str); 
str=str.replace(/\+/g, ' '); 
alert(str); //Successfully Send Message! You will get reply soon... 
+0

Обратите внимание, что вы не указываете _have_ полный URL-адрес в заголовке 'Location:'. Последняя [спецификация HTTP] (http://tools.ietf.org/rfcmarkup/7231#section-7.1.2) гласит: «Когда она имеет форму относительной ссылки ([\ [RFC3986 \], раздел 4.2] (http://tools.ietf.org/rfcmarkup/3986#section-4.2)), окончательное значение вычисляется путем его разрешения против эффективного URI запроса ([\ [RFC3986 \], раздел 5] (http: // tools .ietf.org/rfcmarkup/3986 # раздел-5))». –

+0

Правда, но если браузер поддерживает http1.0, например, wget, тогда веб-сервер, даже если он обычно поддерживает http1.1, может вернуться с http1.0, и в этом случае мой совет звучит для поддержания обратной совместимости с http1.0. (см. http://tomcat.apache.org/tomcat-5.5-doc/config/http.html#HTTP/1.1_and_HTTP/1.0_Support) – slevy1

0

«Важно, чтобы заголовок() должен был называться до того, как будет отправлен любой фактический выход» - вы можете пропустить эту точку.

Возможно, вы допустили такую ​​ошибку. можете ли вы поделиться оригинальным полным исходным кодом?