Hoi.

Ik ben momenteel bezig aan een eigen nieuwssysteem. Nu zit ik bij een bericht posten. Nu zit ik met het volgende probleem. Ik wil dus een bericht invoeren na een trim en een real_escape_string. Nu, als ik dat bericht laat tonen op de site ziet het eruit als volgt
Ik\r\nBen\r\nTof

wat op hetzelfde neerkomt als
Ik
Ben
Tof


Nu voegt hij niet het eerste maar het 2de in de database. Hoe komt dit? En hoe komt hetdan dat dat op mijn site dan weer als 1 regel wordt geplaatst? Dit is trouwens mijn db

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(3) NOT NULL auto_increment,
  `topic` varchar(255) default NULL,
  `message` longtext,
  `date` varchar(11) default NULL,
  `time` time default NULL,
  `poster` varchar(100) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


Dit is trouwens de opbouw voor het maken van een bericht

<?
// Menu Boven
echo '<b>Welkom '.$username.':</b> <a href="./">Overzicht</a> - <a href="./?action=logout">Loguit</a> - <a href="./?action=post">Post een bericht</a> - <a href="./?action=edit">Een bericht bewerken</a><br><br>';

// We gaan eerst kijken of er op de knop is gedrukt
if(isset($_POST['zt_sub_post'])) {
 // Variable's Maken
 $ms_topic = $_POST['topic'];
 $ms_messa = $_POST['message'];
 $ms_screen = $_POST['screen'];
 $ms_date = date('d-m-Y');
 $ms_time = date('H:i:s');
 
 // Controle van velden
 if (trim($ms_topic == "")) {
  echo 'U hebt geen onderwerp ingevuld!<br><br><b>Ga terug</b>';
 } elseif (trim($ms_messa == "")) {
  echo 'U hebt geen bericht ingevuld!<br><br><b>Ga terug</b>';
 } else {
  // Spaties omzetten naar een teken
  $ms_messa_end = trim($ms_messa);
  $ms_messa_end = mysql_real_escape_string($ms_messa_end);
  
  // upload database
  $con = mysql_query("INSERT INTO news (topic, message, date, time, poster) VALUES ('".$ms_topic."', '".$ms_messa_end."', '".$ms_date."', '".$ms_time."', '".$ms_screen."')");
  echo '<meta http-equiv="refresh" content="0;URL=./" />';
  echo 'Uw bericht is gepost!<br>U wordt doorgeschakeld';
 }
} else {

 // Maken van Layout
 echo '<form method="POST" action="'.$_SERVER['PHP_SELF'].'?action=post">';
 echo '<font size="2" color="red"><b>Een nieuw berichtje maken</b></font><br>';
 echo '<table border="0" cellpadding="0" cellspacing="5">';
 echo '<tr>';
 echo '<td><b>Onderwerp:</b>&nbsp;</td>';
 echo '<td><INPUT type="text" name="topic" size="50"></td>';
 echo '</tr>';
 echo '<tr>';
 echo '<td align="top" valign="top"><b>Bericht:</b>&nbsp;</td>';
 echo '<td><TEXTAREA cols="50" rows="6" name="message"></textarea></td>';
 echo '</tr>';
 echo '</table>';
 echo '<input type="submit" value="Verzenden" name="zt_sub_post">';
 echo '<input type="reset" value="Wis Velden">';
 echo '<input type="hidden" value="'.$_SESSION['log_zuta_suc_screen'].'" name="screen">';
 echo '</form>';
 
}

// Menu onder
echo '<br><br>';
echo '<b>Menu:</b> <a href="./">Overzicht</a> - <a href="./?action=logout">Loguit</a> - <a href="./?action=post">Post een bericht</a> - <a href="./?action=edit">Een bericht bewerken</a>';

?>


Een pagina voor het nieuws weer te geven heb ik nog niet.
[php]nl2br[/php] gebruiken?
hey, bedankt, dat helpt al. Nu zit ik met het volgende probleem. Als ik een lange text wil toevoegen, zegt hij dat het gepost is, maar wordt het toch niet in de database gezet. Hoe zou dit komen?

ps: ik gebruik nog steeds dezelfde code als hierboven! Behalve dan de real_escape_string
En hij geeft geen error?

En als hij maar een gedeelte invoert moet je even controleren of de DB op LONGTEXT staat en niet toevalig op VARCHAR.

Ps. zet dit even bovenaan je scipt:
<?php
error_reporting("E_ALL");
LONGTEXT is niet echt nodig, TEXT is ruim voldoende voor een gemiddeld nieuwsbericht. Maar inderdaad, wel even checken. Als het een VARCHAR is, slaat MySQL vrolijk datgene op wat in het veld past. De rest ben je kwijt.

Tip:

<?php
    if(isset($_POST['zt_sub_post'])) {
     // Variable's Maken
         $ms_topic = $_POST['topic'];
         $ms_messa = $_POST['message'];
         $ms_screen = $_POST['screen'];
         $ms_date = date('d-m-Y');
         $ms_time = date('H:i:s');
    }
?>

Is overbodige code. De ene variabele kopiƫren in de andere zonder er iets mee te doen is tijd/geheugenverlies. Je manier om te controleren of het formulier verzonden is kan ook beter. De datum en de tijd kun je automatisch laten invullen door MySQL. Gebruik daarvoor een DATETIME veld. Jouw datumformaat (d-m-Y) daar kan een database helemaal niets mee. Niet rekenen, niet sorteren, noppes. Beter zo (code niet getest):
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL | E_STRICT);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// hier checks uitvoeren of ze wel iets ingevuld hebben
// dan INSERTen in je DB
$sql = "
INSERT INTO tabelnaam
(
topic,
message,
screen,
datumtijd
)
VALUES
(
'" . mysql_real_escape_string ($_POST['topic']) . "',
'" . mysql_real_escape_string ($_POST['message']) . "',
'" . mysql_real_escape_string ($_POST['screen']) . "',
NOW()
)
";
if (mysql_query ($sql)) {
if (mysql_affected_rows ()) {
$msg = '<p class="msg">Record toegevoegd</p>';
}
else {
$msg = '<p class="err">Record toevoegen mislukt</p>';
}
}
else {
$msg = '<p class="err">INSERT query mislukt</p>';
}
}

// en dan verderop in je script, op een plek waar je errors en meldingen wilt laten zien:

if (isset ($msg)) {
echo $msg;
}
?>
Hey thx jan. Nu werkt het perfect met deze code ;)

Reageren