Flashhilfe.de - Flash Community

neu erzeugte PHP Datei mit Inhalt füllen

 


AntwortenRegistrieren Seite1  

ScreenEyes#1
Benutzerbild von ScreenEyes
Beiträge: 76
Wohnort: Basel
Registriert: Jun 2009

27.09.2010, 21:39

Hallo Leute, 

Also mein Ziel:
Eine Seite auf der man durch einen TextInput weitere Seiten erstellen kann.
Das design/template soll natürlich immer gleich aussehen.

Mein Problem:
Der Ordner wird erstellt auch die PHP Datei allerdings wird Sie nicht mit dem Inhalt gefüllt.
Es bringt auch keine Fehlermeldung..

Mein Zweifel:
Soll ich immer ne neue Datei erstellen und dort das Layout einfügen? Oder
sollte man irgendwie Beim Layout den Content/Inhalt einfügen?

Mein Code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$newSectionName 
$_POST['newSectionName'];
$newFileName $_POST['newSectionName'].".php";
$newFileLink "<a href=\"../sections/".$newSectionName."/".$newFileName."\">here </a>";

$newSectionDir mkdir("../sections/".$newSectionName0700);
$createSite fopen("../sections/".$newSectionName."/".$newFileName"w+");

if(
$newSectionDir==true) {
    if(
$createSite==false) {
        die(
"unable to create file");
        echo(
"New Dir generated!");
    }
    else{
        echo(
"New Dir <b>".$newSectionName."</b> generated! <br/> New File <b>".$newFileName."</b> generated!
              <br/><br/> Watch new file "
.$newFileLink);
    }
}
else {
    die(
"unable to create dir");
}
$includes "<?php include('../template/header.php') ?>";
fwrite($createSite,$includes) or die("Error: cant write content in to file".$newFileName."!");
?>


Danke und Grüsse!!
Werbung
Beiträge: 0
Registriert: Feb 2016


vindel#2
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

27.09.2010, 23:33

Hallo,

du willst dir also ein kleines CMS erstellen?!
Ich würde dir NIE emfehlen eine php-Datei per php zu erzeugen! Wenn du Daten oder sont was hast und diese speichern willst, machst du das am besten in einer txt-Datei oder .csv-Datei.
Am besten ist es natürlich alles in eine Datenbank zu schreiben.
Den Inhalt vom deinem Textfeld speicherst du dir also am besten in eine DB mit einer id - und dann kannst du beim Aufrufen der Seite (zB index.php?loadid=5) den Text mit der ID 5 laden.
Du kannst natürlcih genau so gut dann die "Textdatei Nr 5" laden, wenn du keine DB nutzen willst.
Dann ist es kein problem den Inhalt "inder Mitte" zwischen header und footer auszugeben und du hast kinderleicht ein funktionierendes CMS.
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
ScreenEyes#3
Benutzerbild von ScreenEyes
Beiträge: 76
Wohnort: Basel
Registriert: Jun 2009

Themenautor/in

28.09.2010, 01:45

Danke erst mal für die super Antwort, deshalb liebe ich dieses Forum. Fragte zuerst in einem php Forum, aber mit den Antworten von denen konnte ich nichts anfangen.

Kannst du mir auch sagen warum man keine Dateien per PHP erzeugen sollte? wäre doch gut zum wissen :P

Naja, CMS ist zuviel des guten ;) eigentlich will ich eine Tutorial Seite machen. Wo man falls noch eine Sprache fehlt die hinzufügen kann. (newSection, Neuer Bereich). Das soll dann in die Navi mit aufgenommen werden und auch eine erste Seite erstellen "Einführung". Dort soll man dann per editInPlace ein Tutorial anfangen zu schreiben können. Danach kann man weitere Beiträge/Seiten zum Thema erstellen können...

Ohne Logins usw.. gegen Spammer usw... Will ich das bei jeder änderung ich das bestätigen muss.
Der Grund warum ich das will.. einfach zum PHP, mySQL, Ajax, Javascript lernen.

Also ich versuch es mal mit deinem Tipp und nützliche intressante scripts dazu werde ich wohl hier finden
Geändert von ScreenEyes am 28.09.10 um 01:46 Uhr
vindel#4
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

28.09.2010, 12:10

Soetwas freut uns immer zu hören ;)

Also der grund, warum es nicht sinnvoll ist eine php-Datei mit Inhalt dynamisch zu erzeugen ist folgender:
Der Inhalt wird ja meistens über ein Formular (per POST oder GET) gesendet. Jetzt kann ich entweder direkt in das Textfeld php Code-eingeben oder über den POST/Get vom browser meinen Code einfügen. Du lässt den ohne schlechtes gewissen in einer php-Datei speichern. Jetzt öffne ich die Datei wieder über meinen Browser und mein eingegebener Code wird ausgeführt. Wenn ich jetzt böse Absichten hätte, dann könnte ich so bsp spams verschicken oder all deine Datei löschen.
Also es ist nur zur Prävention, da man ja nichts provozieren muss.

So wie du es beschrieben hast, würde ich mit einer DB arbeiten. Dann fragst du im Formular nach Thema und dem Tutorium, welches du speicherst. Jetzt hat dein Tema eine eindeutige ID (einfach ein id-Feld in der DB erstellen, was sich automatisch erhöht) - zu der kannst du dann die Unterthemen erstellen, indem du auf die ID verweist.
Jedes Thema hat somit seine eigene ID und wenn es ein Unterthema ist, hat du den Verwies zum "mutter"-Thema.
Jetzt kannst du in einer 2. DB-Tabelle die Artikel speichern - immer im der ID vom thema, sodass du diese leicht wieder findest.

So könte deine haupttabelle aussehen
/////////////////////////////////
// id // Thema        // child //
////////////////////////////////
// 1 // PHP              //       //
// 2 // JavaScript    //        //
// 3 // jQuery         //  2    //   
////////////////////////////////

Und die Tabelle für die Artikel (jeweils mit der ID vom Thema)
////////////////////////////////
// aid // text                    //
///////////////////////////////
// 1   //echo "Hello World"//
// 2  // alert("hallo");       //
// 3  // jQuery folgt..       //
///////////////////////////////
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Werbung
Beiträge: 0
Registriert: Feb 2016


ScreenEyes#5
Benutzerbild von ScreenEyes
Beiträge: 76
Wohnort: Basel
Registriert: Jun 2009

Themenautor/in

29.09.2010, 02:24

Danke!! Sone umfangreiche erklärende und weiterführende Antwort bekommt man selten! ;)
Und die auch Danke für wie ich das mit der DB löse! Wird mir bestimmt noch helfen.

Allerdings woraus ich nicht schlau wurde ist wie man das mit (zB index.php?loadid=5) löst. Soll ich die auslesen wie viele ID's in der DB sind und per PHP die seiten dazu erstellen.
Oder kann man mit einer Funktion vom URL die ID auslesen und dieser Content wird dann geladen.
hier kann ich auch nicht verstehen wo man es festgelegt hat, das man so: index.php?include=testseite.php eine datei laden kann.

Also morgen guck ich mal ob ich in einer Buchhandlung ein gutes PHP buch finde. *freu*

Ein Link oder ne kurze Erklärung würde ausreichen, du hast schon mir schon viel beigebracht und ich möchte nicht solange nachfragen bis du keine nerven mehr hast ;)

Das doofe beim Lernen finde ich ist entweder lernt man wie man Basics über Strings und wie man eine Function macht. Danach sucht man weitere Tutorials aber die sind dann zu schwer oder nicht gut erklärt. Also diesen Übergang, weiss nicht wie man das sagen soll.. Ach ja habe gerade gesehen du bist erst 22 und bestimmt ein Profi, ich bin bald 20 und habe das Gefühl ich komm nicht vom Fleck. Seit ihr 12h am Tag am lernen oder was..

PS: Wer sucht, kann manchmal trotzdem nicht finden...

Also gute Nacht muss jetzt ganz wichtig schnell schlafen gehen!
Geändert von ScreenEyes am 29.09.10 um 02:35 Uhr
badskill#6
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

29.09.2010, 08:57

Noch ein kleiner Hinweis zu dem Thema.
Schau dich mal um nach den Begriffen:
FrontController sowie nach TemplateView.
Beides Pattern für PHP für genau solche Aufgaben.
Geändert von badskill am 29.09.10 um 08:58 Uhr
vindel#7
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

29.09.2010, 10:16

Also mit der beschriebenen Möglichkeit kannst du über die URL Informationen transportieren, die su später wieder auslesen kannst.

du hast den Link zu deiner Datei deinCMS/index.php?do=machwas in der index.php kannst du jetzt mit $_GET['do'] dir die Information zurück holen. In diesem Fall hätte $_GET['do'] den Wert "machwas".
In meinem beispiel ist es dafür da, um die Information der gewählten Kategorie (oder des Bereichtes) zu transportieren. Mit index.php?loadid=2 würde er dann zB im vorherigen Post auf Javascript verweisen, da es die ID 2 hat.

Es gibt 2 Möglichketien Programmiersprachen zu lernen: die eine, man setzt sich hin fängt bei logischen abläufen an und geht dann zu den funktionen, methoden und objekten - alles aus Onlinekursen oder Büchern etc.
Die andere ist, man bringt sich alles selber bei - es gibt ein Problem und man muss es iwie lösen - dadurch lernt man natürlich auch sehr schnell.
Ich habe den 2. Weg genommen, studiere aber grade und darf so den ersten weg beschreiten, welcher sicherlich der saubere und bessere (vom programmieren her) ist.
Als Buch kann ich dir php für Dummies empfehlen. Aber das A und O ist einfach das logische Denken - ohne das kommst du nicht weit, da es dann nicht möglich ist zu verstehen wie das ganze funktioniert..
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
ScreenEyes#8
Benutzerbild von ScreenEyes
Beiträge: 76
Wohnort: Basel
Registriert: Jun 2009

Themenautor/in

29.09.2010, 22:31

So nach dieser Frage werde ich das mal als gelöst markieren.

Also durch ein Textfeld, Text-Input oder sowas soll man ja text in die Datenbank einfügen. Könnte man da dann nicht auch ein "bösartiger PHP Code" in die DB  einfügen, der wenn man ihn rein oder auch raus ladet ausgeführt wird. Sollte das der Fall sein sollte könnte man ja ein Filter machen der die <?php ?> Zeilen rauslöscht und zusätzlich gleich noch andere Wörter rausfiltern.

Mal zurückspulen zum warum keine PHP-Datei per PHP erstellen. Mann könnte den "bösartigen Code" ja in den Text-Input eingeben, wie du sagtest. Aber würde man das machen würde danach ja nur die Datei so heissen. Was nicht wirklich schlimm wäre. Und man könnte noch Z.b. max 15 Buchstaben erlauben.

Ein PHP Buch hatten sie nicht da, aber ich habe auf dein Buchtipp gehört und es bestellt.

@badskill Danke werd mich mal darüber schlau machen.

Grüsse
vindel#9
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

30.09.2010, 09:59

Hey,

also durch ein Textfeld könnte das natürlich passieren, aber dafür gibts mehrer php-methoden die das verhindern. Zum einen stripslashes(), die überalle ein "\" hinzufügt und so alles zu einem reintext macht. Mit strip_tags(); kannst du ALLE tags entfernen, sodass nur noch text übrig bleibt - aber Zeilenumbrüche und so müssen dann auch umgeschrieben werden.

Ja du hast eine Datei die "bösarig" ist - egal wie sie heißt. Aber sobald diese aufgerufen wird, kann man viel blödsinn damit machen - zb rekursiv alle Ordner vom Server löschen oder, oder, oder...
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
ScreenEyes#10
Benutzerbild von ScreenEyes
Beiträge: 76
Wohnort: Basel
Registriert: Jun 2009

Themenautor/in

02.10.2010, 23:09

Also dank euer hilfe könnt ihr hier meine fortschrite angucken :P

Danke & Grüsse
Geändert von ScreenEyes am 03.10.10 um 22:32 Uhr
ScreenEyes#11
Benutzerbild von ScreenEyes
Beiträge: 76
Wohnort: Basel
Registriert: Jun 2009

Themenautor/in

04.10.2010, 00:53

Hallo, also war mir nicht so sicher ob das in ein neues Thema oder noch hier kommen sollte. Denn es geht noch ums gleiche Projekt.

Also ich ja eine html form, dort soll man ein neuer "Beitrag/Thema" eintragen der dann in der DB hinzugefügt wird.
Das erste was ich mich fragte war, wie ich das machen kann ohne auf ne neue Seite zu kommen. Bis ich herausfand dank google, dass ich ja auf die gleiche Seite verweisen kann.

Aber jetzt ist kommt immer wenn ich im Browser refresh klicke, ob man die Daten ereunt übermitteln möchte. Was ziemlich stört vorallem wenn man gar nichts "wirklich" übermittelt hat. Kann man das besser lösen? Ja denke schon ;) aber wie?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        <form action="gleicheseite.php" method="post"> 
            Geben Sie hier den Namen vom neuen Bereich ein der z.b. HTML / CSS / Javascript lauten sollte:<input type="text" name="newSectionName" />
            <input type="submit" / value="Erstellen">
        </form>
<?php
include("../tutorials/system/classes/php/mysql_con.php");

$newSectionName $_POST['newSectionName'];
$newChilds "0";

if(!empty(
$newSectionName)){
   
$sql="INSERT INTO tut_sections (section, childs)
    VALUES('$newSectionName', '$newChilds')"
;

    if (!
mysql_query($sql,$con)) {
        die(
'Error: '.mysql_error());
    } else {
        echo 
" 1 record added";
    }
}
include(
"sys.php");
?>

In der Datei sys.php hab ich vindel's tipps versucht umzusetzen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Erstellt das Menu
$bla mysql_query('SELECT sectionID,section FROM tut_sections');
while(
$row mysql_fetch_array($bla)) {
    echo (
"<a href=\"?loadID=".$row['sectionID']."\">".$row['section']."</a><br/>");
}

//Ladet den aktuellen bereich
$currentID $_GET['loadID'];
$result mysql_query("SELECT * FROM tut_sections WHERE sectionID=$currentID");
   
while(
$row mysql_fetch_array($result)){
   
$curSection $row['section'];
    echo (
"<br/><br/> The Current Section is: ".$curSection);
}

?>
Geändert von ScreenEyes am 04.10.10 um 01:04 Uhr
vindel#12
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

04.10.2010, 18:56

Also dein problem liegt daran, dass du per Post über das Formular Daten sendest - und bei einem Reload fragt der Browser natürlich immer nach, ob die Daten nochmal gesendet werden sollen.

Du hast 2 Möglichkeiten - zum einen per AJAX (Javascript), welches die Informationen an PHP sendet und dann ne Antwort bekommt, was aber nicht immer sinnvoll ist, da du die Seite ja eh neu laden müsstest um den neuen Inhalt auch anzuzeigen.
Also würd ich dir einfach vorschlagen, dass du ganz oben in deiner PHP-Datei den neuen Eintrag erstellst (Falls das Formular vollständig ist) und dann die PHP-Seite neulädst - ohne die Postinformationen.
PHP:
1
2
header("Location:index.php");
(Oder wie auch immer deine Datei heißt). Du solltest dann vll noch ein "?action=new" oder so anfügen, was du anschließend ausliest und so dem User auch eine Statusmeldung anzeigen zu können, was so aussehen könnte:
PHP:
1
2
if($_GET['action'] == "new") echo "Beitrag gespeichert";
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de