Gå til innhold

hente script fra en database


Anbefalte innlegg


jeg har prøvd litt å lage en database for informasjonen på en nettside.

 

 

 

<?php

$host = 'localhost';

$username = 'root';

$password = 'abc123';

$con = mysql_connect($host , $username , $password);

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

 

mysql_select_db("occadest", $con);

 

$result = mysql_query("SELECT * FROM page WHERE id = '$_GET

 

$page = mysql_fetch_array($result);

?>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<title><?php echo $page[title]; ?></title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

<?php echo "$page[body]"; ?>

<!-- /innhold -->

</body>

</html>

<?php

mysql_close($con);

 

?>


'");

 

 

Dette fungerer ganske bra. Problemet er hvis attributten "body" i databasen min inneholder et script, bli det bare skrevet ut som tekst.

 

hvis $page[body] = '<?php echo 1+1; ?>' blir altså det samme, mens jeg ønsker at svaret skal bli to.

 

Hvordan er det jeg kommer rundt dette?

Endret av Stegz
Lenke til kommentar
Videoannonse
Annonse

Skal jeg bytte ut <?php echo $page[body]; ?> med <?php eval($page[body]); ?> ?

 

Isåfall fikk jeg en feilmelding

 

Parse error: syntax error, unexpected '<' in D:\wamp\www\sql\index.php(57) : eval()'d code on line 1

Lenke til kommentar

hmm. du må parse body og hente ut <?php ... ?>. så kjøre eval på hver av de.

 

letteste er å lage en tmp.php fil og inkludere den

 

file_put_contents('tmp.php', $page['body']);

include('tmp.php');

 

ellernoe

Endret av grimjoey
Lenke til kommentar

file_put_contents('tmp.php', $page['body']);

include('tmp.php');

 

Det funket flott :)

 

Dukket nettopp opp et mindre problem.

 

Jeg har en liten form på en av sidene mine og bruker denne til å teste SQL.

Når jeg skriver inn en kode og trykker kommer det opp en liten linje med tekst helt nederst i tilleg til det vanlige.

Warning: mysql_close(): 2 is not a valid MySQL-Link resource in D:\wamp\www\sql\index.php on line 68

 

Hele siden:

 

 

<?php

$host = 'localhost';

$username = 'root';

$password = 'abc123';

$con = mysql_connect($host , $username , $password);

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

 

mysql_select_db("occadest", $con);

 

$result = mysql_query("SELECT * FROM page WHERE id = '$_GET

 

$page = mysql_fetch_array($result);

 

 

// some code

 

?>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<title><?php echo $page[title]; ?></title>

<link rel="stylesheet" type="text/css" href="main.css" />

<link rel="shortcut icon" href="images/favicon.ico" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

 

<body>

 

<div id="maincontent">

<div id="header">

 

<img src="images/header.png" alt="header" />

</div>

 

<div id="menu">

<ul>

<?php

$result = mysql_query("SELECT * FROM page WHERE menu = 1");

 

while ($menu = mysql_fetch_array($result)) {

 

echo "<li><a href=\"?page=$menu[id]\">$menu[title]</a></li>";

 

}

 

 

?>

</ul>

</div>

 

<div id="content">

<!-- innhold -->

<?php

file_put_contents('tmp.php', $page['body']);

require('tmp.php'); ?>

<!-- /innhold -->

</div> <br class="clearfloat" />

</div>

 

 

</body>

</html>

<?php

mysql_close($con);

 

?>

 

 


'");

 

Lenke til kommentar

kan hende </body> eller </html> trigger php til å avslutte mysql_connect(). prøv å flytt mysql_close() et par linjer opp.

 

(du kan egentlig fjerne den hvis du vil. link resource trenger du bare å følge med på dersom du har ekstreme mengder queries eller flere databasetilkoblinger.)

 

btw: husk og slette tmp.php etter inkludering.

Endret av grimjoey
Lenke til kommentar

poenget er å ikke la gammel info ligge lagret. dersom man ikke fjerner innholdet i filen kan det ligge sensitiv informasjon i filen som er blitt slettet fra databasen, helt til neste sidebesøk hvor filen blir overskrevet. det er kjappere å skrive put_file_contents enn å bruke $var = fopen(); fwrite();fclose();

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...