php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.11.2008, 01:01  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Header Location funktioniert nicht, wenn div's oder span's auf der Seite s

Ich, als Newbie, quäle mich nun seit einigen Stunden um herauszufinden, warum der Aufruf einer neuen Seite aus einer anderen nicht funktioniert und bin auf den Umstand gestoßen, den ich im Titel der Nachricht formuliert habe.

Das Ganze ist teil eines Kontaktformulars, das ich zu basteln versuche.

Darin gibt es eine Seite, die die Kontakte in einer Datenbank speichert, und dann eine Seite aufruft, die eine Vorschau zeigt.

Die Seite mit der Dateneingabe sollte ursprünglich so aussehen:

Es ist eine html - Datei, aber via .htaccess ist eingestellt, dass auch html und htm Dateien geparsed werden ...

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>
<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 &uuml;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>
Das eigentliche Kontaktformular (kontaktform2.inc) das via include eingebunden wird. sieht so aus:

Code:
<script language="php">
include("ikenndifunctions.inc.php");
 
 // 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	=	"";    
	
	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


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



?>

</script>

<span class="errormessage">
	<?php
	    if ( $error_msg != "")
	    
	    {
		
		echo $error_msg;
		
	    }
	?>
	</span>

<form action="<?php echo $_REQUEST["PHP_SELF"]; ?>" method="POST" >
 <input type="hidden" value="kontakt2.html" name="referer">
  <table style="color:#FFCC00; font-weight:bold;">
    
  
  <tr>
    <td style="font-weight:bold;">* = Eingabe erforderlich</td><td> </td>
  </tr>
  <tr>
    <td>Vorname*:</td><td> <input type="text" name="Vorname" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>Zuname*:</td><td> <input type="text" name="Zuname" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>Adresse:</td><td> <input type="text" name="frmAdresse" size="80" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>PLZ:</td><td> <input type="text" name="frmPLZ" size="20" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>Ort:</td><td> <input type="text" name="frmOrt" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>Telefonnummer:</td><td> <input type="text" name="frmTelNr" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>Email*:</td><td> <input type="text" name="email" size="20" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
  </tr>
  <tr>
    <td>Anliegen*:</td><td> <textarea rows="4" name="Anliegen" cols="40"style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></textarea></td>
  </tr>
  <tr>
  <td align="left" width="10%"><input type="hidden" name="do" value="insert"></td>
  </tr>
  </table>
  Enter security code:<br />
<input type="text" name="sicherheitscode" size="5"><br />
<br />
Sollten Sie den Code nicht lesen k&ouml;nnen, dr&uuml;cken sie in ihrem Browser auf &quot;reload&quot um ihre Eingaben zu behalten und einen anderen Code angezeigt zu bekommen.<br />
  <p><input type="submit" value="Absenden" name="submit"><input type="reset" value="Reset" name="B2"></p>
  <img src="../captcha/captcha.php" border="0" title="Sicherheitscode"><br />
  
 <br />
    </form>

Die Stelle im Formular wo ich auf die Vorschau - Seite wechseln möchte:
PHP-Code:
    // Wechsel auf main
        
header("Location: tnx.php");
        die; 
Funktionierte nicht und mir war nicht ersichtlich warum.

Jetzt glaube ich entdeckt zu haben, daß wenn ich in der ursprünglichen Seite in der das Formular included ist, alle <div> oder <span> Bereiche zu <p> mache, die Weiterleitung auf einmal funktioniert.

Nur stimmen dann eben die Formatierungen nicht.

Ist das normal ?
Auch wenn irgendwo auf der Ursprungs - Seite, ein <div> Bereich steht, der gar nichts mit dem Formular - Teil zu tun hat funktioniert die Weiterleitung mit "header location" einfach nicht.

Absurder Weise darf allerdings auf der inkludierten seite mit dem Formular sehr wohl ein <span> Bereich stehen...

Ist das so, oder habe ich ein Brett vorm Kopf ?

lg
phpels
phpels ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.11.2008, 01:37  
Erfahrener Benutzer
 
Benutzerbild von tomtaz
 
Registriert seit: 17.06.2008
Beiträge: 1.762
PHP-Kenntnisse:
Fortgeschritten
tomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig nett
tomtaz eine Nachricht über ICQ schicken tomtaz eine Nachricht über Skype™ schicken
Standard

