Ik zit hier nu op m'n werk verder te ontwikkelen aan een groot project hier. Daar heb ik een iframe in zitten. Als je dan een optie kiest buiten dat iframe, wordt dat iFrame veranderd en dan staat daar de goede informatie (heb je dat in AJAX gedaan? Nope. Kan het wel in AJAX? Yep
). Maar als ik nu een keuze maak buiten het iframe, dan wordt draait m'n javascriptje netjes, en wordt er ook netjes een HTTP request gestuurd om de nieuwe pagina op te vragen. IIS 6.0 stuurt ook netjes een HTTP 200 reactie terug. Alle HTTP headers zijn compleet. Maar op de plek dat de webpagina moet beginnen staat er helemaal niets. Dan houd het op wat er uit IIS komt. Ik zou echt niet weten waardoor dat komt. Voor de volledigheid zal ik nog efkes m'n PHP pagina's wegzetten:
index.php:
[php]<?php
require_once('../includes/config.php');
require_once('../includes/functions.php');
require_once('../includes/db_connect.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Verander gegevens test</TITLE>
<LINK rel="stylesheet" type="text/css" href="../includes/style.css">
<SCRIPT type="text/javascript" src="../includes/functions.js"></SCRIPT>
<STYLE type="text/css">
#lijst_pakketten
{
position: absolute;
float: left;
left: 5px;
top: 50px;
bottom: 5px;
border: 0px;
}
#gegevens_iframe
{
position: absolute;
float: left;
left: 90px;
top: 50px;
bottom: 5px;
right: 5px;
border: 0px;
}
td:hover
{
cursor: pointer;
}
</STYLE>
<SCRIPT type="text/javascript">
function toonGegevens(id)
{
// Correcte gegevens ophalen
document.getElementById('gegevens').src='gegevens.php?id='+id;
// Geselecteerde veld een andere achtergrondkleur geven en alle andere velden deselecteren
var table = document.getElementById('selectie_tabel');
var rows = table.getElementsByTagName('tr');
for(var i = 0; i < rows.length; i++)
{
if(rows[i].id == 'row_'+id)
{
rows[i].style.backgroundColor='#0A246A';
rows[i].style.color='#FFFFFF';
}
else
{
rows[i].style.backgroundColor='#FFFFFF';
rows[i].style.color='#000000';
}
}
}
</SCRIPT>
</HEAD>
<BODY>
<?php
if($bDb_conn === TRUE)
{
?>
<FORM method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<STRONG>Pakketnaam</STRONG> <INPUT type="text" name="zoek" id="zoek"> <INPUT type="submit" value="zoek">
</FORM>
<DIV id="lijst_pakketten">
<TABLE border="1" cellspacing="0" cellpadding="0" id="selectie_tabel">
<THEAD>
<TR>
<TH><H1>Naam</H1></TH>
</TR>
</THEAD>
<TBODY>
<?php
$qSelect_pakketten = 'SELECT id, naam FROM pakket';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$qSelect_pakketten .= ' WHERE naam LIKE "%'.mssql_real_escape_string($_POST['zoek']).'%"';
}
if($rSelect_pakketten = query($qSelect_pakketten, $hDb_conn, 'Helaas is het selecteren van de pakketnamen mislukt', $aConfig['debug']))
{
while($aPakket = mssql_fetch_assoc($rSelect_pakketten))
{
echo "\t<TR id=\"row_".$aPakket['id']."\">\n";
echo "\t\t<TD onClick=\"toonGegevens(".$aPakket['id'].")\">".$aPakket['naam']."</TD>\n";
echo "\t</TR>\n";
}
}
?>
</TBODY>
</TABLE>
</DIV>
<?php
}
?>
<DIV id="gegevens_iframe"><IFRAME name="gegevens" id="gegevens" frameborder="0" height="250" width="420" src="gegevens.php"></IFRAME></DIV>
</BODY>
</HTML>[/php]
Gegevens.php (de pagina die in het iFrame staat):
[php]<?php
require_once('../includes/config.php');
require_once('../includes/functions.php');
require_once('../includes/db_connect.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<LINK rel="stylesheet" type="text/css" href="../includes/style.css">
<SCRIPT type="text/javascript" src="../includes/functions.js"></SCRIPT>
</HEAD>
<BODY>
<?php
if(!isset($_GET['id']))
{
echo 'Geen pakket geselecteerd, dus er kunnen ook geen gegevens getoont worden.';
}
elseif(!isset($_GET['id']) || empty($_GET['id']) || !is_numeric($_GET['id']))
{
echo 'Er ging helaas iets mis. Verbeter de manier waarop deze pagina aangeroepen wordt.';
}
elseif($bDb_conn === TRUE)
{
echo 'Alles in orde, hij komt op de plek waar hij moet komen';
$qSelect_pakket = 'SELECT naam, aanmaakdatum, MG, laatst_bewerkt FROM pakket WHERE id = '.$_GET['id'];
if($rSelect_pakket = query($qSelect_pakket, $hDb_conn, 'Helaas is het selecteren van het pakket mislukt', $aConfig['debug']))
{
echo '<TABLE>';
$aPakket = mssql_fetch_assoc($rSelect_pakket);
maak_veld(array('naam'), '', 'n', 'aam', $aPakket['naam'], TRUE);
$iTimestamp = strtotime($aPakket['aanmaakdatum']);
echo '<TR><TD><STRONG>Aanmaakdatum:</STRONG></TD><TD>'.date('d-m-Y H:i:s', $iTimestamp).'</TD></TR>';
$iTimestamp = strtotime($aPakket['laatst_bewerkt']);
echo '<TR><TD><STRONG>Laatst gewijzigd:</STRONG></TD><TD>'.date('d-m-Y H:i:s', $iTimestamp).'</TD></TR>';
maak_veld(array('mg'), '', 'm', 'g', $aPakket['MG'], TRUE);
echo '</TABLE>';
}
else
{
echo 'Er is iets heel raars aan de hand';
}
?>
</BODY>
</HTML>[/php]
Wat het nog vreemder maakt, is dat een heel groot deel van deze code ook al in andere scripts verwerkt is, en daar werkt het helemaal perfect. Ik snap dus totaal niet waarom IIS er nu ineens problemen mee (lijkt) te hebben.
Ik zal nog eens een keer kijken of ik logs kan vinden van IIS, maar die heb ik nog niet kunnen vinden
[edit]
Ik heb de logs gevonden. De accesslog en de errorlog. In de errorlog staat niets. Het is totaal niet gedetecteerd. Wat gaat er hier dus mis? Het enige vreemde vind ik dat er in de logfile geen ? staan (bijv. bij index.php?id=1) maar een spatie. Maar dat lijkt geen probleem te zijn, want op een andere plek in het project heb ik dezelfde truck toegepast en dat werkt perfect. Ook als ik dat script draai komt er een spatie in de logfile te staan ipv een ?.
Het gaat trouwens over een systeem met de volgende specificaties:
Windows server 2003
IIS 6
PHP 5.2.0
[/edit]

(het is een devbak, dus daar mag het. Sterker nog, daar moet het, vind ik).
