hoi allemaal,

ik zit met een probleem. Een vriend van mij heeft een site met een heel eenvoudig gastenboek dat de ingaven wegschrijft in een gewone tekst file. echter om de een of andere vreemde reden werkt het nu niet meer ik voeg onder aan dit bericht de file die berichten moet wegschrijven in de file gastenboek.php op de server heeft dit bestand read en schrijfrechten dus daar ligt het niet aan. Ik zie echter niet wat er fout is aan het php script. Kan iemand van jullie mij misschien verder helpen?

Alvast bedankt voor de moeite
Marcel

<?php

if ($mode=="addmsg") {

  $err = 0;

  if (empty($naam) || empty($message)) {

    $err = 1;

  } else {

    //strip message to a max. of 1000 characters

    $message = substr($message,0,100000);

    // open template

    $filename = "gastenboek_template.php";

    $fp = fopen ($filename, "r");

    $bericht = fread ($fp, filesize ($filename));

    // replace #naam# met $naam

    $bericht = str_replace ("#naam#", stripslashes(htmlspecialchars($naam)), $bericht);

    // replace #message# met $message

    $bericht = str_replace ("#message#", nl2br(stripslashes(htmlspecialchars($message))), $bericht);

    fclose($fp);



    // read gastenboek file
    $filename = "gastenboek.php";
    $fp = fopen ($filename, "r");
    $gastenboek = fread ($fp, filesize ($filename));
    // replace #message# with $bericht
    $gastenboek = str_replace ("<!--##message##//-->", "<!--##message##//-->\n\n" . $bericht, $gastenboek);
    fclose($fp);
    // write in gastenboek
    $filename = "gastenboek.php";
    $fp = fopen ($filename, "w+");
    fwrite ($fp, $gastenboek);
   // goto gastenboek
    header("Location: gastenboek.php");
  }  
}
$img_page = 'images/na_caracter_2.gif';
?>
<HTML>
<HEAD>
<TITLE>ROOTS HAIRSTYLES</TITLE>
<SCRIPT language="javascript" src="doc/script.js"></SCRIPT>
<LINK href="doc/roots.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><BODY bgcolor="#A2C40E" background="images/guestbook/background.jpg" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="370" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td><div align="right"><img src="images/guestbook/logo.gif" width="400" height="50"></div></td>
  </tr>
  <tr> 
    <td height="20">&nbsp;</td>
  </tr>
  <tr> 
    <td align="center"> <form name="invoer" method="post" action="<? print $PHP_SELF ?>">
        <table width="370" border="0" align="left" cellpadding="0" cellspacing="0">
          <tr> 
            <td width="370" align="center" valign="top" class="newstext"> <? print ($err==1) ? "<span class='gueststexttemplate'>Please fill in all forms<br><br></span>" : "&nbsp;" ?> 
              <span class="textwhite">name</span><br> <input name="naam" type="input" class="guestsaddtext" value="<? print $naam ?>" size=40 maxlength=40> 
              <br> <br>
              <span class="textwhite">message</span><br>
              <textarea name="message" cols="39" rows="7" wrap="off" class="guestsadd"><? print $message ?></textarea> 
			  <input type="hidden" name="mode" value="addmsg">
              <br> <br> <input type="submit" name="submit" class="send" value="send"> 
           </td>
          </tr>
        </table>
      </form></td>
  </tr>
</table>
</HTML>
Je gebruikt geen superglobals. Waarschijnlijk heeft je provider een upgrade gedaan en de instellingen veranderd. Dingen als:

<?php
  if (empty($naam) || empty($message)) {
?>

moeten er zo uit gaan zien:

<?php
  if (empty($_POST['naam']) || empty($_POST['message'])) {
?>

Simpel, de superglobals staan dus UIT, en stonden eerder altijd AAN. Je moet voor dingen die je post niet gewoon $veldnaam (waarbij veldnaam hetgeen is dat in de NAME tag van het betreffende formulierelement staat) maar $_POST['veldnaam'] gebruiken als de method "post" is. Bij get gebruik je dus $_GET['veldnaam'].

Verder controleer je niet of er gepost is door tecontroleren of er een bepaald veld is meegestuurd, maar de eigenlijke controle doe je zo:


<?php
    if($_SERVER['REQUEST_METHOD'] == "POST"){//voor posten, anders moet er GET staan tussen de quotes
         // er is gepost, ga nu de variabelen controleren
      }
 else{
      //er is niet gepost, doe wat er moet gebeuren wanneer er niets is gepost
      }
  
?>

De else is niet nodig, maar komt vaak prima van pas.
heb de $veldnaam vervangen door $_POST['veldnaam'] maar schrijft nog steeds niks weg naar bestand. Moet ik de interne $variabele ook anders defineren?

Marcel
Begin je code eens met de volgende regels:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest van je code
?>
Vervolgens ga je alle fouten en waarschuwingen 1 voor 1 oplossen.

Reageren