webForumDet fria alternativet

Nyhetsscript [VARNING: Mycket script]

11 svar · 744 visningar · startad av WiZzLeR

WiZzLeRMedlem sedan juni 2002346 inlägg
#1
 <?php

if($uppgift['a_lvl']>=2){
if (isset($_GET['radera'])){
	$sql = "delete from nyheter where id='{$_GET['radera']}'";
	mysql_query($sql);
}

	if(isset($_GET['edit'])){
	
	$sql = "update nyheter set rubrik='{$_POST['editrubbe']}', inlagg='{$_POST['editinlagg']}' where id='{$_GET['edid']}'"; 
    mysql_query($sql); 
}
	if(isset($_GET['add'])){
	
	$sql = "INSERT INTO nyheter(rubrik, uid, inlagg, datum, av) 
            VALUES('{$_POST['newrubbe']}', '{$_POST['userid']}', '{$_POST['addinlagg']}', '$date_now', '{$uppgift['username']}')"; 
    mysql_query($sql); 
}				
if(isset($_GET['addnyhet'])){
	print "
	<form method='post' action='?s=nyheter&add='>
	Du är inloggad som: <b>".$uppgift['username']."</b> med id# <b>".$uppgift['id']. "</b>
	<br>
	Dagens datum är: <b>".$date_now."</b>
	<br>
	<br>
	Rubrik: 
	<br>
	<input type='text' size='40' name='newrubbe' class='input'>
	<br>
	<br>
	<textarea name='addinlagg' rows=5 cols=95  class='input'></textarea>
	<br>
	<input type='submit' value='Posta!' name=editt class='input'>
	<input type='hidden' name='userid' value='".$uppgift['id']."'></form>
	<br>";
}else{
	print "<div align='right'><a href='?s=nyheter&addnyhet='><img src='images/new.gif' alt='Lägg till nyhet' width='10' height='10' border='0'></a> <a href='?s=nyheter&hjalp='><img src='images/help.gif' alt='Hjälp' width='10' height='10' border='0'></a> <br><br></div>";
}
}

$limit = 7; 
$result = mysql_query("SELECT count(*) as count FROM nyheter") or die("Error fetching number in DB<br>".mysql_error()); 
$row = mysql_fetch_array($result); 
$numrows = $row['count']; 

if (!isset($_GET['sida']) || $_GET['sida'] == "") 
  $sida = 0; 
else 
  $sida = $_GET['sida']; 

$pages = intval($numrows/$limit); 
if ($numrows%$limit) 
  $pages++; 

if ($sida > 0) { 
  $numlink = '<a href="?s=nyheter&sida='.($sida - $limit).'">« Förra</a> '; 
} else { 
  $numlink = ""; 
} 

if ($numrows > ($sida + $limit)) 
  $numlink .= '<a href="?s=nyheter&sida='.($sida + $limit).'">Nästa »</a> '; 
else 
  $numlink .= ""; 

