hallo ich versuche mich gerade ein wenig in php zurechtzufinden und ein wenig zu programmieren. Ich versuche gerade für eine Homepage aus einer Datenbank Zeit,Text und einen Link auszulesen. Im Prinzip funktioniert auch fast alles. Ich habe inzwischen das ursprüngliche Problem behoben bin aber auf ein neues gestoßen. Ich habe zwei Versionen eines Codes, bei denen ich eigentlich keinen Untershied feststellen kann zumindest sehe ich keinen:
bei folgendem tritt der Fehler auf: Parse error: syntax error, unexpected '/' in /mnt/web2/21/37/5686137/htdocs/phpjudo/rechts1.php on line 133
Zeile 133 ist: echo '
';
}
echo '';
}
?>[/CODE]
ich habe keinerlei Ahnung warum.
P.S. ich verwende gerade http://www.selfphp.info/ gibt es noch ähnliche Seiten die gute Anleitungen haben? (Habe mein PHP Buch zuhause vergessen, d.h. komme erst in einer Woche an eine gute Anleitung)
Hallo, ich probiere gerade auch ein bisschen mit php rum und habe jetzt einen Generator geschrieben, der den Text für eine htaccess Datei erzeugt (und er funktioniert sogar :shock: :D ) :
[php]
";
echo "
";
}
else {
echo "";
}
}
else {
echo "";
}
?>
[/php]
Jetzt würde ich gerne noch ein optionales Feld "Gruppen" einfügen, In dem man noch eine Gruppendatei anlegen kann. D.h. wenn man dort dann etwas eingibt sollte in der ausgabe dann nicht mehr [Code] AuthGroupFile /dev/null [/Code]
sondern [Code] AuthGroupFile *eingegebener Pfad* [/Code] stehen. Außerdem soll dann noch ein extra Ausgabefeld erscheinen, in dem der inhalt der .htgroups dann steht. Wenn nichts eingegeben wurde soll bei AuthGroupFile aber das erscheinen, was jetzt da steht. Und das Feld für die htgroups sollte auch nicht sichtbar sein. Wie müsste da die if- Abfrage aussehen? Ich hoffe, der Anhang verdeutlicht das ganze etwas.
edit: hat sich erledigt. Ich hab es jetzt selbst geschafft. (Habe den Code oben aktualisiert. Könnte sich den mal jemand durchsehen?)
23.06.09, 23:11:36
BugHunter2k
Hallo Asmodis,
ich hab deinen Code jetzt nur Überflogen und möchte dir gern ein paar Hinweise geben, die das ganze etwas Lesbarer und/oder Sicherer machen. (Auch wenn die Formulierungen etwas hart klingen, denke immer daran es sind nur gute Ratschläge die ich versuche zu begründen.)
Zur Funktion (es tut ja nach deinen Aussagen, was es soll) halte ich mich mal zurück.
-------------------------------------------------------
Grundsätzlich ist es angebracht HTML und PHP Code komplett zu Trennen, idealerweise über ein Templatesystem, wenn das zu aufwändig über eine Verarbeitung vor der Ausgabe.
Solltest du HTML code Dynamisch erzeugen wollen, so speichre diesen in einer Variable Zwischen
Beispiel:[php]
blub';
} else {
$link = 'Kein Link';
}
?>
Art ist: echo $Art?>
und der Link dazu: echo $link ?>
[...]
[/php]
Wie du hier siehst, findet die komplette Verarbeitung am Anfang VOR dem eigentlichen Html header statt und die Susgabe erfoglt dann im HTML text mit einfachem echo ...?> alternativ geht das auch mit =$Art ?> das = ist also eine Art öffnender PHP-Tag mit echo drin.
-------------------------------------------------------
Allgemein tut hilft es der Lesbarkeit von Quelltext, wenn diser Sinnvoll eingerückt wird. Beispielsweise so:
[php]
if (condition) {
//tu etwas
if (other condition) {
//mach was anderes tolles
}
} else {
// Sonst tue Dies
}
[/php]
Hier sieht man sehr schön das durch die Einrückung das else einfacher dem ersten if zugeordnet werden kann als ohne.
-------------------------------------------------------
Jetzt noch was zu Eingabe und Validierung.
Grundsätzlich ist es eine gute Idee alle Werte die ein Benutzer in irgendeiner Form (Formular, Get, Post,Cookie-Requests) an dein Script übergeben kann VOR der ersten Benutzung zu Prüfen und zu "entschärfen", dadurch kannst du CSS-Aktacken vorbeugen und sicherstellen, das die Variablen nur gültige Werte enthalten.
Kurzes Beispiel aus deinem Code:
[php]
// Variable zur Prüfung auf eingabefehler auf false (kein fehler) setzen.
$input_error = false;
//überprüfung mit regex: Sicher aber macht das ganze langsamer:
if (preg_match('/[A-Za-z0-9\.\/_-]*/g',$_GET['Authusrpath'])) {
$Authuserfile = $_GET['Authusrpath'];
} else {
$input_error = true;
}
[...]
// Andere Varaiablen behandeln
// kann auch gut mit den php funktionen is_numerical, is_string, oder is_boolean bzw.
// (int), (boolean) casting gemacht werden.
[...]
if($input_error === false) {
// weitere Verabeitung
}
[/php]
Hoffe das macht deutlich was ich meine.
-------------------------------------------------------
Wenn du längere Passagen Text ausgeben möchtest, dann kannst du (zur besseren übersicht) auch die [i]here document[/i] Syntax von PHP verwenden:
[php]
echo <<
Hi, ich konnte leider jetzt erst wieder online kommen. Danke für deine Tipps und dass du dir die Zeit genommen hast, dir alles durchzulesen! Ich werde sie bei Gelegenheit (Schule nervt manchmal echt :wall: :D ) ausprobieren.
Ich hätte gleich noch eine Frage: Ich habe in einem Forum den Code für einen Editor gefunden, mit dem man Dateien online bearbeiten kann: [php]
/*
Darauf achten, dass die Datei Schreibrechte besitzt.
*/
$datei = './news';
/*
Neuer Inhalt speichern
*/
if (isset($_POST['speichern'])) {
$fp = fopen($datei, 'w');
/*
Doppelte Zeilenumbrüche entfernen
*/
$news_neu = str_replace("\n", "", $_POST['news_neu']); // -> Evtl. Obacht: Win/Lin/... \n \r\n ...
$news_neu = stripslashes($news_neu); // Anpassen
#$news_neu = strip_tags($news_neu); // Anpassen
fputs($fp, $news_neu, strlen($news_neu));
fclose($fp);
}
/*
Datei in Array einlesen
*/
$news = file($datei);
/*
FORMULAR
*/
echo '';
/*
Testausgabe
*/
echo 'Inhalt';
echo '
';
echo nl2br(implode('',$news));
?>
[/php]
Wie kann ich denn den Wert der Variable $datei über die url ändern lassen (in der jetzigen Form funktioniert url/test.php?datei=irgedeindateiname nämlich nicht. was müsste ich da ändern?
//edit: hat sich geklärt: $datei = $_GET['datei']; :)
Wie kann ich mit php bestimmte Zeichenfolgen ersetzen lassen? (Als beispiel: Board - Codes ; Dort wird aus [b] im Quelltext dann usw.) Hintergrund: Ich würde mir gerne ein Script basteln, das die wichtigsten Mediawikibefehle kennt ( ==test== für Ebene-2 Überschrift usw.) und mir meine Texte dann als Vorschau anzeigen kann, indem es einfach die ganzen Befehle in HTML-Tags umwandelt. Das ganze soll dann so aussehen, dass ich auf meinem PC eine .txt Datei auswählen kann, diese dann hochgeladen und als Vorschau angezeigt wird. Das hochladen muss nicht unbedingt sein (Man kann die Dateien soviel ich weiß ja auch einfach so auslesen, oder?).
edit: Ich habe gerade mal ein bisschen in der parser.php von Mediawiki gestöbert. Das sieht dort ja recht aufwändig aus. allerdings scheinen da auch viele Sicherheitsmaßnahmen drin zu sein. Da das aber nur ich und ein bis zwei Bekannte verwenden werden, könnte ich die ja rauslassen, oder?? könnte mir jemand da mal einen kleinen Beispielcode posten, anhand dessen ich dann weitermachen kann? (zum Beispiel: aus [[bla|irgend ein Text]] soll irgend ein Text werden. Wenn ich aber nur [[bla]] habe, dann soll da nur bla draus werden.) Ist das mit nicht all zu viel Aufwand zu schaffen?
10.07.09, 12:47:09
BugHunter2k
hallo Asmodis,
muss dienen post wohl übersehen haben, darum hier ein kleiner hinweis.
Ameinfachsten geht sowas mit regulären ausdrücken (regular expression ode rauch regexp isnd gute stichwörter für google)
Php bietet in dem zusammenhang die funktionen preg_match zu suchen und preg_replace zum ersetzen an. (da mal handbuch von php zur rate ziehen (php.net))
Kleines Beispiel für den von dir beschriebenen Fall:
[php]
$2';
// RegEx mit preg_replace() auswerten
echo preg_replace($pattern, $ersatz, $string );
// ggf. auch:
// echo preg_replace(, htmlentities(), );
?> [/php]
Zum testen der Ausdrücke ist regexp-tester zu empfehlen: http://www.regex-tester.de
Hier der Link zu dem Beispiel von oben:
http://www.regex-tester.de/uc_685_de.html
Gruß
Ingo
Ich würde die Datei wahrscheinlich irgendwie so: [php][/php]
einlesen. Dann müsste der Code wohl so heißen:
[php]
$2';
// RegEx mit preg_replace() auswerten
echo preg_replace($pattern, $ersatz, $text );
// ggf. auch:
// echo preg_replace(, htmlentities(), );
?>[/php]Geht das so?
11.07.09, 12:41:16
BugHunter2k
Gehen tut das so, nur du musst das dann auch wieder zurückschreiben ;)
Um eine ganze Datei Auszulesen kannst du auch $text = file_get_contents("datei.txt") benutzen, das geht ein wenig schneller und du hast alles in einem String.
Zum zurückschreiben dann Analog auch file_put_contents("Datei.txt",$text);
Es funktioniert. Nur dummerweise wird alles, was vor einem Fund steht irgendwie weggelassen. d.h. "bla bla [[test|test]] bla bla" wird zu "test bla bla" Dabei müsste das doch wegen dem .* am Anfang eigentlich funktionieren.
edit: geht jetzt. ich habe einfach mal das: .* nach dem @ und das: .* vor @sSU weggelassen und es ging