PHP Weiterleitung einrichten
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anweisung
arbeiten
ausgabe
browser
code
datei
datenbank
funktion
funktionieren
header
http
manual
post
senden
stil
test
url
weiterleitung
zahl
zeile
-
Hallo Zusammen,
Ich habe ein Problem bezüglich der header() Funktion in PHP.
Ich möchte gerne eine weiterleitung innerhalb einer 2ten Datei erhalten.
In Datei 1 wird ein Formular ausgefüllt und per AJAX an Datei 2 geschickt. Dort werden die Werte mit einer Datenbank überprüft und aufgelistet wie viele Einträge vorhanden sind.
Wenn die Zahl 1 beträgt bzw. Größer als 0 ist soll per header() auf die seite test.html geleitet werden. (Sprich wenn Zahl Größer als 0 dann soll Datei 1 auf test.html landen.
Hier einmal das PHP Script aus Datei2 in der die Weiterleitung drin steht.
<?php session_start(); include("connect/config.php"); // Verbindungsvariable samt Zugangsdaten festlegen @$db = mysqli_connect($url, $user, $password, $datenbank); $username = strip_tags($_POST['username']); $password = $_POST['password']; //Überprüfung ob User Vorhanden ist $check_data = $db->query("SELECT * FROM users WHERE password='$password'"); $row = $check_data->fetch_object(); $check_data_return = $check_data->num_rows; if ($check_data_return > 1){ echo $check_data_return; } else{ echo $check_data_return . "Testweiterleitung"; header('Location: test.html'); exit(); } mysqli_close($db); ?>
Hat da vielleicht jemand eine Idee?
LG
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das wird so nicht funktionieren, musst dir einen anderen Weg suchen, möglicherweise per JavaScript.
header() muss IMMER am Anfang der Datei aufgerufen werden, das kann man nicht einfach nach Lust und Laune im Code machen. Siehe hier.
Besonders folgender Abschnitt sollte dich aufklären:
Beachten Sie, dass Sie die Funktion header() aufrufen müssen, bevor Sie irgendeine andere Art von Ausgabe (seien es normale HTML-Tags, Leerzeilen in einer Datei oder von PHP) zum Client schicken. Es handelt sich hier um einen typischen Fehler, der zum Beispiel auftritt, wenn Sie Code mittels include oder require oder einer anderen Dateizugriffs-Funktion einlesen, die Leerzeichen oder Leerzeilen enthalten, die ausgegeben werden, bevor header() aufgerufen wird. Das gleiche Problem kann auch auftreten, wenn Sie eine Datei verwenden, in der HTML und PHP vermischt wurden.
-
habe nur mal kurz draufgeguckt:
Der große Nachteil einer PHP-Weiterleitung ist, dass Du den header vorher nicht senden darfst
Wenn Du per ECHO vorher etwas am Bildschirm ausgibst, dann wird leider immer vorher der Header gesendet
Du hast folgende Möglichkeiten:
- Vorher nichts ausgeben (echo)
- Ausgaben per Flush puffern
- HTML-Weiterleitung
- Java-Weiterleitung
Die einfachste Lösung dürfte meines Erachtens die HTML- Weiterleitung sein -
Hallo,
eigentlich machst du ja den post mit Ajax, wenn du die Daten an datei_2.php senden willst, aber im Browser auf datei_1.html bleiben willst, d.h. datei_2.php soll nicht aufgerufen werden.
Wenn du aber sowieso mit Umleitungen arbeiten willst, genügt ein gewöhnlicher post (ich nutze get sowieso nie).
Vielleicht kannst du, wenn du dein Design überdenkst, auch mit einer automatischen meta-Weiterleitung arbeiten, was oft besser ist als die header-Anweisung, die wie ra1n schon richtig gesagt hat, immer oben stehen muss:
<head> <meta http-equiv="refresh" content="5; URL=test.html"> </head>
Was soll denn passieren, wenn die Zahl der Datenbankeinträge gleich 0 ist? Wäre es nicht einfacher, so oder so auf eine Seite weiterzuleiten und abhängig vom Wert dort mit einer if else-Anweisung zu arbeiten? Oder du arbeitest auschließlich mit Ajax Techniken und machst alles dynamisch.
Vielleicht beschreibst du dein Vorhaben etwas genauer, damit wir wissen um was es ganau geht.
Gruß -
hallo
lass einfach die Zeile mit der Ausgabe (echo) ganz weg:
echo $check_data_return . "Testweiterleitung";
ohne diese Zeile sollte es funktionieren,
wenn du auch sonst vorher keine Ausgabe im browser machst
und .... User-Eingaben immer escapen, als Schutz vor SQL-Injection (hacking)
bevor du diese in einer MySQL Abfrage verwendest
... $username = strip_tags($_POST['username']); $password = $_POST['password']; $username = $mysqli->real_escape_string($username); $password = $mysqli->real_escape_string($password); ...
siehe dazu: http://www.php.net/manual/de/mysqli.real-escape-string.php
neben dem "Objektorientierten Stil" gibt es auch den "Prozeduralen Stil",
siehe php Manual ... Beispiele
Beitrag zuletzt geändert: 24.3.2014 6:54:32 von live-chat -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage