Wie oh wie?
Ik heb een prachtig klein gastenboek scriptje op deze site gevonden, gepost door jw_slob, echter zijn emailadres is niet meer.. dus bij hem kan ik niet terecht met mijn probleem.

Wie kan mij wel helpen?
Zijn gastenboek script heeft op de vorige server van mijn websitehost foutloos gewerkt. Echter heeft mijn host de website verhuisd naar een nieuwe server en nu wil het script niet meer voorruit. Er komt zelfs geen foutmelding meer, alleen een 'refresh' van de pagina. De Chmod is gecontroleerd en staat goed.

Wie kan mij vertellen waar het mis gaat?

Alvast bedankt~!!
Monique

Dit is het script:

<html>
<head>
<title>GASTENBOEK</title>
</head>
<body bgcolor="#3f5bb5">

<p align="right"> </p>
<center>
<h1>Gastenboek</h1>
<p>
<?php
if($submit)
{
if (($name=="")||($email=="")||($mes==""))
{ echo "</center><h2>ERROR</h2>";
echo "De volgende gegevens ontbreken:<br>";
if ($name=="") echo "<font color=red>Je naam </font><br>";
if ($email=="") echo "<font color=red>Je e-mailadres </font><br>";
if ($mes=="") echo "<font color=red>Je bericht </font><br>";
echo "Klik <a onClick=javascript:history.back()>HIER</a> om terug te gaan<center><p>";


}
else
{
$mes = ereg_replace("\n","<BR>",$mes);
$date = date("l dS of F Y h:i:s A");
$new_message = "$name(+)$email(+)$date(+)$mes\r\n";
$file=join(" ",file("gastenboek.txt"));
$fp=fopen("gastenboek.txt","w");
fputs($fp,$new_message);
fputs($fp, $file);
fclose($fp);
mail( "[email protected]", "Bericht in Gastenboek ",$new_message, "From: afzender <[email protected]>" );
}
}
else
{
?>

<form action = "<?php echo($PHP_SELF); ?>" method=post>
<table class='back2' width=90%>
<tr>
<td class='back1'>Naam</td>
<td class='back2'><input type=text size=40 name="name"></td>
</tr>
<tr>
<td class='back1'>E-mail</td>
<td class='back2'><input type=text size=40 name="email"></td>
</tr>
<tr>
<td class='back1'>Bericht</td>
<td class='back2'><textarea ROWS=5 COLS=80 WRAP=virtual name="mes"></textarea></td>
</tr>
<tr>
<td class='back2'></td>
<td class='back2'><input type=submit size=40 name="submit" value="Plaats bericht"></td>
</tr>
</table>
</form>


<?php
}

$fo = fopen('gastenboek.txt',"r");
echo "<table class='back2' width=90%>";
while (!feof ($fo))

{ $bericht = fgets($fo, 4096);
$split = explode("(+)",$bericht);
$sender_name = $split[0];
$sender_email = $split[1];
$date = $split[2];
$message = $split[3];

echo ("<tr><td class='back1'><i>Afzender</i><td class='back2'><a class='a1' href=mailto:$sender_email>$sender_name</a></td></tr>");
echo ("<tr><td class='back1'><i>Datum </i><td class='back2'>$date</tr></td>");
echo ("<tr><td valign=top class='back1'><i>Bericht</i><td class='back3'>$message</td></tr>");
echo ("<tr><td>");
}
echo "</table>";
fclose($fo);
?>


<a href="gastenboek.php">terug naar index</a>
<?php
$file = "gastenboek.txt";
?>


</body>
</html>
Stond op de oude server register globals aan en op deze niet meer?

[x] Ja
[ ] Nee


Probleem opgelost. Gewoon netjes $_POST gebruiken
Ik heb de server niet geinstalleerd. Zou ik de website host kunnen vragen? Of kan ik dit in mijn eigen control panel bekijken? De website host zegt zelf onschuldig te zijn, en dat het aan mijn script ligt.
Voer dit kleine scriptje maar eens uit:
<?php
var_dump(get_magic_quotes_gpc());
?>
Waarschijnlijk zal hier 0 of false uitkomen, hetgeen betekent dat je nieuwe host bewust met zijn instellingen omgaat en verstandiger is dan je oude host.

Het betekent tevens dat jouw scriptje niet meer werkt omdat jij geen gebruik maakt van superglobals zoals je dat sinds PHP4.1 al hoort te doen. De variabele $submit bijvoorbeeld zal niet bestaan, de variabele $_POST['submit'] daarentegen waarschijnlijk wel.

