Gå til innhold

hente script fra en database


Anbefalte innlegg

Skrevet (endret)

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

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

Skrevet (endret)

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
Skrevet

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);

 

?>

 

 


'");

 

Skrevet (endret)

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
Skrevet (endret)

Puttet

file_put_contents('tmp.php', "")

etter include, så nå blir innholdet i tmp.php slettet hver gang.

 

Takk for hjelp!

Endret av Stegz
Skrevet
Puttet
file_put_contents('tmp.php', "")

etter include, så nå blir innholdet i tmp.php slettet hver gang.

 

Takk for hjelp!

Hva er poenget med det? Den blir jo overskrevet neste gang uansett.

Foreslår heller at du bruker http://no.php.net/tmpfile som er laget for formålet. Når du kaller fclose blir den slettet.

Skrevet

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();

Skrevet

Jeg har nå akkurat det samme problemet med upload.

 

Jeg har en liten form der jeg laster opp nye sider til databasen. Den funker veldig bra helt til jeg skriver phpscript. Hvordan gjør jeg nå dette?

Skrevet (endret)

$_POST['body'] = mysql_real_escape_string(get_magic_quotes_gpc()?stripslashes($_POST['body']):$_POST['body']);

Endret av grimjoey

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å
×
×
  • Opprett ny...