2012-04-15 6 views
3

Ich versuche, Benutzer auf eine benutzerdefinierte Fehlerseite (zum Beispiel: error.php) umzuleiten, wenn ein doppelter Eintrag gemacht wird, ist dies ein Beispiel für die INSERT-Anweisung , aber ich weiß nicht, wie ich weiterleiten soll.Umleiten auf benutzerdefinierte Fehlerseite, wenn ein doppelter Eintrag in MySQL gemacht wird

$values = $_POST; 
foreach ($values as &$value) { 
    $value = mysql_real_escape_string($value); 
} 

$sql1="INSERT INTO loan (loan_id) 
VALUES ('$values[loan_id]')"; 

$result = mysql_query($sql1); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
+0

Wie definieren Sie einen doppelten Eintrag? – liquorvicar

+0

Sie haben eine eindeutige Einschränkung für diese Spalte, riiight? –

+0

ja ich habe es – dames

Antwort

2

Die richtige Methode zum Umleiten von Formulareingaben ist die Verwendung der Umleitung HTTP 303.

in der aktuellen Zeile umleiten, tut so etwas wie diese, in PHP:

// Tell the browser to redirect 
header('Location: /error.php', TRUE, 303); 

// This ensures that the script doesn't continue 
// Also, it shows the error on the off chance their browser doesn't redirect 
die('Input error.'); 

Sie müssen sicherstellen, dass Sie die Header-Funktion vor jeder Ausgabe enthalten.

Hier ist es in Ihrem Code:

if (!$result) { 
    header('Location: /error.php', TRUE, 303); 
    die('Invalid query: ' . mysql_error()); 
} else { 
    header('Location: /success.php', TRUE, 303); 
    die('Success'); 
} 
+0

was ist, wenn die Eingabe erfolgreich ist und ich habe es bereits umleiten auf eine andere Seite, kann ich 2 Redirects wie in eins zu success.php, wenn es keinen Fehler und eine andere zu error.php, wenn es einen Fehler gibt – dames

+0

Ja. Sie wickeln nur eine IF ... ELSE-Anweisung um es herum. Bei Erfolg auf eine Seite umleiten, bei Fehler auf eine andere Seite. Ich habe meine Antwort aktualisiert, um zu zeigen, wie Sie sie in Ihrem Code implementieren würden. –

+0

Um den Fehler inline zu generieren, würden Sie einfach 'include' error.php''. – Ami

1

können Sie leiten header() mit:

$url = "error.php"; 
header("Location: " . $url); 

Vergewissern Sie sich diese, bevor die HTML-Header gesendet werden, ausgeführt wird!

+1

Beachten Sie, dass es aufgerufen werden muss, bevor eine Ausgabe gesendet wird! –

+1

@Truth Sorry, ich habe vergessen, wird den Beitrag bearbeiten :) – Jeffrey

+0

was ist, wenn die Eingabe erfolgreich ist und ich habe es bereits auf eine andere Seite umleiten, kann ich 2 Weiterleitungen wie in einem success.php haben, wenn es keinen Fehler und einen anderen gibt to error.php Wenn es einen Fehler gibt – dames

1

Ich würde lieber für vorhandene Daten überprüfen, bevor als das Einfügen es einfach einfügen:

$query = "SELECT * FROM myDB WHERE loan_id = " . $values["loan_id"]; 
$result = mysql_query($query); 
if (!$result) { 
    echo "Wrong input"; 
} else { 
    echo "right input"; 
} 

Anstelle der Zeichenfolge echos Sie ganze Seiten nach Ihrem Bedarf oder Verwendung Redirect laden können, wenn Sie nur knapp sein Ziel Ausgang alles schon

+0

Das ist doppelt so viel Arbeit. –

+0

Stimmt, aber es ist viel klarer, was Sie tun. Und da jeder Code irgendwann wächst oder in ähnliche Fälle kopiert wird, können Sie leicht erkennen, wo Sie zwischen verschiedenen Fehlern unterscheiden müssen. – Johanness

+1

Nur zur Klarstellung, ich meinte doppelt so viel Arbeit für den Server. "Zu viel Arbeit" ist niemals eine Entschuldigung für einen Entwickler. :) Wenn Sie mehr überprüfen möchten, als wenn es sich um einen doppelten Schlüssel handelt, müssen Sie etwas Ähnliches wie Ihren Vorschlag machen, aber da wir nur überprüfen, ob es sich um einen Duplikatsschlüssel handelt, ist die Suche nach einem Fehler beim Einfügen der effizienteste Weg. Es ist nur eine Reise zum Server statt zwei. In Ihrem Fall würde ich zumindest die Spalte load_id auswählen. –

Verwandte Themen