Archivlink: javarea.de Forum > PHP, MySQL & CGI > Variablen in Textbox einlesen, bearbeiten, speichern
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Variablen in Textbox einlesen, bearbeiten, speichern

Pages: [1] 2 ... nächste » ... Letzte »

geschrieben von Junger Huepfer am 06.09.2007 - 07:56
Hallo, ich habe ein kleines problem.
Vorneweg muss ich sagen, dass ich nicht so der php-Profi bin.
Ich hab mir aus einigen codeschnippseln ein script gebastelt, dass die txt-files eines ordners auslist, auf klick lassen sich diese bearbeiten und dann speichern.
Meine txt enthalten aber variablen, die später includet werden sollen.
Jetzt kriege ich es hin, dass mir die datei in eine textbox ausgegeben wird.
ich möchte aber jede Variable als eigenes input haben, sodass ich die variablen einzeln bearbeiten und dann speichern kann.

ich habe alles mal als anhang gepackt!

geschrieben von Klaush am 06.09.2007 - 10:44
Du könntest jede Zeile in ein Array schreiben.
PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 

Array
(

    [0] => <?
    
[2] => $var1 'titel';
    [
3] => $var2 'inhalt';
    [
4] => $var3 'var3';
    [
5] => $var4 'var4';
    [
6] => ?>
)



Als nächstes könntest du als Trenner das = benutzen und in einer Schleife ein erneutes Array schreiben.

PHP-Quelltext
1: 
2: 
3: 
4: 

<?
Bsp
:
$n_array explode("="$fp[$i]);
?>



Die fertige edit.php Datei könnte dann so aussehen:

PHP-Quelltext
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: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 

<form action="text_schreiben.php" method="post" name="form1" class="text">
<p>Externen Text online editieren<br>
<?php
$dateiname 
$_GET['file'];
$fp file($dateiname);

// Zaehlervar mit 1 beginnen, um so das < ? auszulassen
// count -1 soll das ende ? > weglassen
$n_array = array();
for (
$i=1$i < (count($fp)-1); $i++) 
{    
  
// einzelne Teileabschnitte in Array schreiben
    
$n_array explode("="$fp[$i]);
    
    
// Zeichen $ ' und ; filtern
    // $n_array[0] = Feldname
    // $n_array[1] = Feldinhalt    
    
$n_array[0] = str_replace("$","",trim($n_array[0]));
    
$n_array[1] = str_replace("'","",str_replace(";","",trim($n_array[1])));
    
    
// Ausgabe der Eingabefelder
    
echo "$n_array[0]: <input type='text' name='$n_array[0]' value='$n_array[1]'><br>";
}
?>
<input type="hidden" name="dateiname" value="<? echo $dateiname ?>">
</p>
<p>
<input type="submit" name="Submit" value="speichern">
</p>
</form>



Ps: Es ist nur ein Ansatz und muss nicht die perfekte Lösung sein .... ich habe das mehr oder weniger in 10 min hingeklatschtalswärederteufelhintermirher

Das Schreiben der txt überlasse ich nun dir....

geschrieben von Junger Huepfer am 06.09.2007 - 13:07
Soweit so gut, vielen Dank, aber wie speichere ich die Daten aus dem Array?
Zitat
 Das Schreiben der txt überlasse ich nun dir....

Ach so, dass meinst du damit. Hab bisher noch nix mit Array zu tun gehabt.

