reminett Skrevet 7. januar 2011 Del Skrevet 7. januar 2011 Hei! Jeg vil gjøre følgende: 1. Bruke PHP til å lagre tekst fra en <form> i MySQL, nøyaktig slik det ble skrevet 2. Echo denne teksten igjen nøyaktig slik det ble skrevet Med andre ord, man skal kunne skrive hva man vil og vise det igjen uten at noe sånt som at koder blir kjørt, fet tekst dersom teksten har <b> i seg osv osv... Spørsmålet er: Hvordan bør SQL-tabellen min se ut, og hvordan lagrer og henter jeg det for å oppnå dette? Lenke til kommentar
Thomas. Skrevet 7. januar 2011 Del Skrevet 7. januar 2011 Tabellen kan se slik ut: CREATE TABLE `tabell` ( `id` int(11) not null auto_increment, `tekst` varchar(255) default 'Ingen tekst ble lagt til', UNIQUE KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; Det vi gjør i scriptet, er og koble til databasen og setter inn dataen i databasen som vi skriver i formen. Under formen vises alle tekster som er sendt inn. Har mekket sammen et eksempel, og kommentert litt om hva som skjer: HTML koder som <b>, <em>, <u> også videre kan fint brukes (annbefales ikke). <?php /** Koble til MySQL **/ /** host, bruker, passord **/ mysql_connect('localhost', 'root', ''); /** hvilken database? **/ mysql_select_db('test'); /** Hvis vi trykker Legg Til Tekst knappen.. **/ if(isset($_POST['sub'])) { /** Hvis feltet ikke er tomt **/ if(!empty($_POST['gf'])) { /** Sett inn infoen i tabellen **/ mysql_query('INSERT INTO tabell(tekst) VALUES(\'' . $_POST['gf'] . '\')'); /** Sender brukeren til filen(denne) **/ header('Location: ' . $_SERVER['REQUEST_URI'] . ''); } } ?> <form action="" method="post"> Tekst: <input type="text" name="gf"> <input type="submit" name="sub" value="Legg Til Tekst"> </form> <?php /** Vi henter ut hva som er skrivd inn ved og kjøre en spørring **/ $sql = mysql_query('SELECT * FROM tabell ORDER BY id DESC'); /** Hvis det er noen som har skrevet til databasen før (hvis ikke tabellen er tom/inneholder ingen data) **/ if(mysql_num_rows($sql) > 0) { /** Loop igjennom alle som har skrivd til databasen, og print ut hva dem har skrivd **/ while($row = mysql_fetch_array($sql)) { echo 'Teksten som ble skrivet inn: <strong>' . $row['tekst'] . '</strong><br>'; } } /** Hvis tabellen ikke inneholder data, vis denne meldingen **/ else { echo 'Det er ingen som har skrevet noe!'; } ?> Lenke til kommentar
BigJackW Skrevet 8. januar 2011 Del Skrevet 8. januar 2011 (endret) Thomas.: Scriptet ditt er åpent for XSS-injections. Er klar over at det er et eksempel, men har følelsen av at mange bruker de eksemplene de får, på sine websider, uendra. mysql_real_escape_string(), evt. quote_smart() Endret 8. januar 2011 av BigJackW Lenke til kommentar
reminett Skrevet 10. januar 2011 Forfatter Del Skrevet 10. januar 2011 Tusen takk for et flott eksempel, Thomas! Fantastisk fint gjort at du faktisk laget hele scriptet til meg Jeg har prøvd å se gjennom koden her, uten å bli helt klok på hva det er som gjør at ingen ting av noen evt kode som er i teksten som legges inn, ikke kjøres? Lenke til kommentar
Thomas. Skrevet 10. januar 2011 Del Skrevet 10. januar 2011 Du mener at ingen kan kjøre skadelig kode? Holder med å legge til htmlspecialchars og mysql_real_escape_string i første omgang, eventuelt quote_smart(denne funksjonen er ikke innebygd) som nevnt over. mysql_query('INSERT INTO tabell(tekst) VALUES(\'' . htmlspecialchars(mysql_real_escape_string($_POST['gf'])) . '\')'); Lenke til kommentar
Gjest Slettet+9871234 Skrevet 11. januar 2011 Del Skrevet 11. januar 2011 (endret) Det aller beste er kan hende å bruke PDO og "prepared statements". Merk også at sql injections via "magic quotes" ikke er mulig i PHP 6, da de er slettet. Features: •Unicode support; •APC opcode cache as standard; •Removal of several deprecated features (eg magic quotes, register globals, the ereg library and safe mode). Merk også at det meste som skal implementeres i PHP 6 allerde er implementert i PHP http://www.php.net/releases/5_3_5.php (siste stabile versjon når dette innlegget skrives). Hovedgrunnen til at PHP 6.0 lar vente på seg ser ut til å være unicode problemer. The recent release of PHP 5.3 included most of what was originally desirable about PHP6 http://stackoverflow.com/questions/2631303/php-6-0-roadmap Endret 11. januar 2011 av Slettet+9871234 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å