2014-04-12 26 views
6

I utworzeniu formularza HTMLphp powrót do strony po przedłożeniu formularza

<form action="http://localhost/php/insert.php" method="post"> 
    Barcode: <input type="text" name="barcode" /><br><br> 
    Serial: <input type="text" name="serial" /><br><br> 
    <input type="submit" /> 
</form> 

który oszczędza do mojej bazy danych przy użyciu tej PHP:

<?php 
$con = mysql_connect("example","example",""); 
if (! $con) { 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("database", $con); 

$sql = "INSERT INTO asset (barcode, serial) 
     VALUES ('$_POST[barcode]','$_POST[serial]')"; 

if (! mysql_query($sql, $con)) { 
    die('Error: ' . mysql_error()); 
} 
mysql_close($con) 
?> 

formularz zapisuje do DB, ale strona po prostu przechodzi do http://localhost/php/insert.php po naciśnięciu przycisku Wyślij, który jest pustą stroną. jak mogę sprawić, by pozostała na tej samej stronie i pokazała wiadomość?

Odpowiedz

6

Pamiętaj, że przekierowanie z jest ogólnie nierzetelne i niegodne zaufania, więc najlepiej jest podać adres URL wysłany z żądaniem lub, jeśli pochodzi z innego serwera, możesz utworzyć określony przekaz, aby użyć strony/adresy URL. Najlepiej znać adres URL, podając go wraz z wnioskiem; dwa pozostałe są prawdopodobnie mniej niż optymalne.

Po przetwarzaniu forma jest zrobione, to zrobić przed wyprowadzanie niczego (który wygeneruje błąd):

header("Location: {$_SERVER['HTTP_REFERER']}"); 
exit; 

zależności od Twoich wyników przetwarzania może być, można dołączyć błąd w adresie URL:

if ($query_does_not_execute) { 
    $errcode = "error_code=003"; 
} 

$referer = $_SERVER['HTTP_REFERER']; 

if ($errcode) { 
    if (strpos($referer, '?') === false) { 
     $referer .= "?"; 
    } 

    header("Location: $referer&$errcode"); 
} else { 
    header("Location: $referer"); 
} 
exit; 

Następnie na stronie można wyświetlić błąd. Lub, alternatywnie, możesz przekierować na stronę do różnych błędów obsługi programu obsługi. Jest to szeroko otwarte na wiele różnych interpretacji.

+0

yeh Otrzymuję 'Niezdefiniowany indeks: REFERER' –

+0

Jeśli pochodzi ze strony HTTPS, REFERER nie będzie dostępny, więc niemożliwe jest odzyskanie go z $ _SERVER. – Ashley

+0

@CarlaDessi - Miałem niewłaściwy klucz, to 'HTTP_REFERER'. Zauważ, że jest to również trochę niestabilne, ponieważ może być ustawione przez przeglądarkę (lub nie ustawione lub podrobione). –

3

Można użyć PHP's Header() function tak:

header("Location: your-page.php"); 
exit; 

Musisz upewnić się, nie ma wyjścia (to echo coś, lub jakikolwiek HTML etc) przed wywołaniem nagłówka lub nie będzie działać.

+0

Chcę, aby powrócił do strony, z której pochodzi, która znajduje się na innym serwerze. –

+0

Jeśli pochodzi ze strony HTTPS, jest to niemożliwe, chyba że URL jest przekazywany do Ciebie w parametrze z żądaniem. – Ashley

-1

Skorzystaj z tego w formularzu działania $_SERVER['PHP_SELF']; spełni twoje wymagania.

0

Innym sposobem, w jaki znalazłem utwory, jest przekierowanie z html's <meta>. Umieść go w swoim skrypcie http://localhost/php/insert.php. Po przetworzeniu przekierowania do wybranej strony.

<?php 

switch ($INPUT['task']) 
{ 
    case 'insert_and_redirect': 
      insertForm(); 
      $h = '<html><head>'; 
      $h .= '<meta http-equiv="refresh" content="0; URL=/adjustments/">'; 
      $h .= '</head></html>'; 
      echo $h; 
     break; 
    case 'edit': 
     # editForm(); 
     break; 
    case 'delete': 
     deleteRecord(); 
     break; 
    default: 
     break; 
} 

?> 

Prawdopodobnie niezabezpieczone, ale jeśli jesteś na prywatnej sieci LAN powinno być dobrze.
-Cheers

Powiązane problemy