Wenn du amfang deines Scriptes
PHP-Code:
<?php
error_reporting
E_ALL );
?>
setzt wirst du wissen warum es nicht geht. Es dürfen keinerlei ausgaben vor Header anweisungen sein. Also auch kein Leerzeichen, Leerzeilen, einfach gar nichts.

Aber auch das wird dir die Fehlermeldung sagen.
__________________
Mfg Tomtaz
"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..."
tomtaz ist offline  
Alt 28.11.2008, 01:37  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Das header funktioniert nicht, weil du vorher schon html-code ausgibst.

header() sendet http-header, diese müssen aber gesendet werden, bevor die erste ausgabe an den Browser erfolgt.

Du solltest am besten Layout (dein HTMl-Output) vom eigentlichen Code trennen, z.b. mit eine Template-Engine oder durch output-buffering mit ob_start(), die Ausgabe bis zum ende des Scripts unterbinden.

Desweiteren solltest du dich mal mit dem Thema SQL-Injection auseinandersetzen, weil du deine Daten (scheinbar) ungeprüft in einem Query verwendest.

//edit ... :P paar Sekunden zu spät :P
robo47 ist offline  
Alt 28.11.2008, 02:04  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard <Gulp>

Um Gottes Willen.

Vieles verstehe ich nicht und werde nach etwas Schlaf versuchen eure Hinweise umzusetzen.

Da ich eben völlig unbeleckt in php bin wird das ein hartes Stück Hirnarbeit ...

Eines aber ist mir weiterhin unklar:

Wenn ich an den Seiten NICHTS ANDERES veränder, als statt <div> oder <span> einfach <p> zu schreiben, dann funktioniert die Weiterleitung, egal ob vorher was steht oder nicht ....

lg und Gute Nacht
phpels
phpels ist offline  
Alt 28.11.2008, 06:50  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

  1. Du solltest den Mix aus <script language="php"> und <? lassen.
    Verwende am Anfang eines Blocks mit PHP-Code am besten <?php und ende mit ?>
  2. Das gilt besonders für den Block den du mit <script language="php"> beginnst und mit ?> beendest.
  3. 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.
  4. Beachte dies insbesondere bei deinen if-Anweisungen.
  5. 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.
  6. 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.
  7. Nutze deshalb $_GET oder besser noch $_POST.
  8. Durch die ungefilterten Daten in deinen Querys können Angreifer die Datenbank manipulieren.
  9. Zu diesem Thema, SQL Injection, gibt es Tonnenweise Informationen im Netz - einen Einstieg gibt dir das Wiki dieses Forums.
  10. Tabellen die zu Layout-Zwecken missbraucht werden sind schlecht.
  11. 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.
?>
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 28.11.2008, 12:57  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard

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 &uuml;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 &uuml;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 Beitrag anzeigen
  1. Du solltest den Mix aus <script language="php"> und <? lassen.
    Verwende am Anfang eines Blocks mit PHP-Code am besten <?php und ende mit ?>
  2. Das gilt besonders für den Block den du mit <script language="php"> beginnst und mit ?> beendest.
  3. 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.
  4. Beachte dies insbesondere bei deinen if-Anweisungen.
  5. 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.
  6. 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.
  7. Nutze deshalb $_GET oder besser noch $_POST.
  8. Durch die ungefilterten Daten in deinen Querys können Angreifer die Datenbank manipulieren.
  9. Zu diesem Thema, SQL Injection, gibt es Tonnenweise Informationen im Netz - einen Einstieg gibt dir das Wiki dieses Forums.
  10. Tabellen die zu Layout-Zwecken missbraucht werden sind schlecht.
  11. 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.
?>

Geändert von phpels (28.11.2008 um 13:16 Uhr). Grund: Zusatz
phpels ist offline  
Alt 30.11.2008, 01:29  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard Sicherheitsaspekte

Hi phpdummi

Ich habe das ursprüngliche Problem mal so gelöst, dass ich den <div> Teil in der Html - Datei einfach in die .inc Datei mit dem Script verlegt habe und dann funktioniert's auch.

Jetzt versuche ich mal den Sicherheitsaspekt zu behirnen.

Gemäß deinem Vorschlag in Punkt 6/7 habe ich alle $Request Anweisungen in $Post umgewandelt.

