PHP Code in einer externen Datei?
Maus aus Düsseldorf
- php
Hallo euch allen,
heute morgen im Büro fragte mich ein Kollege warum ich eigentlich den ganzen PHP Code immer mit in die Datei schreibe. Da wurde die Datei viel zu groß. Hmm ich fragte ihn dann hmm wie soll ich das denn sonst machen, denn ich brauch den doch in der Seite. Mein Kollege meinte dann nur, ach das kannst du alles in eine externe Datei jeweils schreiben und dann jedes mal wenn du wieder was machen willst einfach einbinden. Darauf hin fragte ich Ihn dann hmm und wie soll das denn gehen. Dann meinte er nur das kann er mir jetzt nicht mal so eben einfach erklären. Leider sehe ich den Kollegen erst wieder in zwei Wochen.
Nun wollte ich mal euch fragen ob Ihr mir da helfen könnt wie man so was machen kann. Gehen wir mal von einem Gästebuch aus.
Bis jetzt habe ich das immer so gemacht:
posting_gb.php ( damit wird das ganze in die DB eingetragen )
PHP-Code:
<?php
//Konfigurations Datei einbinden
include "../data/config.php";
include "../configs/functions.php";
session_start();
if(isset($_GET["deleteid"]) AND $_SESSION["rights"] == "admin")
{
if(is_numeric($_GET["deleteid"]))
{
$sql = "DELETE FROM gastebuch
WHERE id = ".$_GET['deleteid'];
mysql_query($sql) OR die(mysql_error());
}
}
if(!empty($_POST))
{
$sql = "INSERT INTO gastebuch
(
name,
email,
url,
betreff,
text,
IP,
betriebsystem,
woher_kommt_user,
welche_software,
welcher_server,
datum
)
VALUES
(
'" . addslashes($_POST["name"]) . "',
'" . addslashes($_POST["email"]) . "',
'" . addslashes($_POST["url"]) . "',
'" . addslashes($_POST["betreff"]) . "',
'" . addslashes($_POST["text"]) . "',
'" . $_SERVER["REMOTE_ADDR"]. "',
'" . $_SERVER["HTTP_USER_AGENT"]. "',
'" . $_SERVER['HTTP_REFERER']. "',
'" . $_SERVER['SERVER_SOFTWARE']. "',
'" . $_SERVER['SERVER_NAME']. "',
NOW()
)
";
mysql_query($sql) OR die(mysql_error());
header("Location: http://www.meine_seite.de/gaestebuch.php");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="95%" border="0" align="center">
<tr>
<td height="124"><form name="form1" method="post" action="posting_gb.php">
<table width="100%" border="0">
<tr bgcolor="#efefef">
<td width="22%" height="28"><p>Name:</p></td>
<td width="78%"><input name="name" type="text" id="name" size="40"></td>
</tr>
<tr bgcolor="#efefef">
<td height="27"><p>WebSeite:</p></td>
<td><input name="url" type="text" id="url" size="40"></td>
</tr>
<tr bgcolor="#efefef">
<td height="29"><p>eMail:</p></td>
<td><input name="email" type="text" id="email" size="40"></td>
</tr>
<tr bgcolor="#efefef">
<td height="26"><p>Betreff:</p></td>
<td bgcolor="#efefef"><input name="betreff" type="text" id="betreff" size="40"></td>
</tr>
<tr bgcolor="#efefef">
<td height="38"><p>Nachricht:</p></td>
<td><textarea name="text" cols="40" rows="4" id="text"></textarea></td>
</tr>
<tr bgcolor="#efefef">
<td height="38"> </td>
<td><input type="submit" name="Submit" value=">> eintragen"></td>
</tr>
</table>
</form></td>
</tr>
</table>
</body>
</html>
gaestebuch.php ( damit werden die Einträge auf der Seite dann dargestellt )
PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Gästebuch</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Stil10 {font-family: Arial, Helvetica, sans-serif; color: #000000; }
.Stil25 {font-family: Arial, Helvetica, sans-serif; color: #FFFFFF; font-weight: bold; }
.Stil7 {font-family: Arial, Helvetica, sans-serif}
.style3 {color: #000000}
.style6 {color: #000000; }
-->
</style>
</head>
<body>
<table width="95%" align="left">
<tr>
<td height="198">
<?php
$sql = "SELECT
id,
name,
email,
url,
text,
betreff,
DATE_FORMAT(datum, '%Y-%m-%d') AS datum,
DATE_FORMAT(datum, '%H:%I') AS uhrzeit
FROM
gastebuch
ORDER BY
datum DESC
";
$return = mysql_query($sql) OR die(mysql_error());
?>
<?php
while($_data = mysql_fetch_assoc($return))
{
?>
<table width="95%" border="0">
<tr>
<td><table cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td colspan="2" height="12"><div align="left"><img src="../img/grafiken/nachricht.jpg" height="12" width="128"></div></td>
</tr>
<tr>
<td background="pixel.jpg" bgcolor="#A00608" width="1"><img src="fake.gif" height="1" width="1"></td>
<td width="100%"><table width="100%">
<tbody>
<tr>
<td align="left"><table width="98%" border="0" align="center">
<tr>
<td><p><span class="Stil25"><span class="style6"><?php echo $_data['betreff']; ?></span></span></p>
<p><span class="Stil7"><font color="#000000" size="2"><span class="Stil10"><font size="2"><font size="1"><?php echo htmlentities(stripslashes($_data['text'])); ?></font></font></span></font></span><br>
<br>
<span class="Stil7 style6"><span class="Stil7"><font size="2"><font size="1">Autor: <?php echo $_data['name']; ?> Email: <font size="2"><font size="1"><?php echo $_data['email']; ?> <span class="style3">
<?php
if($_SESSION['rights'] == "admin")
{
?>
<a href="<?php
echo $_SERVER["PHP_SELF"];
echo "?deleteid=".$_data['id'];
?>"><img src="../img/grafiken/del.gif" width="15" height="14" border="0"></a>
<?php
}
?>
</span></font></font></font></font></span></span> <br>
<br>
</p></td>
</tr>
</table></td>
</tr>
</tbody>
</table></td>
</tr>
<tr background="pixel.jpg" bgcolor="#A00608">
<td height="1" colspan="2" background="pixel.jpg"><img src="fake.gif" height="1" width="1"></td>
</tr>
</tbody>
</table>
<br></td>
<?php
}
?>
</tr>
<tr>
<td height="23"><div align="center"><a href="posting_gb.php" class="style6">[eintragen]</a></div></td>
</tr>
</table></td>
</tr>
</table>
<p> </p>
</body>
</html>
So nun ist meine Frage. Wie kann ich das nun so machen, dass ich den ganzen Code auslagere und wie muss ich das dann wieder einbinden und vor allem was muss ich dann bei Action schreiben?
Ich hoffe ich konnte das erklären, dass Ihr das alle verstanden habt. Wurde mich über eine antwort freuen.
Gruß Maus aus Düsseldorf
Hallo Maus aus Düsseldorf!
Zuerst einmal muss ich Dir sagen, dass Du mir leid tust am Sonntag im Büro sitzen zu müssen. ;o)
include "../data/config.php";
Du scheinst mit includes umgehen zu können. Was Dein Kollege meint, ist vermutlich jeden beliebigen PHP Code, der nicht direkt HTML ausgibt, in eine includierte Datei zu legen. Das macht aber nur bei sich wiederholendem Code, wie Du es auch verwendest z.B. für Datenbankzugriffe etc. Sinn. Denn was bringt Dir ausgelagerter Code, wenn Du ihn sowieso nur einmal in einer Datei verwendest?
Ich glaube eine Diskussion darüber mag verschiedene Philosophien hervorbringen, besser oder schlechter wird der Code dadurch aber sicher nicht.
Schönen Gruß
Afra
Hallo Afra,
Zuerst einmal muss ich Dir sagen, dass Du mir leid tust am Sonntag im Büro sitzen zu müssen. ;o)
Na ja das ist nicht so schlimm. Das Wetter ist draußen zwar richtig geil aber es gibt schlimmres. Am WE kann man wenigstens sehr gut arbeiten da klingelt nicht immer das Telefon *fg*
Du scheinst mit includes umgehen zu können. Was Dein Kollege meint, ist vermutlich jeden beliebigen PHP Code, der nicht direkt HTML ausgibt, in eine includierte Datei zu legen. Das macht aber nur bei sich wiederholendem Code, wie Du es auch verwendest z.B. für Datenbankzugriffe etc. Sinn. Denn was bringt Dir ausgelagerter Code, wenn Du ihn sowieso nur einmal in einer Datei verwendest?
Jepp mit Include kenne ich mich auch, denn die ganzen Zugangsdaten werden ja auch auf jeder Seite eingebunden und auch ein paar Funktionen.
Hmm aber z.B. ein Eintrag in eine DB oder so da ist da ja schon sinnvoll wenn man das nicht immer wieder neu schreiben muss oder? Und die Datei wird dann auch nicht so groß und der nächste Vorteil was ich drin sehe ist, dass einer nicht gleich immer die ganze Datei braucht sondern nur die Datei wo der Code drin liegt. Verstehst du was ich meine?
Wie müsste ich das denn bei dem Beispiel machen das ich vorhin geschrieben habe also bei dem Gästebuch? Kannst du mir das da mal sagen?
Gruß Maus aus Düsseldorf
Hallo Maus!
Ich will jetzt nicht Deinen Code auseinandernehmen und Dir neu zusammen setzen. Das widerstrebt mir ein wenig. Immerhin sind wir hier bei SELF.... ;o)
Ob es bei Deinem Code sinnvoll ist, mag ich bezweifeln. Dafür ist einfach zu wenig relevanter Code da, der sich lohnen würde auszulagern.
Natürlich können sich einzelne Zugriffe auf die DB auslagern lassen, das bleibt aber jedem selbst überlassen. Das in ein include zu packen und aus der Datei zu verbannen, traue ich Dir aber auch selbst zu.
Schönen Gruß
Afra
Hey du,
ok dann frage ich dich einfach mal, wann ist es wirklich sinnvoll den Code in eine andere Datei zu packen. Kannst du mir da mal ein Beispiel nennen?
Gerade hast du ja nur gesagt bei größeren Sachen oder so!
Gruß Maus aus Düsseldorf
Hallo Maus,
ok dann frage ich dich einfach mal, wann ist es wirklich sinnvoll den Code in eine andere Datei zu packen. Kannst du mir da mal ein Beispiel nennen?
Also ich habe Code hauptsächlich ausgelagert, um die eigentliche Datei übersichtlicher zu halten. Dabei habe ich den ausgelagerten Code meist in Funktionen geschrieben und den ganzen Kram in einer Datei gespeichert. Diese Datei habe ich dann eingebunden und die nötigen Funktionen dort aufgerufen wo ich sie gebraucht habe.
Wie gesagt, das hat es für mich übersichtlicher gemacht, muss aber wahrscheinlich jeder für Sich entscheiden.
Gruß,
small-step
Hmm das ist auch nee Idee wie meinst du das mit den Funktionen. Wie wurdest du das denn dann bei einem Gästebuch machen. Da habe ich ja folgenden Code:
PHP-Code:
<?php
//Konfigurations Datei einbinden
include "../data/config.php";
include "../configs/functions.php";
session_start();
if(isset($_GET["deleteid"]) AND $_SESSION["rights"] == "admin")
{
if(is_numeric($_GET["deleteid"]))
{
$sql = "DELETE FROM gastebuch
WHERE id = ".$_GET['deleteid'];
mysql_query($sql) OR die(mysql_error());
}
}
if(!empty($_POST))
{
$sql = "INSERT INTO gastebuch
(
name,
email,
url,
betreff,
text,
IP,
betriebsystem,
woher_kommt_user,
welche_software,
welcher_server,
datum
)
VALUES
(
'" . addslashes($_POST["name"]) . "',
'" . addslashes($_POST["email"]) . "',
'" . addslashes($_POST["url"]) . "',
'" . addslashes($_POST["betreff"]) . "',
'" . addslashes($_POST["text"]) . "',
'" . $_SERVER["REMOTE_ADDR"]. "',
'" . $_SERVER["HTTP_USER_AGENT"]. "',
'" . $_SERVER['HTTP_REFERER']. "',
'" . $_SERVER['SERVER_SOFTWARE']. "',
'" . $_SERVER['SERVER_NAME']. "',
NOW()
)
";
mysql_query($sql) OR die(mysql_error());
header("Location: http://www.meine_seite.de/gaestebuch.php");
exit;
}
?>
Wie müsste das dann in der Datei aussehen und wie rufe ich das dann bei Action auf?
Gruß Maus aus Düsseldorf
Hallo Maus,
Wie müsste das dann in der Datei aussehen und wie rufe ich das dann bei Action auf?
Na ja, bei einem derart winzigen Projekt lohnt es sich wirklich noch nicht, es sei denn Du hast generische Funktionen die wirklich überall einsetzbar sind. Hast Du aber nicht.
Du könntest zum Beispiel den Inhalt eines if-Blocks in eine Funktion schreiben. Die Funktion bekommt einen aussagekräftigen Namen und wird ausgelagert. Wenn Du jetzt den Code durchsuchst, brauchst Du Dich nicht mit ewig langen Codeblöcken aufhalten die sowieso übersprungen werden und findest relativ schnell was Du suchst.
Gruß,
small-step
Hallo,
Na ja ich sehe schon dass mir das hier niemand sagen will wie ich das machen kann dann muss ich einfach noch ein wenig selber probieren.
Danke für euer Antworten.
Gruß Maus aus Düsseldorf
Hallo Maus,
Na ja ich sehe schon dass mir das hier niemand sagen will wie ich das machen kann dann muss ich einfach noch ein wenig selber probieren.
Wieso? Wir haben Dir Lösungsansätze gegeben, das ist doch nicht nichts. Außerdem bin ich schon ziemlich ins Detail gegangen, Du wirst doch nicht erwarten, dass ich Deinen Code für Dich umstelle?
Davon abgesehen, das hast Du richtig verstanden, bist Du hier immer noch im SELF-Raum. Viel Spaß beim selbst rausfinden.
Gruß,
small-step
Hallo Maus!
Ist das so schwer zu verstehen? Ich sagte ja schon, dass das eine philosophische Diskussion ist. Für den einen mag es das höchste der Gefühle sein jeden Code, der nur irgendwie auszulagern ist, auch in Dateien auszulagern. Für andere sind nur sich wiederholende Elemente sinnvoll. Das ist zum Beispiel meine eigene Meinung. Da ich aber nicht Dein komplettes Projekt kenne, kann und will ich nicht beurteilen was Du da alles auslagern sollst, oder kannst. Da sollte Dir als Aussage und zur Meinungsbildung für Dich selbst reichen. Wenn Du meine Meinung als eine neue aufschnappst, kommt sicherlich bald jemand und versucht Dich von was anderem zu überzeugen. Daher: Bilde Dir selbst eine ;o)
Schönen Gruß
Afra
Hallo,
danke na ja dann bilde ich mir eben meine eigene Meinung. Wie schon gesagt ich sehe der einzige Vorteil darin, dass eben einer auch an der Datei arbeiten kann der nicht das ganze Design einer Seite und so hat. Verstehst du was ich meine?
Na ja ich werde das dann erst mal so lassen und wenn ich mal Bock habe das mal versuchen wie ich das dann machen muss.
Denn gerade bei dem Formular muss ich ja mit Action etwas eintragen und da muss ich ja dann bestimmt zu der Datei verlinken oder so.
Gruß Maus aus Düsseldorf
hi,
mal abseits von der fragestellung ein paar kleine hinweise bzgl. der sicherheit:
VALUES
(
'" . addslashes($_POST["name"]) . "',
'" . addslashes($_POST["email"]) . "',
'" . addslashes($_POST["url"]) . "',
'" . addslashes($_POST["betreff"]) . "',
'" . addslashes($_POST["text"]) . "',
1. bitte nutze nicht addslashes(), um daten vor dem einsetzen in eine mysql-query zu entschärfen - extra für diesen zweck gibt es die funktionen mysql_escape_string() (veraltet) bzw. mysql_real_escape_string().
'" . $_SERVER["HTTP_USER_AGENT"]. "',
'" . $_SERVER['HTTP_REFERER']. "',
2. diese beiden werte kommen ebenfalls vom client, und können damit genauso _beliebige_ werte enthalten, wie dir vorherigen formulardaten auch.
also ist eine absicherung hier genauso angebracht, wie oben.
gruß,
wahsaga