geschrieben von Junger Huepfer am 06.09.2007 - 13:55
Okay, mal so die gedanken, die ich gerade habe:
Ich übergebe jetzt $n_array und nicht mehr $text
da ein explode("=", $fp[$i]); gemacht wurde muss ich wieder implode machen, richtig?
So in etwa? $text = implode "=", $n_array);
So, muss ich die Zeichen ('$;)irgendwie wieder hinkriegen, und den Zeilenumbruch, oder?
Dann speichern, fertig.
Soweit die Theorie. Und nun?

geschrieben von Klaush am 06.09.2007 - 14:25
Ich habe deine Datei ausgelesen und den Inhalt durch eine Schleife in ein Array abgelegt. Im Anschluss lese ich alle Teile in der Schleife wieder aus und ordne diese zu.

Deine txt Datei:
PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 

<?
$var1 
'title title';
$var2 'inhalt';
$var3 'var3';
$var4 'var4';
$var5 'var5';
?>



Jetzt musst du die Werte aller Inputfelder sammeln und geschlossen an deine Txt Datei zurückschreiben. Um den Unterschied deiner Variablen vom Rest der globalen POST-Variablen zu unterscheiden, habe ich den Code in der edit.php Datei etwas abgeändert.

PHP-Quelltext
1: 
2: 
3: 

<?
echo "$n_array[0]: <input type='text' name='new_$n_array[0]' value='$n_array[1]'><br>";
?>



Im Unterschied zu vorher, bekommen die Variablen jetzt ein "new_" vorangestellt, dass soll beim späteren auslesen und zurückschreiben helfen und als Filter dienen.

Das Zurückschreiben der Werte, samt Variablen würde ich so versuchen:
PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 

while(list($key, $val)=each($HTTP_POST_VARS)) 
{
    // alle Variablen die ein vorangestelltes "new_" haben, filtern und nur diese auswerten, 
    if (substr_count($key, 'new_'))
    {
        // das "new_" abschneiden
        $key = str_replace("new_","", $key);
        
        $val = stripslashes($val);
        $val = str_replace("\$","\\\$",$val);
        $val = str_replace("\'","\\\'",$val);
        $write_val.="\$$key = '$val';\n";        
    }
} // end While
$write_val = "<?\n".$write_val."?>";

$dateiname = $HTTP_POST_VARS["dateiname"];
$datei = fopen($dateiname, "w");
fwrite ($datei, $write_val);
fclose ($datei);
echo "Der eingegebene Text wurde erfolgreich eingetragen";
echo "<br>";



Im Anhang findest du ein komplettes funktionierendes Beispiel.

Ich hoffe das, dass so gemeint war?

geschrieben von Klaush am 06.09.2007 - 14:54
Nun bin ich schon dabei .....

Ich habe dir beide Varianten eingebaut.

1) Du hast die Möglichkeit den gesamten Text aus der Textarea abzuspeichern, sinvoll wenn du neue Variablen anlegen möchtest, oder bereits vorhande ändern
2) Werden dir alle Variablen als Input aufgelistet, die du dann auch bequem einzeln ändern kannst


Das macht ein Bierchen ;)

geschrieben von Junger Huepfer am 07.09.2007 - 07:24
So Klaus, das Bierchen hast Du dir verdient:
http://www.c4dgallery.com/uploads/crewler_bier_o.jpg
ICh Trinke eins mit:
http://www.bitburger-braugruppe.de/typo3temp/pics/cbdfb1ca39.jpg
Falls Du mal in Bonn sein solltest kriegst du auch ein richtiges:
Jenes welche hier; ein echtes Bönnsch:
http://www.boennsch.de/images/nezhin_logo.gif

Ich Danke Dir für Deine mühe.
Der Sinn, warum ich das überhaupt mache: Ich wollte mir ein "mini-cms" basteln, womit ich eine Newsseite bearbeiten kann.
Ganz ideal ist das jetzt zwar noch nicht, aber ich werde nicht aufgeben, bis mich das ergebnis befriedigt.
Meine vorstellung ist so:
Var1, var2, var3 ausgeben in input
var4 ausgeben in textarea
etc.
Jetzt werden Zeilenumbrüche logischerweise als neues input gezeigt und solche scherze, aber das wird schon. Ich werde nicht aufgeben! Chacka!!!
Nochmal vielen Dank, und lass Dir das Bier schmecken!

geschrieben von Klaush am 07.09.2007 - 08:00
Das Bier ist lecker und dann noch das was ich wirklich trinke .... das war ein Treffer.

Ja, was genau du haben wolltest, hast du im ersten Post nicht beschrieben.
Ich bin dir gerne behilflich, doch du solltest schon genau beschreiben wie du was machen möchtest.

Das A und O ist IMHO ein vernünftig durchdachtes Konzept.

geschrieben von Junger Huepfer am 07.09.2007 - 08:11
Zitat
 Das Bier ist lecker und dann noch das was ich wirklich trinke .... das war ein Treffer.

Ich meine hier irgendwann mal was gelesen zu haben. Die Forensuch +Klaus+Lieblingsbier hat leider nix gebracht

Das mit dem Konzept ist nicht so einfach! Es war erstmal ein schuss ins Blaue- Erstmal verstehen wie das Prinzip funktioniert.
Aber zur Erklärung meines Vorhabens:
Ich habe txt-Dateien mit Variablen und .php.
Die phps enthalten ein Layout und Strucktur usw und die Txt enthalten variablen, die in die php individuell eingelesen werden.
Ich möchte mir in einem bestimmte Ordner (wo die ganzen txt liegen) die txt-files anzeigen lassen (hab ich ja schon), und auf klich eine bearbeiten können (klappt ja auch schon)
Die txt enthalten z.b.
$titel ='Seitentiteltitel'
$inhalt = 'Seiteninhalt/Text'
usw
Ich möchte mir den INhalt, je nach dem, in einem input oder in einer Textarea anzeigen lassen, ändern können, speichern.
Sodass ich mir Quasi die Seite komplett verändern kann, und das online.
(Natürlich ist alles Passwortgeschützt)

geschrieben von Klaush am 07.09.2007 - 08:17
Dann liegt es nur daran die Variablen zu unterscheiden und die Zeilenumbrüche beim Auslesen nicht als Feld abzulegen, sondern einfach zu ignorieren.

Bei deinen TXT Dateien werden also nur Variablen mit Inhalt abgelegt, ähnlich wie es jetzt schon der Fall ist, sonst nichts weiter?

PS.: Bereite mal so eine TXT Datei vor, dann schau ich's mir noch einmal an.

geschrieben von Klaush am 07.09.2007 - 11:30
Hatte in meiner Frühstückspause etwas Zeit und habe dir einen ersten Versuch gebastelt.... war etwas tricky. Es ist ausbaufähig und du kannst es ja noch etwas erweitern.

Zur Erläuterung:
Das erste Textarea zeigt den kompletten Inhalt der TXT Datei an. Hier kannst Du neue Variablen einbinden und vorhandene neu Deklarieren, sprich aus einer Inputfeld Variable eine Textarea-Variable machen.

Im unteren Teil der edit.php werden dir alle Felder angezeigt. Du kannst also im oberen Teil der edit.php Leerzeilen haben, diese werden bei der Filterung nicht ausgewertet.

Schau's dir an und probier etwas rum .....

Bis auf's nächste Bierchen .. ;)

geschrieben von Junger Huepfer am 07.09.2007 - 21:12
Dafür gibts ein ganzes Fass
http://www.biertap.com/Duits/images/perfectdraftbecks_152.jpg
Ich bin echt von den Socken. Die Idee mit den Variablen zu vergeben hatte ich auch gehabt, aber du warst schneller und besser Ich hatte allerdings gedacht z.B. $inhalt eine Textarea zuzuweisen, dem rest ein input, oder so, aber Deine Lösung ist um einiges eleganter *lob#+
Genau so hab ich das gemeint.
IM grunde gibts da ja nix mehr zu machen. ein paar kleinigkeiten vielleicht.
dass vor den inputs nicht mehr ifield_var1, sondern "Titel" steht, aber da werde ich mich erst nächste Woche dran setzen. Am Wochenende ist erst mal Familienzeit. Man will ja schliesslich was haben von Frau und Kind
Nochmals vielen Dank und ein schönes WE

geschrieben von Junger Huepfer am 10.09.2007 - 07:34
So, hab mal ein Anwendungsbeispiel gebaut!
Ist sehr vereinfacht, aber du weisst ja, was ich meine!
Wenn ich jetzt noch hinkriege, dass anstatt vor input jetzt nicht "ifield_var1" sondern "titel" steht bin ich glücklich.
Muss ich dafür ein neues array schreiben?
Oder bin ich dafür vom ansatzt her Falsch?
Wie gesagt, hab ohne richtiges Konzept angefangen.

geschrieben von Micha am 10.09.2007 - 08:20
Hi,

Zitat
 Original geschrieben von Junger Huepfer am 07.09.2007 - 21:12
Dafür gibts ein ganzes Fass


Ohoh Klaus, damit mutierst langsam aber sicher zum Alki ;)

Micha


geschrieben von Klaush am 10.09.2007 - 08:37
Zitat
 Original geschrieben von derletztekick am 10.09.2007 - 08:20
Ohoh Klaus, damit mutierst langsam aber sicher zum Alki ;)

Ich dachte das wäre ich schon . Die Bierchen die ich in so manch netten Onlinesitzungen mit dir hatte, hast du wohl nicht bemerkt..... SCHLUD bist dann DU *ggg*.


ZUM THEMA:
Nein, du brauchst kein neues Array, erweitere es einfach.

Bitte nicht gleich mit dem Editieren anfangen, die Komplettlösung gibt's weiter unten. Ich erkläre es dir ersteinmal, damit du einen Überblick bekommst wie ich vorgegangen bin. In der Regel mache ich das nicht so ausführlich, aber bei einem Fass Bier ... wer kann da schon nein sagen *lol*.

öffne mal die edit.php und suche diese Stelle:
PHP-Quelltext
1: 
2: 
3: 
4: 

<?
$var 
$n_array[0];    // Variable
$val $n_array[1]; // Inhalt der Variable
?>



Genau hier klinken wir uns ein und erweitern das Array um ein weiteres Feld für das Label.
Du fügst nun ein weiteres Feld ein zb:
$lab = str_replace("'","", $n_array[1]); // Label der Variable
Da Du die ' ' nicht anzeigen möchtest, davon gehe ich mal aus, entfernen wir diese mit str_replace()

Nun müssen wir den bereits existierenden Feldindex um 1 verschieben, also auf 2.
aus $val = $n_array[1]; wird nun $val = $n_array[2];.

Als nächstes editierst du deine txt Datei um dein Array richtig aufzubauen:
PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 

<?
// Variable = Label = Inhalt
$ifield_var1 'Titel:' 'titel';
$ifield_var1 '' 'sonstiges';
$ifield_var2 'Überschrift neu:' 'überschrift';
$ifield_var3 'Überschrift alt:' 'überschrift2';
$tfield_var4 'Inhalt:' 'Hier steht dann der Inhalt!<br />Ganz viel Text....';
?>



Wie Du erkennst, habe ich das Array um ein Feld erweitert. Ich habe den Weg gewählt, weil das Array nunmal da ist, warum also ein neues bauen? Wenn du kein Label haben möchtest, dann lass die Zeile einfach leer.

Hier noch einmal alle Änderungen, die du so in deine bestehende edit.php übernehmen kannst. Suche also den Abschnitt und ersetze diesen durch den hier.
PHP-Quelltext
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: 

<?
// Nur die gefuellten Felder verarbeiten
    
if ($n_array[0] != "")
    {
        
$var $n_array[0];    // Variable
        
$lab str_replace("'",""$n_array[1]); // Label der Variable        
        
$val $n_array[2]; // Inhalt der Variable        
        
        // Zeichen $ ' und ; filtern/ersetzen
        
$var str_replace("$","",trim($var));
        
$val str_replace("'","",str_replace(";","",trim($val)));        
        
        
// INPUT-Felder anhand der Variable "ifield_" ekennen und zusammenfassen
        
if (substr_count($var'ifield_'))
            
$inputfield.= "$lab <input type='text' name='$var' value='$val'><br>";
        
        
// Textarea-Felder anhand der Variable "tfield_" erkennen und zusammenfassen
        
if (substr_count($var'tfield_'))    
        {
            
// Zeilenumbrueche in textarea-konformen Umbruch umwandeln
            
$val str_replace("<br />""\n"$val);
            
$textarea.= "$lab <textarea name='$var' cols='50' rows='10'>$val</textarea><br>";
        }
    }
?>




Auch diese Lösung muss nicht die Cleverste sein, vielmehr soll sie als Ansatz dienen.


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.