$sql = mysql_query("SELECT * FROM nyheter ORDER BY datum desc LIMIT ".$sida.",".$limit."");
	while($row=mysql_fetch_array($sql)){
	$row['inlagg'] = nl2br(htmlentities($row['inlagg']));
	$row['inlagg'] = wordwrap($row['inlagg'],95,"\n",1);
	$row['inlagg'] = preg_replace( "/\[b\](.+)\[\/b\]/is", "<b>\\1</b>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[i\](.+)\[\/i\]/is", "<i>\\1</i>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[u\](.+)\[\/u\]/is", "<u>\\1</u>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[center\](.+)\[\/center\]/is", "<div align=\"center\">\\1</div>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[email\](.+)\[\/email\]/is", "<a href='mailto:\\1'>\\1</a>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[URL=(.+)\](.+)\[\/URL\]/is", "<a target='_blank' href='\\1'>\\2</a>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[IMG=(.+),(.+)\](.+?)\[\/IMG\]/is", "<img src='\\3' width='\\1' height='\\2'>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[IRC=(.+)\](.+)\[\/IRC\]/is", "<a target='_blank' href='irc://\\1'>\\2</a>", $row['inlagg'] );
	$row['inlagg'] = preg_replace( "/\[ftp\](.+)\[\/ftp\]/is", "<a target='_blank' href='\\1'>\\1</a>", $row['inlagg'] );

	$id = $row['id'];
	$num = mysql_result(mysql_query("SELECT COUNT(*) FROM kommentarer where nyhet_id = '$id'"),0);

	           
if($uppgift['username']==$row['av']){
	$urlok =  "<a href='?s=nyheter&editera=".$row['id']."'><img src='images/edit.gif' alt='Edit' width='10' height='10' border='0'></a> <a href='?s=nyheter&radera=".$row['id']."'><img src='images/del.gif' alt='Delete' width='10' height='10' border='0'></a>";
}elseif($uppgift['a_lvl']>=3){ 
	$urlok =  "<a href='?s=nyheter&editera=".$row['id']."'><img src='images/edit.gif' alt='Edit' width='10' height='10' border='0'></a> <a href='?s=nyheter&radera=".$row['id']."'><img src='images/del.gif' alt='Delete' width='10' height='10' border='0'></a>";
 }else{
	$urlok= "";
}
$editera = isset($_GET['editera'])?$_GET['editera']:NULL;
if($editera!=$row['id']){
	print"
<table width=\"530\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  <tr>
    <td>
	 <a class=\"header\">".$row['rubrik']."</a><br>".$row['datum']." | <a href='?s=medlem&id=".$row['uid']."'>".$row['av']."</a> | <a href='?s=kommentar&id=".$row['id']."'>Kommentarer (".$num.")</a> ".$urlok."
	</td>
  </tr>
  <tr>
    <td>
	 <hr>
	</td>
  </tr>
  <tr>
    <td>".$row['inlagg']."</td>
  </tr>
  <tr>
    <td><br><br>
  </td>
  </tr>
</table>";
}
elseif(($editera==$row['id']&$uppgift['username']==$row['av']) || ($uppgift['a_lvl']>=3)) {
	print "
	<form method='post' action='?edit=&edid=".$row['id']."'>
	Du är inloggad som: <b>".$row['av']."</b> med id# <b>".$row['uid']. "</b>
	<br>
	Dagens datum är: <b>".$row['datum']."</b>
	<br>
	<br>
	Rubrik:
	<br>
	<input type='text' size='40' name='editrubbe' value='".$row['rubrik']."' class='input'>
	<br>
	<br>
	<textarea name='editinlagg' rows=5 cols=95  class='input'>".$row['inlagg']."</textarea>
	<br>
	<input type='submit' value='edita!' name='edit'  class='input'>
	</form>";
}
}
print "<div align='right'><br><br>".$numlink."</div>";
?>

Ja.. i alla fall. som ni ser har jag ett nyhetsscript med kanske inte världens bästa scriptning eftersom jag fick byta en massa pga nya php versioner. Och mitt problem är att när man trycker på editera så skrivs <br /> och html taggarna ut. Hur fixxar jag detta så när man trycker på editera så får man bara fram det man skrev in, alltså URL taggarna och så vidare. *Tips: det har något med preg_replace att göra eftersom den sträcker sig ut ända till slutet. om jag inte gör det får jag inte fram editformen där inlägget var. ex: http://klanace.mine.nu/hjalp/nyheter_normal.gif http://klanace.mine.nu/hjalp/nyheter_editera.gif

PeddaMedlem sedan juni 20006 032 inlägg
#2

Använd nl2br

t.ex
$text = nl2br($text);

WiZzLeRMedlem sedan juni 2002346 inlägg
#3

mm jag har det i inläggsformatet. men sedan när jag ska redigera (editera form) så visas alla <br /> taggar etc... och det vill jag inte ha.

GrodanBollMedlem sedan sep. 2001788 inlägg
#4

nl2br använder du bara när du ska visa texten som HTML, ska du editera texten använder du inte nl2br. Du använder naturligtvis inte heller nl2br när du lägger in texten i databasen.
På så sätt håller du texten i databasen 'ren'.

Lättast är att skapa två funktioner:
En som du använder när du ska visa texten som HTML, t.ex. dbtextToHTML($text).
En funktion som du använder när du ska editera texten i ett formulär, t.ex. dbtextToEdit($text).

MatteMedlem sedan aug. 20002 975 inlägg
#5

Som både Pedda och GrodanBoll nämnt så är det bättre att köra nl2br() först när du skriver ut.

Men har du nu redan dina <br /> i den sparade texten, så kan du testa att ta bort <br /> genererade av nl2br() med:

$text = preg_replace("/<br \/>\s*$/m", "", $text);
WiZzLeRMedlem sedan juni 2002346 inlägg
#6

jag använder nl2br när den printar ut inlägget och sedan stäcker den ut sig till slutet. om jag tar bort det så blir det bara fel.

$row['inlagg'] = nl2br(htmlentities($row['inlagg']));

och "phpbb" taggarna blir bara fel. jag måste på något sätt isolera editera printen från nl2br utan att det ska bli bivärkningar som t.ex att printen printas på slutet av sidan och inte där inlägget ligger. Se screenshotsen: http://klanace.mine.nu/hjalp/nyheter_editera.gif

MatteMedlem sedan aug. 20002 975 inlägg
#7

Ditt problem ligger i den här koden, om jag läser den rätt:

    $row['inlagg'] = nl2br(htmlentities($row['inlagg']));
    $row['inlagg'] = wordwrap($row['inlagg'],95,"\n",1);
    $row['inlagg'] = preg_replace( "/(.+)/is", "<b>\1</b>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/(.+)/is", "<i>\1</i>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/(.+)/is", "<u>\1</u>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/[center](.+)[/center]/is", "<div align=\"center\">\1</div>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/(.+)/is", "<a href='mailto:\1'>\1</a>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/[URL=(.+)](.+)[/URL]/is", "<a target='_blank' href='\1'>\2</a>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/[IMG=(.+),(.+)](.+?)[/IMG]/is", "<img src='\3' width='\1' height='\2'>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/[IRC=(.+)](.+)[/IRC]/is", "<a target='_blank' href='irc://\1'>\2</a>", $row['inlagg'] );
    $row['inlagg'] = preg_replace( "/[ftp](.+)[/ftp]/is", "<a target='_blank' href='\1'>\1</a>", $row['inlagg'] );

Därefter lägger du in den i textarean.
Har jag hängt med rätt i koden ?

Gör istället så att du lägger koden ovan i en funktion, och kör genom den funktionen de gånger du inte ska lägga in i textarean.

När du ska lägga in i textarean kör du istället:
htmlentities($row['inlagg'] )

Brasklapp: Om jag förstått din kod rätt :)

WiZzLeRMedlem sedan juni 2002346 inlägg
#8

låter logiskt, ska testa. och ja du har hängt med koden rätt.

TomasAMedlem sedan feb. 2003173 inlägg
#9

Hej Matte och WiZzLeR
Tar upp en gammal tråd.

Jag har ett script som epostar utskick av medlemsinfo
Adresserna hämtar jag i en databas
Meddelandet skriver jag in i ett vanligt inmatningsfält.
Men detta klarar då inte HTML-kod.

Skall jag i min skicka-fil (php) lägga in denna kod - då också kompletterad
med fler HTML-koder typ <table> mm

Eller finns det någon genväg?

Hälsningar
Still rockie i php

PeddaMedlem sedan juni 20006 032 inlägg
#10

Antar att du använder mail() för att skicka. Då måste du skicka med lite extra headers för att det ska behandlas som html.
Kolla manualen, där finns exempel på hur du skickar html mail.
http://se.php.net/manual/sv/function.mail.php

TomasAMedlem sedan feb. 2003173 inlägg
#11

Skall kika
Men jag har
<form method="post">

Är det en annan funktion?

PeddaMedlem sedan juni 20006 032 inlägg
#12

Formuläret har inte med mailfunktionen att göra.
Om du i ditt formulär skriver t.ex <strong>Hej</strong> så kommer det visas likadant i mailet om du inte har headers som säger att det är ett html mail.

Exempel från manualen på html mail

<?php
// multiple recipients
$to  = 'aidan@example.com' . ', '; // note the comma
$to .= 'wez@example.com';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
?>
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)