Hi phpdummi
Danke für deine Mühe und Ausführliche Antwort
Der "Mix" ist erst durch das herumprobieren entstanden, da ich probieren wollte, ob die Probs etwas damit zu tun hätten.
Ursprünglich stand in dem Code nur die Variante mit "script language".
Es scheint ein Mißverständnis zu geben, weil in meinem script der Begriff header 2x unterschiedlich verwendet wird.
Die include - Zeile die du an den Anfang gesetzt hast:
Code:
include "includes/header.inc.php";
.... steht gar nicht in meinem script.
Allerdings steht die Zeile:
Code:
include "includes/header.inc";
... allerdings nicht in der seite "kontaktform2.inc" welche das script enthält, sondern in der html - datei, welche durch include dieses Formular erst aufruft.
Diesee header.inc enthält aber gar keine header - Anweisungen, sondern ist nur der "Kopfteil" der Seite, mit logo, etc und heisst nur desshalb "header".
Es gibt nur eine header - Anweisung und die steht auf der seite "kontaktform2.inc" mit der Anweisung:
Code:
// Wechsel auf Vorschau
header("Location: tnx.php");
die;
Soweit ich das behirnen kann, ruft jemand die html Datei (kontakt2.html) auf.
Diese gibt brav, den includierten "header"- also den Seitenkopf, aus und includiert dann die Seite "kontaktform2.inc" bevor sie den "Footer" mit dem Impressum darstellt("longimpressum.inc").
Beim drücken des submit - Buttons im Formular wird die Funktion zum "Selbstaufruf" gestartet und erst jetzt beginnt der kritische Teil des Scriptes zu laufen.
- Das Script
prüft ob sich die Seite selbst aufgerufen hat oder das 1. mal aufgerufen wird.
- Das Script
prüft ob die Pflichtfelder ausgefüllt sind.
- Das Script
prüft das Captcha
- Wenn das alles passt wird zur Datenbank verbunden und die Daten eingetragen. (Sicherheitsaspekte versuche ich später zu behirnen).
SO UND JETZ KOMMTS:
- NACH dem Eintrag in die Datenbank soll eine Vorschau- Seite("tnx.php) mit den Daten gezeigt werden, die diese aus der DB liest und das aktuelle script soll "sterben".
Natürlich steht in der Seite mit dem Kontaktformular VOR dem Aufruf der Weiterleitung was d'rinnen. Denn sonst könnte ich ja kein Formular ausgeben das das script ja erst auslöst.
Außerdem erklärt das alles ja nicht den mystischen Umstand, dass durch die bloße Änderung der <div> tags durch <p> das ganze Werkel plötzlich funktioniert.
Denn dadurch ( funktioniert nicht mit den CSS - Tags div, span etc ...) wäre auch deine Anregung:
** Tabellen die zu Layout-Zwecken missbraucht werden sind schlecht. **
... nicht realisierbar, denn um das ohne Tabelle hinzukriegen müsste ich erst recht divs und spans verwenden.
Um es zu verdeutlichen:
Das funktioniert:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="description" content="xxx">
<meta name="KeyWords" content="xxx">
<meta http-equiv="expires" content="0" />
<meta http-equiv="content-language" content="de" />
<meta http-equiv="cache-control" content="no-cache" />
<meta name="author" content="xxxx" />
<title>Kontakt2</title>
<link rel="stylesheet" type="text/css" href="formate.css"></link>
<link rel="shortcut icon" href="../pics/favicon.ico" type="image/x-icon"></link>
</head>
<body>
<script language="php">
include "includes/header.inc";
include "includes/navlineshort.inc";
$chCounter_visible = 0;
$chCounter_page_title = "KONTAKT2";
include"cntr/counter.php";
</script>
<p style="color:#FFCC00" align="center">
<h1>KONTAKT2</h1>
<h2>Bitte nehmen Sie über folgendes Formular Kontakt zu mir auf.</h2>
<h3>Durch die serverseitige Verarbeitung des Formulars, wird der Versuch Dritter unterbunden auf sensible Daten zuzugreifen. </h3>
<br /><br />
</p>
<p align="center">
<script language="php">
include "includes/kontaktform2.inc";
</script>
</p>
<script language="php">
include "includes/longimpressum.inc";
</script>
</body>
</html>
Und DAS funktioniert NICHT :
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="description" content="xxx">
<meta name="KeyWords" content="xxx">
<meta http-equiv="expires" content="0" />
<meta http-equiv="content-language" content="de" />
<meta http-equiv="cache-control" content="no-cache" />
<meta name="author" content="xxxx" />
<title>Kontakt2</title>
<link rel="stylesheet" type="text/css" href="formate.css"></link>
<link rel="shortcut icon" href="../pics/favicon.ico" type="image/x-icon"></link>
</head>
<body>
<script language="php">
include "includes/header.inc";
include "includes/navlineshort.inc";
$chCounter_visible = 0;
$chCounter_page_title = "KONTAKT2";
include"cntr/counter.php";
</script>
<div style="color:#FFCC00" align="center">
<h1>KONTAKT2</h1>
<h2>Bitte nehmen Sie über folgendes Formular Kontakt zu mir auf.</h2>
<h3>Durch die serverseitige Verarbeitung des Formulars, wird der Versuch Dritter unterbunden auf sensible Daten zuzugreifen. </h3>
<br /><br />
</div>
<div align="center">
<script language="php">
include "includes/kontaktform2.inc";
</script>
</div>
<script language="php">
include "includes/longimpressum.inc";
</script>
</body>
</html>
WARUM ??
lg
phpels
Zitat:
Zitat von phpdummi - Du solltest den Mix aus <script language="php"> und <? lassen.
Verwende am Anfang eines Blocks mit PHP-Code am besten <?php und ende mit ?> - Das gilt besonders für den Block den du mit <script language="php"> beginnst und mit ?> beendest.
- Die PHP-Funktionen header(); und session_start(); müssen zwingend VOR jeder Ausgabe an den Browser aufgerufen werden. Das schließt, wie bereits gesagt, Leer- und Sonderzeichen, wie BOM (->Google) mit ein.
- Beachte dies insbesondere bei deinen if-Anweisungen.
- Wenn du den Server nicht explizit dazu anweist, werden *.inc Dateien nicht als PHP geparst, sondern deren Inhalt an den Browser gesendet.
Das hat zur Folge, dass eventuell vorhandene Emailadressen, Passwörter o.ä. eingesehen werden können. - Durch die Verwendung von $_REQUEST[$key]; ist nicht sichergestellt WOHER die Daten kommen. Sie könnten auch aus der Session, dem Cookie oder aus übergebenen Parametern kommen.
- Nutze deshalb $_GET oder besser noch $_POST.
- Durch die ungefilterten Daten in deinen Querys können Angreifer die Datenbank manipulieren.
- Zu diesem Thema, SQL Injection, gibt es Tonnenweise Informationen im Netz - einen Einstieg gibt dir das Wiki dieses Forums.
- Tabellen die zu Layout-Zwecken missbraucht werden sind schlecht.
- Dein Problem ist auf die genannten Punkte zurückzuführen, durch die Änderung von Tags ist es nicht gelöst.
Dein Script sollte also so beginnen: PHP-Code: <?php
error_reporting(E_ALL);
session_start();
// in den eingebundenen Dateien darf nichts ausgegeben werden
// die Funktion header() sendet nur einen HTTP-Header, keinen Inhalt
include "includes/header.inc.php";
include "includes/navlineshort.inc.php";
$chCounter_visible = 0;
$chCounter_page_title = "KONTAKT2";
include"cntr/counter.php"; // "cntr" -> Verzeichnisnamen brauchen nicht gekürzt werden. "counter" trifft es auch
include("ikenndifunctions.inc.php"); // Dialekte machen den Code auch nicht schöner
// schon gar nicht mit Fremdsprachen gemischt
// Prüfen, ob sich die Seite selbst aufgerufen hat
if ( isset($_REQUEST["do"]) && $_REQUEST["do"] == "insert" )
{
// Die Seite hat sich selbst aufgerufen
// Pflichtfeldkontrolle
$error_msg = "";
// verwende $_POST
if ( $_REQUEST["Vorname"] == "" )
{
$error_msg = "Bitte geben Sie einen Vornamen an.<br>";
}
if ( $_REQUEST["Zuname"] == "" )
{
$error_msg .= "Bitte geben Sie einen Zunamen an.<br>";
}
if ( $_REQUEST["email"] == "" )
{
$error_msg .= "Bitte geben Sie eine email Adresse an.<br>";
}
if ( $_REQUEST["Anliegen"] == "" )
{
$error_msg .= "Bitte geben Sie ein Anliegen ein .<br>";
}
// CAPTCHA
// gehört nach oben --^ an den Anfang des Scriptes
// session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
}
else{
$error_msg .= "Der Sicherheitscode ist falsch.<br>";
}
// End CAPTCHA
if ( $error_msg == "")
{
// Alles o.k.
// Datenbank-Zugriff
mysqlconnect();
// INSERT
$query = "INSERT INTO ikenndi(Vorname, Zuname, frmAdresse, frmPLZ, frmOrt, frmTelNr, email, Anliegen) VALUES ( ";
$query .= " '" . $_REQUEST["Vorname"] . "', ";
$query .= " '" . $_REQUEST["Zuname"] . "', ";
$query .= " '" . $_REQUEST["frmAdresse"] . "', ";
$query .= " '" . $_REQUEST["frmPLZ"] . "', ";
$query .= " '" . $_REQUEST["frmOrt"] . "', ";
$query .= " '" . $_REQUEST["frmTelNr"] . "', ";
$query .= " '" . $_REQUEST["email"] . "', ";
$query .= " '" . $_REQUEST["Anliegen"] . "' ";
$query .= " ) " ;
// In die Datenbank eintragen
$result = mysql_query( $query );
if ( ! $result )
{
die("Konnte den Datensatz nicht eintragen: " . mysql_error() );
}
// Wechsel auf main
header("Location: tnx.php");
die;
}
}
.. usw.
?> |