2014-04-12 15 views
6

ho creato un form htmlphp ritorno alla pagina dopo modulo di presentazione

<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> 

che consente di risparmiare nel mio database utilizzando questo 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) 
?> 

forma salva al DB ma la pagina appena passa a http://localhost/php/insert.php quando si preme submit, che è una pagina vuota. come posso farlo rimanere sulla stessa pagina e mostrare semplicemente un messaggio o qualcosa del genere?

risposta

6

Si noti che il reindirizzamento con HTTP_REFERER è traballante e inaffidabile in generale, quindi il modo migliore è quello di avere un URL inviato con la richiesta o, se proviene da un altro server, si potrebbe costruire una specifica pass-through da utilizzare per specifiche siti/URL. La cosa migliore è conoscere l'URL facendolo inviare alla richiesta; gli altri due sono probabilmente meno ottimali.

Dopo l'elaborazione dei moduli è fatto, fare questo prima di emettere qualsiasi cosa (che genera un errore):

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

A seconda di cosa i vostri risultati di elaborazione potrebbe essere, si potrebbe aggiungere un errore al 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; 

Quindi, nella pagina, è possibile visualizzare l'errore. Oppure, in alternativa, puoi reindirizzare a una pagina gli errori di gestore di diversi tipi. Questo è ampiamente aperto a diverse interpretazioni.

+0

yeh I get 'Indice non definito: REFERER' –

+0

Se viene da una pagina HTTPS, REFERER non sarà disponibile, quindi è impossibile recuperarlo da $ _SERVER. – Ashley

+0

@CarlaDessi - Ho avuto la chiave sbagliata, è 'HTTP_REFERER'. Si noti che è anche piuttosto instabile, dal momento che può essere impostato dal browser (o non impostato, o falsificato). –

3

È possibile utilizzare PHP's Header() function in questo modo:

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

Avrai bisogno di assicurarsi che non v'è alcuna uscita (cioè eco nulla, o qualsiasi HTML ecc) prima della chiamata intestazione o non funzionerà.

+0

Voglio tornare alla pagina da cui proviene, che si trova su un server diverso. –

+0

Se proviene da una pagina HTTPS è impossibile, a meno che l'URL non venga passato a te in un parametro con la richiesta. – Ashley

-1

Utilizzare questo nell'azione modulo $_SERVER['PHP_SELF']; soddisferà il requisito.

0

Un altro modo in cui ho trovato i lavori è il reindirizzamento con html <meta>. Inseriscilo nello script http://localhost/php/insert.php. Dopo aver elaborato il reindirizzamento alla pagina desiderata.

<?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; 
} 

?> 

Probabilmente non protetta, ma se siete su una LAN privata dovrebbe andare bene.
-Cheers

Problemi correlati