Wie am besten lösen?

Armer Saftmeister..

Ich glaube ihm fehlen die grundlegensten Sachen.
Erst einmal empfehle ich mal deine komplette Programmierstruktur zu überdenken.
Stell dir bitte eine Apfelsine vor. Bildlich gesprochen wird diese von einer Schale geschützt.
Dies wollen wir jetzt auf dein Problem umsetzen.

PHP:
<?
/*
File: index.php
Erstellt: heute
Management alle Funktionen
*/
ob_start();             // direkte Ausgabe unterdrücken
// SQL-Server connect
// Programmfunktionen laden
// 1.Schritt Sicherheitsprüfung
// Login
if (!pruefe_login()) {
    ob_clean;
    echo zeige_login();
    ob_end_flush();
    die;
}
// Validierung der Daten die übergeben werden.
$allowed_post = Array('id'  =>  1,'irgendwas' => 2);
FOREACH ($_POST AS $k=>$v) {
    IF (!IsSet($allowed_post[$k]))
        unset($_POST[$k]);
    ELSE
        SWITCH ($allowed_post) {
            CASE 1: $_POST[$k] = (int)$v; BREAK;
            CASE 2: $_POST[$k] = mysql_real_escape_string($v); BREAK;
        }
}
// 2.Schritt Programmanweisungen ausführen
do_action();
// 3. Schritt Programmausgabe
IF (IsSet($_COOKIE['debug']))
    echo ob_get_clean();
ELSE
    ob_clean();
    
echo echo_action();
// SQL-Serververbindung schließen
// 4. System beenden, Ausgabe erzwingen
mysql_close();
ob_end_flush();
?>

Nur einmal als Gedankenstütze. Habs jetzt nur schnell mal hingekritzelt. Da musst nur noch was draus machen. Andernfalls würde ich dir empfehlen, dein Programm vom Netz zu nehmen. Es weist markante Sicherheitslücken auf. Sollte dies für ein Unternehmen programmiert worden sein, so wäre es in meinen Augen eine Straftat, über die Tatsache nicht zu informieren.

Baue dir ein Konzept--> Datensicherheit --> Aufbau --> etc.

Wenn du den Code in einem vernünftigen lesbaren Format umgeschrieben hast, kannst dich ja nochmal melden.
Ich glaub sonst treibst den armen Saftmeister noch in den Wahnsinn. ;)

PS: übrigens ist
PHP:
?>
<?php
das eine Bildschirmausgabe. Wird das nicht gebuffert, könnte da der Fehler liegen
 
Zuletzt bearbeitet:
Bei allem was ich anfasse ist es leider so das ein großes Chaos entsteht xD sry dafür,
Werde mich mal heute Nacht hinsetzen und alles umschreiben, es ist außerdem nicht für ein Unternehmen sondern es soll eine kleine Plattform für meine Klasse werden , wo sie alle weiteren Infos bzw Verträge für die weiteren Arbeiten am Maturaball bekommen

Hi Grubi:
Vl kannst du mir helfen , habe das Grundgerüst von dir bekommen was auch super funktionierte, nur leider durch die umstellung auf mysql v5 funktioniert die Head funktion nicht mehr , aber vl hättest du eine Lösung

Lg

patrick
 
so habe jetz ein wenig sauber gemacht

Katalog_bearbeiten
Infos: Zuerst wird die seite Kataloge.php geöffnet wo alle meine verschiedenen Bereiche eingetragen sind wie z.B.: Sponsoring über den button Bearbeiten werde ich samt der ID auf katalog_bearbeiten.php weitergeleitet, wo dort dann die ID eben wieder abgerufen wird um sie weiter zubearbeiten

Code:
<?
//Katalog_bearbeiten.php
//überprüfung ob user eingelogt ist
ob_start();  
session_start();

if(!session_is_registered('user') || $_SESSION['user'] == "") {
	 ob_end_flush();
	header("location:index.php");
	die;
	
}
require("connect.inc.php");
//Ende der überprüfung

//Abfrage der mitgesendeten ID einer anderen Seite
$userid = false;

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(isset($_POST['id']) && ctype_digit($_POST['id']))
    {
        $userid = $_POST['id'];
	
// Tabellen im Formular Variablen zuordnen + endern
    $id = $_POST['id'];
  	$begr = $_POST['begr'];
	$punkte = $_POST['punkte'];
	$posne = $_POST['posne'];


     $aendern = "UPDATE katalog
	 	Set
			`begr` = '$begr',
			`punkte` = '$punkte',
			`posne` = '$posne'
		

	  WHERE `id` = $userid";
     $update = mysql_query($aendern);	
	 
	  }else{
		
		// valdiierung kommt nocht
		
 //Wenn update ausgeführt wird
  
	    if(isset($_POST['submit']))
        {
	 header('Location:sichere_seite.php?page=katalog_erfolg');		
        }
		else
		{
		echo "Fehler!";
		}
		
    }
}
elseif(isset($_GET['id']) && ctype_digit($_GET['id']))
{
    $userid = $_GET['id'];
}

if($userid !== false)
{

    $sql = "SELECT id, posne, punkte, begr FROM `katalog` WHERE `id` = ".$userid;
    $result = mysql_query($sql);
    if(mysql_num_rows($result) == 1)
    {
        $userdata = mysql_fetch_object($result);
	

       // Formular aufbauen und Felder mit den Daten füllen
        // als action-Pfad wieder den Dateinamen wählen (z.B. site.php?page=benutzer_bearbeiten)
        // ein (hidden-)Feld mit der BenutzerID erstellen das id heißt
        // falls es beim abschicken (POST-TEIL) Fehler gab, kannst du eventuell die Daten aus dem POST nehmen, anstatt die Daten aus der Datenbank. Das ist dir überlassen ;)
    }
    else
    {
        // Fehlermeldung: Benutzer nicht gefunden!
    }
}
else
{
    // Fehlermeldung: Ungültige Anfrage
} 

?> 
	/// AB HIER IST NURNOCH DAS FORMULAR
	
		<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
	<title>Neuen Benutzer anlegen</title>
<link rel="stylesheet" type="text/css" href="style.css"></head>
<body>
<form action="sichere_seite.php?page=katalog_bearbeiten" method="post">
<table width="399" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center">
	<tr>
		<td bgcolor="#e7e7e7" align="center" colspan="2"><strong>Katalog bearbeiten 
		    <input name="id" type="hidden" class="input" value="<? echo "$userid" ?>" size="20">
		</strong></td>
	</tr>
	<tr>
      <td width="158" bgcolor="#e7e7e7">Aufgabe</td>
	  <td width="218" bgcolor="#ffffff"><input type="text" bgvolor="#e7e7e7" name="begr" value="<? $benabf = "SELECT begr FROM `katalog` WHERE `id` = ".$userid;
	  $ergbenabf = mysql_query($benabf);
  while($row = mysql_fetch_object($ergbenabf))
    {
    echo $row->begr;
    }


	  ?>" size="20" class="input">
      </label></td>
    </tr>
	<tr>
      <td bgcolor="#e7e7e7">Punkte</td>
	  <td bgcolor="#ffffff"><label>
	    <input type="text" bgvolor="#e7e7e7" name="punkte" value="<? $benabf = "SELECT punkte FROM `katalog` WHERE `id` = ".$userid;
	  $ergbenabf = mysql_query($benabf);
  while($row = mysql_fetch_object($ergbenabf))
    {
    echo $row->punkte;
    }


	  ?>" size="20" class="input">
	  </label></td>
    </tr>
	<tr>
      <td bgcolor="#e7e7e7">+,-</td>
	  <td bgcolor="#ffffff"><label></label>
	    <select name="posne">
		<option value="<? $benabf = "SELECT posne FROM `katalog` WHERE `id` = ".$userid;
	  $ergbenabf = mysql_query($benabf);
  while($row = mysql_fetch_object($ergbenabf))
    {
    echo $row->posne;
    }

	  ?>" selected><? $benabf = "SELECT posne FROM `katalog` WHERE `id` = ".$userid;
	  $ergbenabf = mysql_query($benabf);
  while($row = mysql_fetch_object($ergbenabf))
    {
    echo $row->posne;
    }

	  ?></option>
          <option value="0">Ausw&auml;hlen</option>
          <option value="+">+</option>
          <option value="-">-</option>
                </select></td>
    </tr>
	<tr>
	  <td bgcolor="#e7e7e7" align="center" colspan="2"><label></label></td>
    </tr>
	<tr>
		<td bgcolor="#e7e7e7" align="center" colspan="2">
		<input type="submit" name="submit" value="Datei bearbeiten" class="button">		</td>
	</tr>
	<tr>
		<td bgcolor="#e7e7e7" align="center" colspan="2">
		<a href="sichere_seite.php">Zur&uuml;ck zur Admin-Seite</a>		</td>
	</tr>
</table>
</form>
</body>
</html>
<?
mysql_close();
ob_end_flush();
?>

Sicher_seite.php
Die Sichere seite ist ganz einfach die seite wo alles abgefragt wird Also dort werden die ganzen Buttons eingefügt bzw der Content angezeigt deshalb eigendlich nur bestehent aus HTML und MYSQL select abfragen


hoffe dass es jetzt ein wenig sauberer ist ;=)

wenn ich es so mache wie oben geschrieben bekomme ich weder eine Fehlermeldung noch sonst was mhmmm ....wieso muas des so deppat gmocht werdn bei mysql v5 ^^
 
Das hat IMHO nichts mit MySQL 5 zu tun, sondern eher mit den Einstellungen von PHP5. PHP5 setzt einen etwas sauberen Programmierstil voraus. Das kann nicht deppert sein, wie du es so schön ausdrückst.
 
Fehlerbehandlungen sollte in den Händen des Programmierers liegen. Deswegen ist eine gewisse Struktur die Voraussetzung.

Zu deinem Problem nochmal:

Datei die Aufgerufen wird:
PHP:
<?php 

ob_start();

INCLUDE(...);

...

// Ausgabe
echo '...';
ob_end_flush();
?>

Die Validierung deiner Daten findet im aktuellen Beispiel immernoch nicht statt. Ich glaube ohne das ganze Porjekt zu kennen ist es verdammt schwer dir den Fehler zu zeigen. So weiß ich immernoch nicht ob denn "Katalog_bearbeiten.php" aufgerufen wird oder diese nur per Include eingebunden wird.

PHP:
<?php
if(!session_is_registered('user') || $_SESSION['user'] == "") {
	header("location:index.php");
//	 ob_end_flush();
	die;
	
}
?>
Bitte das so ändern. Headerangaben können nur gesendet werden wenn noch kein Content ausgegeben wird. Zumindest bei PHP ;)
Deswegen wird der Ausgabebuffer erst nach der Headeranweisung ausgegeben. Im übrigen glaube ich, dass du den Buffer gar nicht ausgeben musst, da es sich um eine Weiterleitung handelt. Hieße ja sonst nur unnötiger Traffic.
Habs mal auskommentiert.
 
Zurück