Beste mensen,

Ik probeer een gastenboek te maken aan de hand van deze tutorail: http://www.html-site.nl/forum/topic/php-gastenboek-met-mysql-captcha-ubb-codes Nu werkt het op mijn test site waar ik hem op heb gemaakt perfect, ik krijg de berichtjes goed te zien en ze staan goed in de database! Tot dan toe eigenlijk niks aan de hand!

Nu maak ik op mijn .nl site van yourhosting een pagina aan die ik gastenboek noem. De codes zijn precies hetzelfde... maar hier wordt de tekst veranderd in tekens en letters: (Hieronder gekopieerd;


dvdtv
2015-04-02 20:57:52
D11i>b>]Denn1b]


dvdtv
2015-04-02 20:47:44
Ho1b>> <1> Waarom he1er11t ineen1 dan dat zou moeten?


dvdtv
2015-04-02 20:47:09
D11i>chtje! 


In de database staat de tekst wel goed geschreven.... kan iemand in de code zien hoe het komt dat het op de ene site wel werkt en op de andere niet? Beide tests zijn uitgevoerd in chrome!


<?php 
   session_start();
   include_once "config.php"; 
?>

<title>Gastenboek</title>
  <link href="/css/stylegastenboek.css" type="text/css" rel="stylesheet" />
  <script type="text/javascript" language="javascript">
    function showHide(shID) {
    if (document.getElementById(shID)) {
      if (document.getElementById(shID+'-show').style.display != 'none') {
        document.getElementById(shID+'-show').style.display = 'none';
        document.getElementById(shID).style.display = 'block';
      }
      else {
        document.getElementById(shID+'-show').style.display = 'inline';
        document.getElementById(shID).style.display = 'none';
        }
      }
    }
  </script>
  <script type="text/javascript">
    function reloadImg(id) {
      var obj = document.getElementById(id);
      var src = obj.src;
      var pos = src.indexOf('?');
    if (pos >= 0) {
      src = src.substr(0, pos);
    }
      var date = new Date();
      obj.src = src + '?v=' + date.getTime();
    return false;
    }
  </script>
  
  <?php
  // Gegevens ophalen uit de database en sorteren op id
  $sql = mysql_query("SELECT * FROM gastenboek ORDER BY datum DESC");
  if (mysql_num_rows($sql) == 0) {
    // Als er nog geen reacties geplaatst zijn:
    echo 'Er zijn nog geen reacties geplaatst, plaats als eerste een reactie.';
  } else {
    while($data = mysql_fetch_assoc($sql)) {
      // Als er wel reacties zijn geplaatst worden deze nu weergegeven:
  echo'<div class="bericht">
        <div class="info">
          <img src="avatar.jpg" alt="" /><br />
          '.htmlspecialchars(stripslashes($data['naam'])).'<br />
          '.htmlspecialchars(stripslashes($data['datum'])).'<br />
        </div>
        <div class="image">
          <img src="comment.png" alt="" />
        </div>
        <div class="tekst">
          '.ubb($data['bericht']).'<br /><br />
        </div>
      </div>
  ';    
    }
  }
?>

<div id="reactie">
    <h3>Reactie plaatsen</h3><br />
<?php
                  // Foutmeldingen + reactie plaatsen:
                if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                    // Als er een veld niet ingevuld is
                    if (empty($_POST['naam']) || empty($_POST['security_code']) || empty($_POST['bericht']) || empty($_POST['email'])) {
                        echo '<div class="fout">Niet alle  velden zijn ingevuld.</div><br />';
                  } else {
                    if($_SESSION['security_code'] != $_POST['security_code']){
                      $code = $_SESSION['security_code'];
                      $mycode= $_POST['security_code'];
                      echo '<div class="fout">De code die je overtypte was incorrect.</div>';
                      unset($_SESSION['security_code']);
                    } else {
                      if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) && (mysql_query("INSERT INTO gastenboek (naam, email, bericht, datum, ip) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['email']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', NOW(), '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."')")) ) {
                        $code = $_SESSION['security_code'];
                          $mycode= $_POST['security_code'];
                        echo '<div id="succesvolgeplaatst">Je reactie is succesvol geplaatst! <a href="'. $_SERVER["PHP_SELF"] .'">Bekijk je reactie</a></div><br />';
                        unset($_SESSION['security_code']);
                      } else {
                      
                      }
                    }
                  }
                }
                ?>
<br />
        <form method="post" action="" name="form1">
            Naam:*<br />
            <input type="text" name="naam" maxlength="50" /><br /><br />

            Emailadres (niet gepubliceerd):*<br />
            <input type="text" name="email" maxlength="50" type="email" /><br /><br />

            Code overtypen:*<br />
            <img src="captcha.php" name="vertimg" id="vertimg"><br />
                <div id="newafb">
                    <a href="#" onclick="refreshimage()">Nieuwe afbeelding</a>
                </div><br />
            <input type="text" name="security_code"  /><br /><br />
    
            Bericht:*<br />
            <textarea name="bericht" id="tekst" rows="6" cols="37" maxlength="500"></textarea><br />
            UBB-codes zijn toegestaan
            <a href="#" id="example-show" class="showLink" onclick="showHide('example');return false;">
            <div class="what">Wat is dit?</div></a>
                <div id="example" class="show-hide">
                    <br />
                    Met UBB-codes kan je de volgende dingen doen:<br /><br />
                    [b]tekst[/b]  &raquo; <b>tekst</b><br />
                    [u]tekst[/u]  &raquo; <u>tekst</u><br />
                    [i]tekst[/i]  &raquo; <i>tekst</i><br />
                    [s]tekst[/s]  &raquo; <s>tekst</s><br /><br />
                <a href="#" id="example-hide" class="hideLink" onclick="showHide('example');return false;">(Verbergen)</a>
                </div>
            
        <br/><br/>
        <input type="submit" value="Reactie toevoegen" onclick="this.value='Reactie wordt geplaatst...';" />
        </form>
</div>


Alvast heel erg bedankt voor de gene die mij hiermee kan helpen? Want ik heb gekeken, gezocht maar kon niet vinden waarom ik twee resultaten kreeg bij twee hosts.

Groeten,
Dennis
Ziet er vreemd uit, misschien iets met karakter-encoding, maar dan zou ik toch eerder andere karakters verwachten.

Heb je een voorbeeld van de pagina met de foute tekens, en desnoods een testmogelijkheid?
Ik dnek dat ik het weet. het heeft te maken dat je gastenboek geen UTF-8 encoding heeft (je hele doctype en body mist overigens), waardoor je in de PHP versies van 5.4 en 5.5 bij gebruik van speciale karakters (zoals ëáíù etc..) een lege string krijgt.

Stap over op UTF-8 of forceer htmlspecialchars door ISO-8859-1 te gebruiken.

Gebruik dus: htmlspecialchars($val, ENT_QUOTES,'ISO-8859-1',false);
Densoods kan je het in een nieuwe functie verpakken voor de makkelijkheid.
Ohhh kan het daarom wel op de ene host werken en de andere niet?

Ik ga er even mee aan slag ;)
Ja, ik snap ook niet waarom de PHP-developers hiervoor gekozen hebben. In PHP 5.6 is de characterset aanpasbaar in met ini_set of php.ini.
stripslashes()

als er slashes in je database staan, dan heb je bij het opslaan een probleem.

bij het echo-en zou je die stripslashes() niet nodig moeten hebben. (die functie zou je sowieso nooit nodig moeten hebben)

Hooguit als jouw server een oeroude magic-quotes setting aan heeft staan.
http://wiki.pfz.nl/magicquotes

Ik heb me code nu aangepast me de URF-8 erbij. Deze had ik op elke pagina wel staan maar niet op het gastenboek::

code is nu: ( ik hou hetzelfde probleem... Hoe kan ik jou regel goed invoegen?)

<?php 
   session_start();
   include_once "config1.php"; 
?>
<html>

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/CSS/stylegastenboek.css" type="text/css" rel="stylesheet" />

</head>

<body>
<title>Gastenboek</title>
  <script type="text/javascript" language="javascript">
    function showHide(shID) {
    if (document.getElementById(shID)) {
      if (document.getElementById(shID+'-show').style.display != 'none') {
        document.getElementById(shID+'-show').style.display = 'none';
        document.getElementById(shID).style.display = 'block';
      }
      else {
        document.getElementById(shID+'-show').style.display = 'inline';
        document.getElementById(shID).style.display = 'none';
        }
      }
    }
  </script>
  <script type="text/javascript">
    function reloadImg(id) {
      var obj = document.getElementById(id);
      var src = obj.src;
      var pos = src.indexOf('?');
    if (pos >= 0) {
      src = src.substr(0, pos);
    }
      var date = new Date();
      obj.src = src + '?v=' + date.getTime();
    return false;
    }
  </script>
  
  <?php
  // Gegevens ophalen uit de database en sorteren op id
  $sql = mysql_query("SELECT * FROM gastenboek ORDER BY datum DESC");
  if (mysql_num_rows($sql) == 0) {
    // Als er nog geen reacties geplaatst zijn:
    echo 'Er zijn nog geen reacties geplaatst, plaats als eerste een reactie.';
  } else {
    while($data = mysql_fetch_assoc($sql)) {
      // Als er wel reacties zijn geplaatst worden deze nu weergegeven:
  echo'<div class="bericht">
        <div class="info">
          <img src="img/avatar.jpg" alt="" /><br />
         '.htmlspecialchars(stripslashes($data['naam'])).'<br />
          '.htmlspecialchars(stripslashes($data['datum'])).'<br />
        </div>
        <div class="image">
          <img src="img/comment.png" alt="" />
        </div>
        <div class="tekst">
          '.ubb($data['bericht']).'<br /><br />
        </div>
      </div>
  ';    
    }
  }
?>

<div id="reactie">
    <h3>Reactie plaatsen</h3><br />
<?php
                  // Foutmeldingen + reactie plaatsen:
                if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                    // Als er een veld niet ingevuld is
                    if (empty($_POST['naam']) || empty($_POST['security_code']) || empty($_POST['bericht']) || empty($_POST['email'])) {
                        echo '<div class="fout">Niet alle  velden zijn ingevuld.</div><br />';
                  } else {
                    if($_SESSION['security_code'] != $_POST['security_code']){
                      $code = $_SESSION['security_code'];
                      $mycode= $_POST['security_code'];
                      echo '<div class="fout">De code die je overtypte was incorrect.</div>';
                      unset($_SESSION['security_code']);
                    } else {
                      if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) && (mysql_query("INSERT INTO gastenboek (naam, email, bericht, datum, ip) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['email']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', NOW(), '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."')")) ) {
                        $code = $_SESSION['security_code'];
                          $mycode= $_POST['security_code'];
                        echo '<div id="succesvolgeplaatst">Je reactie is succesvol geplaatst! <a href="'. $_SERVER["PHP_SELF"] .'">Bekijk je reactie</a></div><br />';
                        unset($_SESSION['security_code']);
                      } else {
                      
                      }
                    }
                  }
                }
                ?>
<br />
        <form method="post" action="" name="form1">
            Naam:*<br />
            <input type="text" name="naam" maxlength="50" /><br /><br />

            Emailadres (niet gepubliceerd):*<br />
            <input type="text" name="email" maxlength="50" type="email" /><br /><br />

            Code overtypen:*<br />
            <img src="captcha.php" name="vertimg" id="vertimg"><br />
                <div id="newafb">
                    <a href="#" onclick="refreshimage()">Nieuwe afbeelding</a>
                </div><br />
            <input type="text" name="security_code"  /><br /><br />
    
            Bericht:*<br />
            <textarea name="bericht" id="tekst" rows="6" cols="37" maxlength="500"></textarea><br />
            UBB-codes zijn toegestaan
            <a href="#" id="example-show" class="showLink" onclick="showHide('example');return false;">
            <div class="what">Wat is dit?</div></a>
                <div id="example" class="show-hide">
                    <br />
                    Met UBB-codes kan je de volgende dingen doen:<br /><br />
                    [b]tekst[/b]  &raquo; <b>tekst</b><br />
                    [u]tekst[/u]  &raquo; <u>tekst</u><br />
                    [i]tekst[/i]  &raquo; <i>tekst</i><br />
                    [s]tekst[/s]  &raquo; <s>tekst</s><br /><br />
                <a href="#" id="example-hide" class="hideLink" onclick="showHide('example');return false;">(Verbergen)</a>
                </div>
            
        <br/><br/>
        <input type="submit" value="Reactie toevoegen" onclick="this.value='Reactie wordt geplaatst...';" />
        </form>
</div>

</body>
</html>


heeft de funtie htmlspecialchars() niet een 2e parameter voor de tekenset?
Ivo P op 02/04/2015 21:42:01

stripslashes()

als er slashes in je database staan, dan heb je bij het opslaan een probleem.

bij het echo-en zou je die stripslashes() niet nodig moeten hebben. (die functie zou je sowieso nooit nodig moeten hebben)

Hooguit als jouw server een oeroude magic-quotes setting aan heeft staan.
http://wiki.pfz.nl/magicquotes




Wat bedoel je hiermee? Ik heb hier specifiek nog nooit echt mee gewerkt... Ik probeer de example in te voegen en deze later aan te passen. Want ik leer heel veel van het invoegen van iets en dan ermee gaan spelen...

En van alles goede antwoorden die ik hier krijg in hulp!

Reageren