Ein PHP-Script in Zehnerschritten hochrechnen lassen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angeben
anzahl
anzeigen
code
date
datei
datum
fehler
file
form
hacken
hilfe
index
jemand
list
post
schauen
stehen
teil
tun
-
Hi,
ich schreibe gerade als kleine Übung ein News-Script. Natürlich ganz simpel bisher. Eine PHP-Datei bildet das Eingabeformular, gibt das geschriebene an die nächste Datei weiter, die den Kram in einer Text-Datei abspeichert. Die index.html gibt das ganze schließlich aus.
Nun möchte ich aber, dass sich die Startseite auf eine gewisse Anzahl Beiträge (sagen wir mal: 20) beschränkt. Meine Idee war jetzt, dass ich das Script bei jedem Erstellen eines Beitrags eine zahl in einer textdatei um 1 hochspringen lasse.
Weiß jemand, wie es möglich ist, das ein PHP-Script zum Beispiel in Zehnerschritten denkt? Also "wenn 10 erreicht, dann....". Und das natürlich so, dass es auch bei 20, 30, 40, 50, 100, 1560 etc. funktioniert.
MfG fhg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich verstehe nicht wirklich was du willst.
+ Willst du, dass ledeglich 10 Beiträge ausgegeben werden
+ Oder willst du eine Blätter funktion, die dir mehrere News Seiten (die immer 10 Einträge haben) ausgibt?
Gib uns doch mal am besten deinen Link zur HP
Beitrag zuletzt geändert: 28.8.2010 19:30:36 von limabone -
limabone schrieb:
Ich verstehe nicht wirklich was du willst.
+ Willst du, dass ledeglich 10 Beiträge ausgegeben werden
+ Oder willst du eine Blätter funktion, die dir mehrere News Seiten (die immer 10 Einträge haben) ausgibt?
Gib uns doch mal am besten deinen Link zur HP
Hm, ich habe ursprünglich an das erste gedacht, aber das zweite ist noch besser.
Ich habe das Script noch nicht hochgeladen. Solange es nicht fertig ist, spiele ich erstmal damit ein bsschen herum. Nicht, dass es irgendwelche Fehlfunktionen oder so verursacht.
MfG fhg
Beitrag zuletzt geändert: 28.8.2010 19:56:23 von fhg -
mator-kaleen schrieb:
Dann würde ich es hochladen, damit es auch andere Leute testen können.
Ich habe schon oft genug gesehen, dass solche Test-Scripts kurz nach dem Upload von einem Forumsbesucher per XSS-Injection oder Ähnlichem gehackt wurden. Solange ich da noch nichts dagegen eingebaut habe, möchte ich es nicht hochladen. Gibt es denn keine pauschale Idee, die ich hineinbauen könnte? Ein bisschen mitdenken kann ich ja selber noch, ich brauche keine schlüsselfertige Hilfe, nur eine gute Idee
MfG fhg -
fhg schrieb:
mator-kaleen schrieb:
Dann würde ich es hochladen, damit es auch andere Leute testen können.
Ich habe schon oft genug gesehen, dass solche Test-Scripts kurz nach dem Upload von einem Forumsbesucher per XSS-Injection oder Ähnlichem gehackt wurden. Solange ich da noch nichts dagegen eingebaut habe, möchte ich es nicht hochladen. Gibt es denn keine pauschale Idee, die ich hineinbauen könnte? Ein bisschen mitdenken kann ich ja selber noch, ich brauche keine schlüsselfertige Hilfe, nur eine gute Idee
MfG fhg
Nur ne kurze Frage.
Wenn deine Seite nicht gerade Facebook oder Netlog sein sollte, warum sollte jemand eine Seite hacken, die wahrscheinlich fhg.lima-city.de ist, welche auch niemand außerhalb lima-city kennt, hacken wollen? Das lohnt den Aufwand doch gar nicht. Also ich wurde noch nie gehackt und habe seit 2 Jahren Top-Level-Domains, die sogar in Google stehen. (Was steht nicht in Google? ) Ich kann dir sagen, solange du deine Files auf Lima-City hast sind sie in sicheren Händen.
Wenn du allerdings nen Home-Server hast und auf dem Windows rennt, kannst du dir gleich ne Kugel in den Kopf jagen. Gib Linux rauf und lad dann deine Daten in /var/www/ und du wirst nie im Leben mehr ein Antivirus Programm brauchen. -
@limabone: Falsch! Nur, weil deine Seite nicht groß ist, heißt es noch lange nicht, dass sie nicht "gehackt" wird. "Hacken" kann auch automatisiert erfolgen. Ein Crawler sucht Seiten (egal wie bekannt) nach bestimmten Kriterien und schleust Code ein.
Zudem gibt es auch hier auf Lima gewisse User (wie olearose oder wie mich), die auch gerne mal ein Userscript verunstalten, nur um zu demonstrieren, dass es unsicher ist. -
yo mey!
ich glaube, du brauchst einen script, der deine news von-x - bis-y ausgibt. hier hast ein beispiel von mir (gpl ;o). darin kommen die daten zwar aus einer matrix aber das ist nebensache. es ist leicht an deine bedürfnisse anzupassen. wenn du hilfe dazu brauchst, einfach fragen.
lg
joseph -
limabone schrieb:
Nur ne kurze Frage.
Wenn deine Seite nicht gerade Facebook oder Netlog sein sollte, warum sollte jemand eine Seite hacken, die wahrscheinlich fhg.lima-city.de ist, welche auch niemand außerhalb lima-city kennt, hacken wollen? Das lohnt den Aufwand doch gar nicht. Also ich wurde noch nie gehackt und habe seit 2 Jahren Top-Level-Domains, die sogar in Google stehen. (Was steht nicht in Google? ) Ich kann dir sagen, solange du deine Files auf Lima-City hast sind sie in sicheren Händen.
Wenn du allerdings nen Home-Server hast und auf dem Windows rennt, kannst du dir gleich ne Kugel in den Kopf jagen. Gib Linux rauf und lad dann deine Daten in /var/www/ und du wirst nie im Leben mehr ein Antivirus Programm brauchen.
Es geht nicht darum, dass jemand Daten klaut. aber ein simpler XSS-Hack, der die Seite auf eine andere Site weiterleitet, geht schnell. Bei einem kleinen Gästebuch ist hier auf Lima schon sowas passiert. Da war die Domain auch nicht per Google erreichbar (bzw. wurde nie ein einem Post gepostet, nirgendwo direkt verlinkt und nicht bei Google angemeldet).
@czibere: Cool, Danke! Daran werde ich jetzt erst einmal herumspielen und schauen, ob ich es einbauen kann.
Ist dann aber nicht so, dass die anderen Beiträge einfach in den Speicherfiles verschwinden? Theoretisch könnte ich natürlich zig HTML-Dateien erzeugen, die nach deinem Prinzip eine bestimmte Nummer an Beiträgen anzeigen, allerdings wachsen dann die HTML-Dateien nicht mit....WEnn das klappt, muss ich als nächstes ein Archiv versuchen.
MfG fhg -
@fhg
... und schauen, ob ich es einbauen kann.
man kann eventuell helfen wenn du zeigst wo es rein gehört.
Ist dann aber nicht so, dass die anderen Beiträge einfach in den Speicherfiles verschwinden?
... ????
Theoretisch könnte ich natürlich zig HTML-Dateien erzeugen, die nach deinem Prinzip eine bestimmte Nummer an Beiträgen anzeigen, ...
ganz schlecht. nicht der sinn der sache. du sollst in eine einzige php-datei zig files (oder datenbankeinträge) einlesen. aber wie gesagt! es gibt verschiedene lösungen, daher wäre es günstig deinen code hier zu posten, dann kan man meinen code dazu optimieren/umarbeiten.
allerdings wachsen dann die HTML-Dateien nicht mit....
... ????
Beitrag zuletzt geändert: 29.8.2010 9:15:43 von czibere -
czibere schrieb:
@fhg... und schauen, ob ich es einbauen kann.
man kann eventuell helfen wenn du zeigst wo es rein gehört.
Ist dann aber nicht so, dass die anderen Beiträge einfach in den Speicherfiles verschwinden?
... ????
Theoretisch könnte ich natürlich zig HTML-Dateien erzeugen, die nach deinem Prinzip eine bestimmte Nummer an Beiträgen anzeigen, ...
ganz schlecht. nicht der sinn der sache. du sollst in eine einzige php-datei zig files (oder datenbankeinträge) einlesen. aber wie gesagt! es gibt verschiedene lösungen, daher wäre es günstig deinen code hier zu posten, dann kan man meinen code dazu optimieren/umarbeiten.
allerdings wachsen dann die HTML-Dateien nicht mit....
... ????
Ich glaube, jetzt habe ich es verstanden....es soll eine index.php geben, in der immer die aktuellen Dokumente angezeigt werden. Ein Link wie "ältere" oder so soll dann die nächsten Texte hineinladen, oder?
Naja, hier dann mal der Code:
Es gibt zwei Dateien. Die entry.php bietet das Eingabeformular für die News:
<form method="post" action="publisher.php"> Autor: <input type="text" name="author"><br> Post: <textarea name="Post"></textarea><br> Tags: <input type="text" name="tags"><br> Datum: <input type="text" name="date"><br> <input type="submit" name="submit" value="Beitrag veröffentlichen"> </form>
Und die zweite Datei, die publisher.php sorgt dafür, dass die ganzen Beiträge in sinnvoller Form in der Textdatei landen:
<?php $daten=$_POST[Post]."<br>veröffentlicht von $_POST[author]. .$_POST[date]. <br> Tags: $_POST[tags]"; $list = "entry.txt"; $datei = fopen($list,"a", "w"); fwrite($datei, $daten); ?> Beitrag veröffentlicht. <a href="entry.php">Einen weiteren Beitrag veröffentlichen.</a> ?>
Ist bisher echt nicht viel, aber das ganze sollte DB-los und schlank bleiben.
MfG fhg
-
Daten eingeben (entry.php):
<?php $datum_editierbar=true; /* Standardwert: true. false angeben, um das Datumsfeld auszublenden. Aktuelles Datum wird dann automatisch erzeugt und gespeichert. */ ?> <form method="post" action="publisher.php" style="display:inline;"> <table border="1px" cellspacing="0px" cellpadding="0px" width="250px"> <tr> <td> Autor: </td> <td><input type="text" name="author" style="border:0px;width:100%;" /></td> </tr> <tr> <td> Post: </td> <td><textarea name="Post" style="border:0px;width:100%;height:70px;"></textarea></td> </tr> <tr> <td> Tags: </td> <td><input type="text" name="tags" style="border:0px;width:100%;" /></td> </tr> <?php if($datum_editierbar) { ?> <tr> <td> Datum: </td> <td><input type="text" name="date" style="border:0px;width:100%;" value="<?php echo date('d').'.'.date('m').'.'.date('Y'); ?>" /></td> </tr> <?php } ?> <tr> <td style="visibility:hidden;"></td> <td><input type="submit" name="submit" style="width:100%;height:23px;" value="Beitrag veröffentlichen" /></td> </tr> </table> </form>
Speichern (publisher.php):
<?php if(!is_dir("beitraege")) { mkdir("beitraege"); } if(!$_POST["date"]) { $post_date=date('d').'.'.date('m').'.'.date('Y'); } else { $post_date=$_POST["date"]; } $daten=$_POST["Post"]."<br />veröffentlicht von ".$_POST["author"].". (".$post_date.")<br />Tags: ".$_POST["tags"]; $i=1; while(file_exists("beitraege/beitrag_".$i.".txt")) { $i++; } $i--; while($i>=1) { rename("beitraege/beitrag_".$i.".txt","beitraege/beitrag_".($i+1).".txt") $i--; } $i++; $list = "beitraege/beitrag_".$i.".txt"; $datei = fopen($list, "w"); if($datei) { fputs($datei,"<"."?php $"."f_post=\"".$_POST["Post"]."\"; $"."f_author=\"".$_POST["author"]."\"; $"."f_date=\"".$post_date."\"; $"."f_tags=\"".$_POST["tags"]."\"; ?".">"); fclose($datei); } ?> Beitrag veröffentlicht. <a href="entry.php">Einen weiteren Beitrag veröffentlichen.</a>
Ausgabe (index.php, da man die Daten mit einer HTML-Datei nicht auslesen kann):
<?php if(!is_dir("beitraege")) { mkdir("beitraege"); } $i=1; $anzahl_angezeigter_beitraege=10; // 0 eingeben, um alle anzuzeigen. // Variable mit GET: gib mal "index.php?anzahl=5" ein, es werden 5 Beiträge angezeigt. if($_GET['anzahl']) { $anzahl_angezeigter_beitraege=$_GET['anzahl']; } echo "<table border=\"0px\" cellspacing=\"0px\" cellpadding=\"0px\"><tr><td>"; while(file_exists("beitraege/beitrag_".$i.".txt") && ($i <= $anzahl_angezeigter_beitraege || $anzahl_angezeigter_beitraege==0)) { include("beitraege/beitrag_".$i.".txt"); echo " <table border=\"1px\" cellspacing=\"0px\" cellpadding=\"5px\" width=\"100%\"> <tr> <td rowspan=\"3\">".$f_post."</td> <td>Veröffentlicht von ".$f_author."</td> </tr> <tr> <td>Datum: ".$f_date."</td> </tr> <tr> <td>Tags: ".$f_tags."</td> </tr> </table> "; $i++; } echo "<br /><a href=\"?anzahl=0\">Alle Beiträge anzeigen</a></td></tr></table>"; ?>
Hatte gerad nix zu tun. Wünsche viel Spaß damit. ^.^
// EDIT: nochmal perfektioniert. ^.^
// EDIT: habs nich ausprobiert ^.^ also teste es vorher ausgiebig und meld mir fehler =P
Beitrag zuletzt geändert: 29.8.2010 18:14:12 von easynetpage -
easynetpage schrieb:
Da schrieb jemand tolle Sachen, aber zum zitieren ist es zu lang!
Danke. Ich probier das mal aus. Aber ein bisschen was verändern werde ich schon, es war ja nicht das Ziel, alles von anderen abzuschreiben. Wenn's klappt, editiere ich es hier rein.
MfG fhg -
kein ding ^^ is mein hobby =P
-
easynetpage schrieb:
kein ding ^^ is mein hobby =P
ok.^^
THX nochmal.
In der entry.php ist in folgenden Bereich ein T-String-Fehler:
<td><input type="text" name="date" style="border:0px;width:100%;" value="<?php echo date('d').'.'.date('m').'.'.date('Y'); ?>" /></td>
Daran habe ich grade zu knabbern. Meine Manipulationen sorgten bisher dafür, dass in der letzten Zeile ein <?End Fehler (oder so ähnlich ) entstand.
Ansonsten habe ich noch die Tabellen entfernt. Es geht ja auch ohne, und später kann ich dann leichter ein CSS-basiertes Design einfügen. Auch habe ich das Script so verändert, dass es schön die bisherige entry.txt nutzt, und nicht einen Unterordner "beitraege" erstellt. Da es bisher nur aus ein paar Dateien besteht, wären mehrere Ordner nur unübersichtlich.
MfG fhg
Beitrag zuletzt geändert: 29.8.2010 19:48:33 von fhg -
Komisch...habs jetzt mit allen varianten probiert und: verdammt, ich bekomm keinen fehler xD is wohl selten dass man sich den fehler wünscht ^^ (um ihn zu berichtigen)
Wäre es möglich, dass du den ganzen Code noch einmal postest, damit ich den Fehler finden kann?
Hatte bei deinem ursprünglichen Code übrigens auch einige Fehler gefunden und verbessert...vielleicht find ich jetzt ja auch nochmal was ^^ -
easynetpage schrieb:
Komisch...habs jetzt mit allen varianten probiert und: verdammt, ich bekomm keinen fehler xD is wohl selten dass man sich den fehler wünscht ^^ (um ihn zu berichtigen)
Wäre es möglich, dass du den ganzen Code noch einmal postest, damit ich den Fehler finden kann?
Hatte bei deinem ursprünglichen Code übrigens auch einige Fehler gefunden und verbessert...vielleicht find ich jetzt ja auch nochmal was ^^
OK, hier ist der Code:
<form method="post" action="publisher.php"> Autor: <input type="text" name="author"><br> Post: <textarea name="Post"></textarea><br> Tags: <input type="text" name="tags"><br> Datum: <input type="text" name="date" value="<?php echo date('d').'.'.date('m').'.'.date('Y') ?>;><br> <input type="submit" name="submit" value="Beitrag veröffentlichen"> <?php if($datum_editierbar) { ?> <?php $datum_editierbar=true; /* Standardwert: true. false angeben, um das Datumsfeld auszublenden. Aktuelles Datum wird dann automatisch erzeugt und gespeichert. */ ?>} </form>
Ich glaube, der Fehler steckt da:
Aber egal, wie ich daran herumgespielt habe, der Fehler ging nicht weg.?>;><br>
MfG fhg
-
@]fhg
... egal, wie ich daran herumgespielt habe, der Fehler ging nicht weg.
yo mey! kein wunder. ich schlage euch allen vor, so einfach wie's nur geht zu programmieren! und das geht unheimlich einfach!
kurzanleitung für dateiaufbau:
so sollte es sein und nicht anders und wer sagt das geht sich bei ihm 'logisch' nicht aus, der sollte dringend - noch vor weiteren php-studien - an seiner logik arbeiten (auch dafür gibt es tuts ;o)<?php # ---- initialisierung: // hier kommt alles rein, was neu angegeben, nachjustiert o. wie auch immer // manipuliert werden muss // (z.b. besorgung von benötigten daten via include u.co.) // ... # ---- 'der job' der seite: // das ist die tob-kemenate deiner phpfähigkeiten! hir darfst alles mit php // tun was du nur kannst // nur eines nicht; irgend etwas ausgeben!!!! ALSO NIX RENDERN!!!! // ... # ---- rendering des ergebnisses: // hier steht bei mir normaler weise schlicht und ergreifen nur das (und // das gibt dann eine ganze seite auf einmal aus): echo ($site); # ---- hir können nur mehr helfer stehen, die nur mit dieser einziger // seite/datei setwas zu tun haben! // z.b. seiten-/dateispezifische funktionen (ich sehe diese stelle // trotzdem als deplatziert an) // ... ?>
in diesem sinne der vorige 'form'-snippet sieht dann so aus (und funzt auch natürlich):
<?php # ---- initialisierung: $e_date = true; # das ist der händischer switch für '<input ...="date">' $i_date = ( $e_date ) ? "\n Datum: <input type=\"text\" name=\"date\" value=\"".date ("m.Y")."\"><br>": ""; $site = html ("eingabeform"); # ---- 'der job' der seite: $form = <<< EOT <form method="post" action="publisher.php"> Autor: <input type="text" name="author"><br> Post: <textarea name="Post"></textarea><br> Tags: <input type="text" name="tags"><br>$i_date <input type="submit" name="submit" value="Beitrag veröffentlichen"> </form> EOT; $site .= $form . _html (); # ganze seite assemblieren # ---- END job # ---- rendering des ergebnisses: echo ($site); # ---- helfer: function html ($t) { return <<< EOT <html> <head> <title>$t</title> </head> <body> <div id="wrapper"> EOT; } function _html () { return <<< EOT </div><!-- END 'wrapper' --> </body> </html> EOT; } ?>
zu beachten:
1. in diesem code ist alles innerhalb des php-teiles drinnen (also kein wildes wechseln zwischen html und php).
2. es ist nur ganz selten nötig in html-teil zu escapen (erhöht die übersichtigkeit des codes).
3. ganze htm-blöcke, die in wariablen enthalten sind, werden in andere wariable eingefügt, die ihrerseit noch größere - umfließende - html codes enthalten. und so weiter und so fort, bis die ganze seite in die wariable $site entsteht.
4. .... (alles, was du noch entdecken oder reindenken kannst)
...
n. man beachte die einrückung des html-codes (auch im quelltext des browsers! ich find' hierarchei geil ;o)
schlussbemerkung:
in eurem form funktioniert das ein/ausschalten nicht und das das aus gutem grund! es ist misgebildet und deplatziert, weil euer code undurchsichtig ist. in diesem beispiel habe ich das problem in die variable $i_date (input_date) gepackt. die lösung gehört in den initialisierungsteil! wo sie auch ist.
Beitrag zuletzt geändert: 1.9.2010 4:31:48 von czibere -
Von dem Code von czibere verstehe ich nur noch null...falls es fhg genauso geht, berichtige ich einfach mal den von ihm geposteten code. Dann kann er auch eigenständig weiter daran arbeiten.
<form method="post" action="publisher.php">
Autor: <input type="text" name="author" /><br>
Post: <textarea name="Post"></textarea><br>
Tags: <input type="text" name="tags" /><br>
Datum: <?php
$datum_editierbar=true; /* Standardwert: true. false angeben, um das Datumsfeld auszublenden. Aktuelles Datum wird dann automatisch erzeugt und gespeichert. */
if($datum_editierbar) {
?><input type="text" name="date" value="<?php echo date('d').'.'.date('m').'.'.date('Y') ?>" /><?php } ?><br />
<input type="submit" name="submit" value="Beitrag veröffentlichen" />
</form>
Beitrag zuletzt geändert: 31.8.2010 18:21:24 von easynetpage -
@easynetpage
Von dem Code von czibere verstehe ich nur noch null...
lernen hilft gegen 'unverstand'.
==== edit ====
ganz nebenbei die neue version funktioniert auch nicht einwandfrei. schade. das 'Datum: ' bleibt stehen. hinzu kommt die aberwitzige art das datum zu generieren: '<?php echo date('d').'.'.date('m').'.'.date('Y') ?>'
kurz und gut ist das: '<php echo date ("d.m.Y"); ?>'. den ganzen restlichen schmus kannst vergessen. gilt für alle vergleichbare aberwitzige konstrukte. (danke für die aufmerksamkeit)
Beitrag zuletzt geändert: 31.8.2010 19:26:31 von czibere -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage