Gå til innhold

PHP og MySQL: Vise tekst nøyaktig slik det ble lagret


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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 av Slettet+9871234
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...