Kortom, ga je script aanpassen en netjes superglobals gebruiken waar dat nodig is...
superglobals = $name moet zijn $_POST['name'] enz...
Blance, ik ben weet helaas nog maar weinig van php... dus misschien niet zo handig..
het kleine scriptje hierboven uitvoeren betekent: plak het op een php page, uploaden naar de server en dan online zien wat er staat? of?
Als ik dat doe staat er namelijk int(1) op mijn pagina.

en Bart moet ik om superglobals te maken ALLE code met $ vervangen?
dus ook in dit stukje hieronder?

<?php
}

$fo = fopen('kwastenboek.txt',"r");
echo "<table class='back2' width=90%>";
while (!feof ($fo))

{ $bericht = fgets($fo, 4096);
$split = explode("(+)",$bericht);
$sender_name = $split[0];
$sender_email = $split[1];
$date = $split[2];
$message = $split[3];

echo ("<tr><td class='back1'><i>Afzender</i><td class='back2'><a class='a1' href=mailto:$sender_email>$sender_name</a></td></tr>");
echo ("<tr><td class='back1'><i>Datum </i><td class='back2'>$date</tr></td>");
echo ("<tr><td valign=top class='back1'><i>Bericht</i><td class='back3'>$message<hr></td></tr>");
echo ("<tr><td>");
}
echo "</table>";
fclose($fo);
?>
Eh, ik zit te slapen. De magic_quotes_gpc instelling heeft hier vrij weinig mee te maken, wel jammer dat hij aan staat overigens.

Maar goed, waar het om ging is natuurlijk de register_globals instelling. Als je hetzelfde doet maar dan met dit stukje script, zul je waarschijnlijk wel 0 krijgen:
<?php
var_dump(ini_get('register_globals'));
?>

Wat betreft je tweede vraag: nee, je moet niet alle variabelen door $_POST variabelen gaan vervangen. Dat moet je enkel doen met de variabelen die direct uit je formulier komen. Dat zijn dus bijvoorbeeld $submit, $email en $name uit het eerste gedeelte van je script.

PHP beginnershandleiding

In deze tutorial wordt het ook allemaal uitgelegd en voorgedaan.
yep, register_globals staat op string(0) ""

nu dus de variabelen uit het formulier vervangen en dan ... wie weet.
En natuurlijk even die PHP handleiding lezen zodat je ook begrijpt waarom je het doet. Daar heb je meer aan dan het klakkeloos toepassen van de gegeven antwoorden ;-)
PHP Simpel Gastenboek doet het zomaar niet meer?

Dus zo simpel is die niet? :S :P
nou, als ik er mee overweg kan, dan issie niet van het hoogste niveau. Echter wel een oud script dat gemoderniseerd moet worden! ;0

Ik ben een eind op weg. Het script werkt weer, echter zie ik tijdens het testen geen tekst in het gastenboek verschijnen. In de gastenboek.txt file staan alleen drie plusjes (+) (+) (+)

Dus ik denk dat ik wel weet waar het misgaat, maar niet wát ik eraan moet doen. Heeft iemand inspiratie? :)
Ik denk dat het in deze regel mis gaat:
$_POST['new_message'] = "$name(+)$email(+)$date(+)$mes\r\n";

Hieronder een deel van het aangepaste script opnieuw...


<?php
if($_POST['submit'])
{
if (($_POST['name']=="")||($_POST['email']=="")||($_POST['mes']==""))
{ echo "</center><h2>ERROR</h2>";
echo "De volgende gegevens ontbreken:<br>";
if ($_POST['name']=="") echo "<font color=red>Uw naam </font><br>";
if ($_POST['email']=="") echo "<font color=red>Uw e-mailadres </font><br>";
if ($_POST['mes']=="") echo "<font color=red>Uw bericht </font><br>";
echo "Klik <a onClick=javascript:history.back()>HIER</a> om terug te gaan<center><p>";

}
else
{
$_POST['mes'] = ereg_replace("\n","<BR>",$mes);
$_POST['date'] = date("l dS F Y h:i:s A");
$_POST['new_message'] = "$name(+)$email(+)$date(+)$mes\r\n";
$_POST['file']=join(" ",file("gastenboek.txt"));
$_POST['fp']=fopen("gastenboek.txt","w");
fputs($_POST['fp'],$_POST['new_message']);
fputs($_POST['fp'], $_POST['file']);
fclose($_POST['fp']);
}
}
else
{
?>

Reageren