Cannot modify header

Status
Niet open voor verdere reacties.

phobia

Terugkerende gebruiker
Lid geworden
4 sep 2006
Berichten
1.777
Ik krijg de error

Warning: Cannot modify header information - headers already sent by (output started at /customers/judo-lochristi.be/judo-lochristi.be/httpd.www/forum/index.php:67) in /customers/judo-lochristi.be/judo-lochristi.be/httpd.www/forum/html/cat_edit.php on line 9

Nu weet ik dat het moet komen door een whitespace en de regel die gemeld word is 69
dat zou deze regel zijn:
Code:
header('Refresh: 3; url=index.php');
Maar zit de whitespace dan op de index.php?

PHP:
       <td align="center"><?PHP echo $btn; ?>&nbsp;<?PHP echo $btn_del; ?></td>
      </tr>
    </table>
  </form>
</div><?PHP
} else { 
	if(strlen($_GET['cat_titel']) == 0 || strlen($_GET['omschrijving']) == 0) {
		header('Location: index.php?page=cat_edit&ct='.$_GET['cat_titel'].'&co='.$_GET['omschrijving']);
	} else { 
		if( $thread->add_cat($_GET['cat_titel'],$_GET['omschrijving'])) {
			header('Refresh: 3; url=index.php');
			echo 'gegevens zijn verwerkend in de database.';
		  } else {
			header('Refresh: 3; url=index.php');
			echo '<h2>ERROR</h2> gegevens konden niet verwerkend worden.';	  }
	}
}
 
Laatst bewerkt:
Niet zozeer whitespace.. output in het algemeen.

Je opent met een <td>, en dat is output, dus daar gaat het al fout.
 
PHP:
<?PHP
if(isset($_SESSION['user_id']) && !isset($_GET['add'])) {
	if(isset($_GET['cid']) && $_GET['cid'] == "none") {
		unset($_GET['cid']);	
	}
	if(isset($_GET['cid']) && isset($_GET['action']) == "del") {
		if($_GET['action'] == "del") {
			if($thread->del_cat($_GET['cid'])) {
				header('Refresh: 3; url=index.php');
				unset($_GET['cid']);
				echo 'Categorie is uit de database verwijderd';
				exit();
			} else {
				echo 'ERROR, kon categorie NIET verwijderen';
				exit();
			}
		}
	}
	
	$post = $thread->get_cat();
	$btn_del = "";	
	if(isset($_GET['cid'])){ 
		$cid = $_GET['cid'];  
		$btn_del = '<a href="?page=cat_edit&action=del&cid='.$cid.'" ><input type="button" value="Delete"></a>';
		$btn = '<input type="submit" name="edit" id="button" value="aanpassen">';
	} else {
		$btn = '<input type="submit" name="add" id="button" value="toevoegen">';
	}
	?>
<div>
<center><h2> toevoegen Categorie </h2></center>
<center><form id="cat" action="" method="get">
<select name="cid">
	<option value="none">Kies categorie</option><?PHP

	foreach($post as $key => $value) {
		echo '<option value="'.$key.'">'.$value[0].'</option>';
	}
	?></select><input type="hidden" name="page" value="cat_edit"/>&nbsp;&nbsp;&nbsp;<input type="submit" name="select" id="button" value="wijzigen">
</form></center><br><hr width="50%" color="#FF0000"><br>
  <form name="form1" method="get" action="">
    <table width="300px" align="center" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="right">Categorie Titel : &nbsp;</td>
        <td ><input type="text" name="cat_titel" id="cat_titel" maxlength="50"
		<?PHP 
			if(isset($cid)){ echo 'value="'.$post[$cid][0].'"'; }
		?> ></td>
      </tr>
      <tr>
        <td align="right">Omschrijving : &nbsp;</td>
        <td><textarea  name="omschrijving" id="omschrijving" cols="70" rows="10"><?PHP 
			if(isset($cid)){ echo $post[$cid][1]; }
		?></textarea></td>
      </tr>
      <tr>
        <td align="right"><input type="hidden" name="page" value="cat_edit"/><input type="hidden" name="page" value="cat_edit"/></td>
        <td align="center"><?PHP echo $btn; ?>&nbsp;<?PHP echo $btn_del; ?></td>
      </tr>
    </table>
  </form>
</div><?PHP
} else { 
	if(strlen($_GET['cat_titel']) == 0 || strlen($_GET['omschrijving']) == 0) {
		header('Location: index.php?page=cat_edit&ct='.$_GET['cat_titel'].'&co='.$_GET['omschrijving']);
	} else { 
		if( $thread->add_cat($_GET['cat_titel'],$_GET['omschrijving'])) {
			header('Refresh: 3; url=index.php');
			echo 'gegevens zijn verwerkend in de database.';
		  } else {
			header('Refresh: 3; url=index.php');
			echo '<h2>ERROR</h2> gegevens konden niet verwerkend worden.';	  }
	}
}
?>

Dit is de hele script
 
Nog steeds, zoals ik al zei, genereer je HTML output voordat je je header stuurt, en dat mag niet. Zodra je ook maar 1 teken HTML stuurt naar de browser, mag je geen headers meer sturen. Je zult dus de boel aan moeten passen zodat je header() hogerop staat, voor de output begint.
 
Ik gebruik usbwebserver 7 als mijn localhost. En daar op krijg ik nix geen meldingen.
Hoe kan dat nou?

Pff dus ik moet voor de hele script terug naar de tekentafel!
 
Waarschijnlijk omdat je de errors (die je daar ook gewoon krijgt) onderdrukt, zodat je ze niet kunt zien (want ze zijn er wel)
 
haha ja dat ze er zijn blijkt wel als ik dingen op live zet.

pfff ik loop altijd vast met die headers, geloof dat ze mij niet leuk vinden of voor mij willen werken haha

Zou ik dat op mijn local met error_report(E_ALL) moeten gebruiken(of hoe die functie ook al weer was)
 
Jep, dat lijkt me verstandig ;) Dat moet je eigenlijk altijd doen.
 
Mijn bemerkingen vindt je in het script zet je todo op en watch

PHP:
<?PHP
session_start();//TODO always start session if you use session
if(isset($_SESSION['user_id']) && !isset($_GET['add'])){
    if(isset($_GET['cid']) && $_GET['cid'] == "none") {
        unset($_GET['cid']);    
    }
    if(isset($_GET['cid']) && isset($_GET['action']) == "del") {
        if($_GET['action'] == "del") {
            if($thread->del_cat($_GET['cid'])) {
                header('Refresh: 3; url=index.php');
                unset($_GET['cid']);
                echo 'Categorie is uit de database verwijderd';
                exit();
            } else {
                echo 'ERROR, kon categorie NIET verwijderen';
                exit();
            }
        }
    }
    
    $post = $thread->get_cat();
    $btn_del = "";  
    if(isset($_GET['cid'])){ 
        $cid = $_GET['cid'];  //TODO variable out of if =>mem
        $btn_del = '<a href="?page=cat_edit&action=del&cid='.$cid.'" ><input type="button" value="Delete"></a>';
        $btn = '<input type="submit" name="edit" id="button" value="aanpassen">';
    } else {
        $btn = '<input type="submit" name="add" id="button" value="toevoegen">';
    }
    
    //!!!ALERT!!! DUALFORM  
    //!!!ALERT!!! NO ACTION AT FORM
    ?>
<div>
<center><h2> toevoegen Categorie </h2></center>
<center><form id="cat" action="" method="get">
<select name="cid">
    <option value="none">Kies categorie</option><?PHP
    foreach($post as $key => $value) {
        echo '<option value="'.$key.'">'.$value[0].'</option>';
    }
    ?></select><input type="hidden" name="page" value="cat_edit"/>&nbsp;&nbsp;&nbsp;<input type="submit" name="select" id="button" value="wijzigen">
</form></center><br><hr width="50%" color="#FF0000"><br>
  <form name="form1" method="get" action="">
    <table width="300px" align="center" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="right">Categorie Titel : &nbsp;</td>
        <td ><input type="text" name="cat_titel" id="cat_titel" maxlength="50" value="<?PHP echo(isset($cid))?$cid:"";//TODO $_POST not exist?>" /></td>
      </tr>
      <tr>
        <td align="right">Omschrijving : &nbsp;</td>
        <td><textarea  name="omschrijving" id="omschrijving" cols="70" rows="10"><?PHP 
            if(isset($cid)){ echo $post[$cid][1]; //TODO $_POST not exist
            }
        ?></textarea></td>
      </tr>
      <tr>
        <td align="right"><input type="hidden" name="page" value="cat_edit"/><input type="hidden" name="page" value="cat_edit"/></td>
        <td align="center"><?PHP echo $btn; ?>&nbsp;<?PHP echo $btn_del; ?></td>
      </tr>
    </table>
  </form>
</div><?PHP
}else{ 
    if(strlen($_GET['cat_titel']) == 0 || strlen($_GET['omschrijving']) == 0) {
        header('Location:index.php?page=cat_edit&ct='.$_GET['cat_titel'].'&co='.$_GET['omschrijving']);//!!!ALERT!!! SPACE after location
    } else { 
        if( $thread->add_cat($_GET['cat_titel'],$_GET['omschrijving'])) {
            header('Refresh: 3; url=index.php');
            echo 'gegevens zijn verwerkend in de database.';
          } else {
            header('Refresh: 3; url=index.php');
            echo '<h2>ERROR</h2> gegevens konden niet verwerkend worden.';    }
    }
}
?>
 
session starten hoeft niet, want de pagina wordt ge-include
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan