zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP - fopen und fwrite Problem

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 25.05.2012, 14:44
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.05.2012
Beiträge: 2
littlepsycho befindet sich auf einem aufstrebenden Ast
Standard PHP - fopen und fwrite Problem

Hallo alle zusammen!
Ich bin schon fast am verzweifeln. )=

Ich schildere erstmal meinen "Plan":
Ich bin daran ein Script zu basteln, das per Eingabe ich ein Textfeld eine neue Datei erstellt und diese mit einer Zahl beschreibt. Jedesmal wenn im Textfeld der Name einer vorhandenen eingegeben wird soll diese jedoch, statt überschrieben zu werden "um 1 erhöht werden".

PHP-Code:
<?php
$player 
$_POST["player"];
$file fopen("$player.txt","w+");
$points_c fgets($file10);
$points fgets($file10);
echo 
$points_c
echo $points
if($points == "");
    {
        
$points 0;
    }
$points++
$points $points $points_c;
rewind($file);
fwrite($file$points);
fclose($file);
echo 
"$player - $points";
?>
edit: Alle Variablen ($player) werden von einem Formular das auch zu 100% funktioniert übermittelt.

So was nun passiert: Man gibt im Formular einen Dateinamen ein. Diese wird erstellt und mit 1 beschrieben. Soweit so gut. Wenn man jedoch den Namen erneut eingibt wird der Inhalt wieder auf 1 zurückgesetzt.

Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt....

LG littlepsycho (;
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 25.05.2012, 15:04
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.630
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Spar dir den Aufwand mit den Handlern und nutze lieber PHP: file_put_contents - Manual, bzw. file_get_contents()
PHP-Code:
file_put_contents'/your/file'$contentFILE_APPEND ); 
Soll der Inhalt überschrieben werden (ich hab das nicht so ganz herauslesen können aus deinem Text), dann halt die Konstante weg lassen.

Was passiert eigentlich, wenn ich exploit.php als Dateinamen, wird die dann auch angelegt?
__________________
github | http://dnaber.de
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 25.05.2012, 15:07
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 415
Maxefix ist ein sehr geschätzer MenschMaxefix ist ein sehr geschätzer MenschMaxefix ist ein sehr geschätzer Mensch
Standard

Der Modus bei fopen() ist für den Zweck nicht der richtige. Das sagt die PHP-Doku:
Zitat:
w+: Zum Schreiben und Lesen geöffnet; platziere Dateizeiger auf Dateianfang und kürze die Datei auf eine Länge von 0. Existiert die Datei nicht, versuche, diese zu erzeugen.
Versuch mal "r+".

Für was benötigst du eigentlich $points_c UND $points? Nach meinem Verständnis würde eine Variable reichen. Du liest die Datei ein. Wenn etwas drin steht nimmst du die Zahl als Ausgangswert, falls nicht nimmst du 0.

Übrigens ist es sehr unsicher Werte die vom User kommen ungefiltert in einem fopen() zu verwenden. Mit entsprechenden Werten könnte man auch andere Dateien überschreiben und somit für einiges Chaos sorgen.

Deinen Skript-Aufbau könnte man sicherlich auch noch verbessern. Ich würde z.B. eher erst mit is_file() prüfen ob die Datei bereits existiert. Falls ja würde ich sie mit file_get_contents() einlesen und die darin enthaltene Zahl erhöhen. Falls nicht würde ich einfach mit "1" starten. Das Ergebnis kannst du dann mit file_put_contents() wieder abspeichern. Das sind dann keine 10 Zeilen und es liest sich viel besser.

Gruß,
Max
Mit Zitat antworten
  #4 (permalink)  
Alt 25.05.2012, 23:26
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.05.2012
Beiträge: 2
littlepsycho befindet sich auf einem aufstrebenden Ast
Standard Beides ausprobiert

Vielleicht(fast es auch zu 100% sicher ist) stelle ich mich einfach nur saudumm an, aber ich habe nun mal beide Varianten durchprobiert.

1. - fopen mir r+ und einer variablen:
PHP-Code:
<?php
$player 
$_POST["player"];
$file fopen("$player.dat","r+");
$points fgets($file10);
if(
$points == "");
    {
        
$points 1;
    }
$points++;
rewind($file);
fwrite($file$points);
fclose($file);    
echo 
"$player - $points";
?>
Gibt mir den folgenden error:
Code:
Warning: fopen(Testeintrag.dat) [function.fopen]: failed to open stream: No such file or directory in [...]/read.php on line 6

Warning: fgets() expects parameter 1 to be resource, boolean given in [...]/read.php on line 7

Warning: rewind() expects parameter 1 to be resource, boolean given in [...]/read.php on line 13

Warning: fwrite() expects parameter 1 to be resource, boolean given in [...]/read.php on line 14

Warning: fclose() expects parameter 1 to be resource, boolean given in [...]/read.php on line 15
Testeintrag - 2
2. file_put_contents(Das ich aus dem Manual net 100% verstanden hatte, müsste mich mal etwas tiefer damit beschäftigen...)
PHP-Code:
<?php
$file 
$_POST["player"];
$file "$file.dat";
file_put_contents($file$person,  LOCK_EX);
$data fopen("$file","r");
$content fgets($data10);
$content++;
fclose($data); 
?>
Erstellt zwar die Datei lässt sie aber leer. Ich glaube ich weiß auch warum, da er ja keine Chance hat $content zu schreiben....
Warum fallen mir solche Sachen erst auf wenn ich den Post schreibe....
Mit Zitat antworten
  #5 (permalink)  
Alt 26.05.2012, 07:50
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 11.09.2006
Beiträge: 1.011
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von littlepsycho Beitrag anzeigen
2. file_put_contents(Das ich aus dem Manual net 100% verstanden hatte, müsste mich mal etwas tiefer damit beschäftigen...)
PHP-Code:
<?php
$file 
$_POST["player"];
$file "$file.dat";
file_put_contents($file$person,  LOCK_EX);
$data fopen("$file","r");
$content fgets($data10);
$content++;
fclose($data); 
?>
Klar ist die Datei leer, genauso wie deine Variable $person...
Wozu das fopen? Du nimmst den Inhalt (der nicht mal zwingenderweise eine Zahl ist), zählst ihn hoch und machst die Datei wieder zu - ohne zu speichern.

PHP-Code:
$content file_get_contents(...);
$content++; // vorher prüfen ob es eine zahl ist?
file_put_contents(..., $content); 
Und wie oben schon erwähnt: Prüfe unbedingt die Eingabe-Daten ("player") bevor du eine Datei dazu anlegst. Das mindeste: PHP: basename - Manual oder str_replace (alle Pfadzeichen entfernen).

Denn wenn man bei deinem Script als "player" nämlich "../../irgendwas" eingibt landet man schnell in einem anderen Verzeichnis, und das willst du nicht.
__________________
:)
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML mit PHP Code aus Datenbank auslesen + ausführen Garlandt Serveradministration und serverseitige Scripte 14 01.05.2011 12:45
PHP Ansicht Problem |SONY| Serveradministration und serverseitige Scripte 10 15.07.2009 22:05
Praxisnah PHP lernen p0mmeluff Serveradministration und serverseitige Scripte 5 24.03.2009 21:18
PHP Upload Problem tichy Serveradministration und serverseitige Scripte 2 28.10.2008 23:56
Problem: IE versteckt Text & Feedback Herbi CSS 2 11.08.2006 14:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:47 Uhr.