Was die SQL-Injections betrifft, bin ich momentan noch arg überfordert, weil ich keine Idee habe, wie ich meinen Code in POD umschnitzen soll. (Ich habe zwar via Google verschiedene Seiten zu dem Thema angesehen, verstehe aber wenn's darum geht das konkret umzusetzen nur "Bahnhof")

Gibts da gute/verständliche Tutorials ?



Zitat:
Zitat von phpdummi Beitrag anzeigen
  1. Du solltest den Mix aus <script language="php"> und <? lassen.
    Verwende am Anfang eines Blocks mit PHP-Code am besten <?php und ende mit ?>
  2. Das gilt besonders für den Block den du mit <script language="php"> beginnst und mit ?> beendest.
  3. 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.
  4. Beachte dies insbesondere bei deinen if-Anweisungen.
  5. 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.
  6. 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.
  7. Nutze deshalb $_GET oder besser noch $_POST.
  8. Durch die ungefilterten Daten in deinen Querys können Angreifer die Datenbank manipulieren.
  9. Zu diesem Thema, SQL Injection, gibt es Tonnenweise Informationen im Netz - einen Einstieg gibt dir das Wiki dieses Forums.
  10. Tabellen die zu Layout-Zwecken missbraucht werden sind schlecht.
  11. 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.
?>
phpels ist offline  
Alt 30.11.2008, 01:50  
PTC
Erfahrener Benutzer
 
Benutzerbild von PTC
 
Registriert seit: 27.10.2007
Beiträge: 1.708
PHP-Kenntnisse:
Anfänger
PTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nett
Standard

Ich bin gerade mit dem Post nicht so vertraut, aber ich glaube David möchte dich auf die Nutzung von htmlentities() und mysql_real_escape_string() hinweisen.
PTC ist offline  
Alt 30.11.2008, 02:00  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Unter anderem auch das, ja
David ist offline  
Alt 30.11.2008, 02:02  
PTC
Erfahrener Benutzer
 
Benutzerbild von PTC
 
Registriert seit: 27.10.2007
Beiträge: 1.708
PHP-Kenntnisse:
Anfänger
PTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nett
Standard

Was denn noch?

OT:Sag mal David kann es sein, dass du unsichtbar bist?
PTC ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] header location krackmoe PHP Tipps 2008 10 30.07.2008 14:41
Krieg kein Objekt zurück auf includeter Seite NONNNNN PHP Tipps 2008 5 28.03.2008 19:25
DIVs auf "echte" 100% der Seite setzen? King2k HTML, Usability und Barrierefreiheit 3 07.12.2005 15:15
Cookies &amp;amp; Sessions. Seite funktioniert nur mit Reload PHP-Fortgeschrittene 4 18.09.2005 00:48
Header Location Suchmaschinentauglich? DonTermi Beitragsarchiv 5 16.08.2005 12:22
Nach Serverumzug funktioniert die Seite nicht mehr PHP Tipps 2005-2 33 28.06.2005 14:03
[Erledigt] Nach Serverumzug funktioniert die Seite nicht mehr PHP-Fortgeschrittene 1 26.06.2005 23:07
Nach Serverumzug funktioniert die Seite nicht mehr PHP-Fortgeschrittene 9 26.06.2005 23:04
Header Location aus Frame für die ganze Seite laden Plague PHP Tipps 2005 3 22.05.2005 16:06
zu anderer php.seite umlenken (ohne header, location:) PHP Tipps 2005 8 06.04.2005 09:42
DIVs visible -> hidden beim Laden der Seite HTML, Usability und Barrierefreiheit 2 03.03.2005 22:20
header (location: $var) PHP Tipps 2005 14 19.01.2005 10:37
Seite drucken ohne Header etc. andrew22 HTML, Usability und Barrierefreiheit 3 28.12.2004 13:52
Location String in printer friendly Seite mitgeben PHP Tipps 2004-2 14 09.12.2004 17:27
PhP seite funktioniert nicht auf Linux Server Server, Hosting und Workstations 10 01.09.2004 22:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php seite wechseln ohne header, header location div, http://www.php.de/php-tipps-2008/49392-erledigt-header-location-funktioniert-nicht-wenn-divs-oder-spans-auf-der-seite-s.html, header location funktioniert nicht mit css, header location, header location funktioniert nicht, php header und include, header location geht nicht, header anweisung weiße seite, gemischt aus php icludes und html, header \'location \' funktioniert nicht mehr, php seitenwechsel ohne header, php include inc liest nicht, nach header location funktioniert css datei nicht, title tag mit header location, php seite wechsel ohne header, nach include funktioniert header nicht mehr php, content, php header funzt nicht nach include, header location funktioniert nicht bei include

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum