Gå til innhold

Veldig enkelt kommentar-system!


Anbefalte innlegg

Heisann, nå trenger jeg et helt basic "legg igjen en hilsen"-system. Det er det samme om det er med mysql eller flatfiler. Men jeg vil ha dette i PHP. Jeg skal ikke ha slik med admin, men bare slik at folk kan poste en hilsen eller to. Visst det er med mysql, vil jeg gjerne få se IPen på de som skriver på phpmyadmin. Men jeg vil ha noe look-like dette:

 

Post en hilsen:

 

Navn: | |

Epost: | | (vil ikke bli vist)

Hilsen: | |

 

Men visst dette er på flatfiler, vil jeg ha alle hilsenene skal gå til en mappe, f.eks "beskjeder", og ligger da i hver sin .txt fil.

 

Noen som vet om, eller gidder å lage et slikt lite script for meg?

HELST med mysql ;)

 

 

Er veldig dårlig på å forklare, men det er bare å spørre visst du lurer på noe under her.

Endret av Webhjelp
Lenke til kommentar
Videoannonse
Annonse

Okei, lagde noe kjapt (gjestebok). Bruker MySQL. :)

 

Tabell:

 

-- 
-- Table structure for table `gjestebok`
-- 

CREATE TABLE `gjestebok` (
`id` int(11) NOT NULL auto_increment,
`navn` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`melding` text NOT NULL,
`dato` varchar(255) NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;

 

 

Koble til database: (husk endre til din db-info) (db.class.php)

 

<?php

class db {

private static $instance = NULL;

private function __construct() {

}

public static function getInstance() {
	if(!self::$instance) {
		self::$instance = new PDO('mysql:host=localhost;dbname=DATABASE_NAVN', 'BRUKERNAVN', 'PASSORD');
		self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		self::$instance->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); 
	}
	return self::$instance;
}

private function __clone() {

}

public static function Rows() {
	$row = self::$instance->query('SELECT found_rows() AS rows');
	foreach($row->fetchAll(PDO::FETCH_OBJ) as $obj)
		$rowsAntall = $obj->rows;
	$row->closeCursor();
	return $rowsAntall;
}

}

?>

 

 

Gjestebok:

 

<h2>Gjestebok</h2>
	<p>
<?php

require 'db.class.php';
DB::getInstance();

if(isset($_POST['leggtil'])) {

	$navn = htmlspecialchars($_POST['navn'], ENT_QUOTES);
	$melding = htmlspecialchars($_POST['melding'], ENT_QUOTES);
	$email = htmlspecialchars($_POST['ee'], ENT_QUOTES);
	$dato = date('d. M Y | H:i');
	$ip = $_SERVER['REMOTE_ADDR'];

	if(!preg_match('/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/', trim($email))) {
		echo 'E-mailen du skrev inn er ugyldig!';
	}
	else {
		if(strlen($navn) > 0) {
			if(strlen($melding) > 0) {
				if(strlen($navn) > 41) {
					DB::getInstance()->query('INSERT INTO gjestebok (navn, email, melding, dato, ip) VALUES(\'' . $navn . '\', \'' . $email . '\', \'' . $melding . '\', \'' . $dato . '\', \'' . $ip . '\')');
					echo 'Din melding er lagt til!';
				}
			}
			else {
				echo 'Du har ikke skrevet inn en melding!';
			}
		}
		else {
			echo 'Du har ikke skrevet inn ett navn!';
		}
	}

}

?>
	<form action="" method="post">
	<table>
		<tr>
		<td>Navn:</td>
	<td><input type="text" name="navn" maxlength="40" /></td>
	</tr>
	<tr>
		<td>Email:</td>
	<td><input type="text" name="ee" maxlength="255" /></td>
	</tr>
	<tr>
		<td valign="top">Melding:</td>
	<td><textarea name="melding" rows="7" cols="40"></textarea></td>
	</tr>
	<tr>
		<td></td>
	<td><input type="submit" name="leggtil" value="Post!" /></td>
	</tr>
	</table>
	</form>
	</p>
<br />
<?php

$sql = DB::getInstance()->query('SELECT id, navn, melding, dato FROM gjestebok ORDER BY id DESC');

foreach($sql as $row) {

?>
<div id="str">
<div id="c-v"></div>
<div id="c">
	<span><?php echo $row['navn']; ?> skrev: <font style="float:right; font-size:12px; color:#999; margin-top:1px;"><?php echo $row['dato']; ?></font></span>
</div>
<div id="c-h"></div>
</div>
<div id="innhold">
<?php echo nl2br(htmlspecialchars_decode(htmlspecialchars($row['melding']))); ?>
</div>
<?php

}

?>

 

Endret av Thomas.
Lenke til kommentar

Sånn FYI, så er koden vidåpen for SQL injections og har en del rare løsninger.

 

Forslag:

 

 

CREATE TABLE `guestbook_entries` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `email` varchar(255) DEFAULT NULL,
 `body` text,
 `ip` int(11) DEFAULT '0',
 `created_at` datetime DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


<?php

function h($string) {
return htmlspecialchars($string, ENT_QUOTES, 'utf-8');
}

date_default_timezone_set('Europe/Oslo');

$connection = new PDO('mysql:host=localhost;dbname=DBNAME', 'USERNAME', 'PASSWORD');
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

// To preserve values in form
$data = array('name' => null, 'email' => null, 'body' => null);
$errors = array();

if (strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
$data = $_POST['guestbook'];

if (empty($data['name'])) {
	$errors[] = 'Name can not be empty';
}

if (empty($data['body'])) {
	$errors[] = 'Message can not be empty';
}

if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
	$errors[] = 'The provided email is not valid.';
}

if (count($errors) === 0) {
	$statement = $connection->prepare("INSERT INTO guestbook_entries (name, email, body, ip, created_at) VALUES (?, ?, ?, ?, ?)");
	$statement->execute(array($data['name'], $data['email'], $data['body'], ip2long($_SERVER['REMOTE_ADDR']), date('Y-m-d H:i:s')));
	$data = null;
}
}

$statement = $connection->prepare("SELECT * FROM guestbook_entries");
$statement->execute();
$entries = $statement->fetchAll(PDO::FETCH_OBJ);
?>


<? foreach ($errors as $error) : ?>
<p><?= $error ?></p>
<? endforeach; ?>
<form action="" method="post">
<label for="name">Navn</label>
<input type="text" name="guestbook[name]" id="name" value="<?= $data['name'] ?>">

<label for="email">E-post</label>
<input type="email" name="guestbook[email]" id="email" value="<?= $data['email'] ?>">

<label for="body">Melding</label>
<textarea name="guestbook[body]" id="body"><?= $data['body'] ?></textarea>

<button type="submit">Send inn</button>
</form>

<h2>Innlegg (<?= count($entries) ?>)</h2>
<? foreach ($entries as $entry) : ?>
<div>
	<p>Posted by <?= h($entry->name) ?> at <?= $entry->created_at ?></p>
	<?= h($entry->body) ?>
</div>
<? endforeach; ?>

 

 

 

Oh, I feel ugly mixing concerns like this...

Endret av Josh Homme
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...