• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

header wechsel geht nicht

KIUNES

New member
ich hab verschiedene formulare, die ich nach dem absenden wieder auf die gleiche seite linke um dessen inhalte zu prüfen. wenn inhalte richtig dann leite ich ala
PHP:
header("Location: index.php");
weiter, so jetzt hab ich meine Homepage ein wenig umgebaut und include nun die seiten in die index, jetzt passiert aber folgendes:

PHP:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web26/html/admin/index.php:108) in /var/www/web26/html/admin/qc_check.php on line 102
 
Nunja ist nicht viel
PHP:
$status = $_POST['status'];
if($status!=""){
mysql_query("UPDATE ava_kunden SET status='$status' WHERE id='$id'");
if($_GET['auto']=="on"){
header("Location: index.php?action=qc_alle");
}else{
header("Location: qc_alle.php");
}

PS.: bevor jetzt wieder Kommentare beüglich sql-inject kommen, es handelt sich um ein hidden input ;)
 
Hat doch keiner zugriff auf die Variable $status!
Wie kommst Du darauf? Nur weil ein Browser das Feld nicht editierbar anbietet?
Wie sollte das einen Hacker aufhalten es dennoch auszunutzen? Speziell, wo sie jetzt lesen können, dass Du Deine Hidden-Felder nicht für schützenswert hältst.
 
Wo wir grad dabei sind, das hier ist mein sql-inject-schutz. Aber der ist sehr aufwendig. Kann man diese Funktion nicht verkürzen?

PHP:
$knr = $_POST['knr'];
$knr = str_replace('"', '', $knr);
$knr = str_replace("'", '', $knr);
$knr = str_replace('@', '', $knr);
$knr = str_replace('<', '', $knr);
$knr = str_replace('>', '', $knr);
$knr = str_replace('}', '', $knr);
$knr = str_replace('{', '', $knr);
$knr = str_replace('§', '', $knr);
$knr = str_replace('*', '', $knr);
$knr = str_replace('~', '', $knr);
$knr = str_replace(':', '', $knr);
$knr = str_replace('#', '', $knr);
$knr = str_replace('|', '', $knr);
$knr = str_replace('°', '', $knr);
$knr = str_replace('^', '', $knr);
$knr = str_replace(' ', '', $knr);
$knr = str_replace('-', '', $knr);
$knr = str_replace(',', '', $knr);
$knr = str_replace('.', '', $knr);
$knr = str_replace('$', '', $knr);
$knr = str_replace('/', '', $knr);
$knr = str_replace('_', '', $knr);
$knr = str_replace('(', '', $knr);
$knr = str_replace(')', '', $knr);
$knr = str_replace('[', '', $knr);
$knr = str_replace(']', '', $knr);
$knr = str_replace('=', '', $knr);
$knr = str_replace('&', '', $knr);
$knr = str_replace('!', '', $knr);
$knr = str_replace('?', '', $knr);
$knr = str_replace('%', '', $knr);
$knr = str_replace(';', '', $knr);
$knr = str_replace('+', '', $knr);
 
str_replace arbeitet auch mit arrays. Ich würde aber Rasputins Lösung vorziehen oder gleich mit mysqli und prepared Statements arbeiten.
 
Kann ich das so machen?

PHP:
<?
$array_1 = array(' ', '+', '-', '#', '*', '~', '"', "'", ',', '.', ';', ':', '_', '<', '>', '(', ')', '{', '}', '[', ']', '!', '?', '$', '%', '&', '@');
$array_2 = array(' ', '+', '#', '*', '~', '"', "'", ',', ';', ':', '<', '>', '(', ')', '{', '}', '[', ']', '!', '?', '$', '%', '&');
$vname = str_replace($array_1, '', $_POST['vname']);
$email = str_replace($array_2, '', $_POST['email']);
?>
 
Kann ich das so machen?
Ist das nicht a weng umständlich für jedes Feld unterschiedliche Zeichen rauszuscheißen? Gibt ja z.B. auch Vornamen mit Bindestrich oder doppelte Vornamen, die hätten dann tatsächlich ein Leerzeichen.

Die beste Lösung dafür ist immer noch die Verwendung von Prepared Statements. Sowas kann das DBMS dann sogar noch optimieren (z.B. Statement Cache bei Oracle, keine Ahnung ob MySQL auch sowas bietet).
 
Ich habe ja Anführungszeichen verboten, bzw gesat, das das Zeichen durch NIX ersetzt wird, das macht er auch bei allen Zeichen so nur nicht beim Anführungszeichen, da ersetzt er es durch \ obwohl ich das doch nirgends definiert habe. Wo kommt das her?
 
Ich habe ja Anführungszeichen verboten, bzw gesat, das das Zeichen durch NIX ersetzt wird, das macht er auch bei allen Zeichen so nur nicht beim Anführungszeichen, da ersetzt er es durch \ obwohl ich das doch nirgends definiert habe. Wo kommt das her?

Nicht ganz richtig: Anführungszeichen werden von PHP automatisch escaped, sprich zu \' bzw \". Dein Anführungszeichen wird entfernt und übrig bleibt ein \.

Such mal bei php.net o.ä. nach magic_quotes. Und du solltest wirklich entweder die Prepared Statements verwenden oder mysql_real_escape_string.
 
Zurück
Oben