Webhjelp Skrevet 19. august 2010 Del Skrevet 19. august 2010 (endret) 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 19. august 2010 av Webhjelp Lenke til kommentar
Warz Skrevet 19. august 2010 Del Skrevet 19. august 2010 Du leter etter noen som kan kode dette scriptet for deg gratis? Lenke til kommentar
Thomas. Skrevet 19. august 2010 Del Skrevet 19. august 2010 (endret) 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 19. august 2010 av Thomas. Lenke til kommentar
Warz Skrevet 19. august 2010 Del Skrevet 19. august 2010 Fin kode, jeg ser du bruker PDO Thomas, pleier servere å komme med det? Lenke til kommentar
Thomas. Skrevet 19. august 2010 Del Skrevet 19. august 2010 Fin kode, jeg ser du bruker PDO Thomas, pleier servere å komme med det? Spørs om du tenker på gratis eller sånn du betaler for? Men det er ganske vanlig, ja. Lenke til kommentar
Webhjelp Skrevet 20. august 2010 Forfatter Del Skrevet 20. august 2010 Tusen hjertelig takk! Lenke til kommentar
Zic0 Skrevet 21. august 2010 Del Skrevet 21. august 2010 (endret) Okei, lagde noe kjapt (gjestebok). Bruker MySQL. Tabell: `dato` varchar(255) NOT NULL, http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html Endret 21. august 2010 av Zic0 Lenke til kommentar
Alex Moran Skrevet 21. august 2010 Del Skrevet 21. august 2010 (endret) 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 21. august 2010 av Josh Homme Lenke til kommentar
Thomas. Skrevet 21. august 2010 Del Skrevet 21. august 2010 Sånn FYI, så er koden vidåpen for SQL injections og har en del rare løsninger. Var bare noe jeg lagde kjapt Kan du nevne noen eksempler på injections som kan brukes? Vil teste. Lenke til kommentar
Zic0 Skrevet 21. august 2010 Del Skrevet 21. august 2010 (endret) http://en.wikipedia.org/wiki/Sql_injections Endret 21. august 2010 av Zic0 Lenke til kommentar
Thomas. Skrevet 21. august 2010 Del Skrevet 21. august 2010 (endret) http://en.wikipedia..../Sql_injections Vet hva det er.. Kan de grunnlegende med ', \, /*, 1 OR 1=X osv.. Lurer på om du har noe eksempel som fungerer i koden over. Endret 21. august 2010 av Thomas. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå