php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 23-04-2014, 15:47
Howard
 Registrierter Benutzer
Links : Onlinestatus : Howard ist offline
Registriert seit: Apr 2014
Beiträge: 2
Howard befindet sich auf einem aufstrebenden Ast
Standard CSV Zeile in Formular-Feld importieren

Hallo,

ich habe ein kleines Problem, komme da aber im Moment nicht so ganz weiter.
Ich habe ein Formular erstellt, wo verschiedene Personendaten eingetragen werden können. Diese Daten werden dann in einer CSV-Liste abgespeichert. Die einzelnen Werte werden mit Semikolon getrennt. Die Liste kann bei Bedarf in HTML oder auch Excel ausgegeben und eingesehen werden.

Über folgendes kleines Script lese ich eine bestimmte Zeile aus:

PHP-Code:

<?php  $zeilen_zaehler = -1
$ziel_zeile $_POST["Zeilennummer"]; 
$datei fopen('daten.csv','r');  

while ((! 
feof($datei)) && ($zeilen_zaehler $ziel_zeile)) {  
       if (
$zeile fgets($datei,1048576)) {     
             
$zeilen_zaehler++;   
             } 
         } 
fclose($datei); 

echo 
"<form name='formular' action='speichern.php' method='post'>"
echo 
"<input type='text' size='200' name='aenderung' value='" .$zeile"'>"
echo 
"<input style='width:200px' type='submit' action='speichern.php' value='Daten speichern'/>"
echo 
"<input type='hidden' size='4' name='Zeilennummer' value='" .$ziel_zeile"'>"
echo 
"</form>";
?>
Diese Zeile wird in "ein" Formularfeld eingefügt. Dort können die Daten bearbeitet werden, man muss nur auf die Trennung durch die Semikolons achten, was natürlich absoluter Mist ist. Dann wird die ausgelesen Zeile in der CSV-Liste gelöscht und die neue an die Liste angefügt. Soweit, so gut.

Meine Frage ist, wie bekomme ich nun die ausgelesene Zeile, mit den im Moment 7 festen Spalten in 7 verschiedene Textfelder, wo sie einzeln bearbeitet werden können!? Dann wäre es für den Bearbeiter etwas übersichtlicher und nicht so unprofessionell.

Bin mir nicht sicher, ob dies hier der richtige Ansatz ist:

PHP: str_getcsv - Manual

Komme damit noch nicht so ganz klar, vielleicht gibt es da mal einen kurzen Tip zur Selbsthilfe!? Würde mich über eine kurze Rückmeldung freuen.

Vielen Dank!!


Mit Zitat antworten
  #2 (permalink)  
Alt 26-04-2014, 11:46
MrMDeluxe
 Registrierter Benutzer
Links : Onlinestatus : MrMDeluxe ist offline
Registriert seit: Jan 2014
Beiträge: 10
MrMDeluxe befindet sich auf einem aufstrebenden Ast
Standard

Hallo Howard,

um die einelnen Felder der CSV Datei in je einem input Feld editieren zu können, trenne die Felder ($zeile) einfach mit explode oder mit str_getcsv und baue dann dein Form in einer Schleife auf.

Bitte bedenke aber, dass sich fgets nicht wirklich für sehr große CSV Dateien eignet, da immer vom Datei Anfang (oder Ende) bis zu deiner Zielzeile gegangen werden muss.
Eine gute Lösung wäre dann vlcht. die Verwendung einer festen Bytelänge für jede Zeile und die Positionierung des File Pointers mittels fseek.
Erfordert aber eine Begrenzung der Feldlängen und ggbf. das Auffüllen der Values mit z.B. Whitespaces.

Desweiteren würde ich bei der Eingabe das Trennzeichen (Semikolon) per Javascript filtern.

Wenn nur für gültige Zeilen das Form zum speichern gezeigt werden soll,
prüfe auch, ob wirklich 7 Felder existieren.

Falls das File Handle ungültig ist, kann es eine Endlosschleife für Werte
größer der Zeilenanzahl geben (denk dran, der $_POST Variable ist nicht zu trauen!!!).
Denn feof() gibt bei ungültigem Handle nicht TRUE zurück.
Daher auch das File Handle auf Gültigkeit prüfen.

Hier mal ein Vorschlag, wie es aussehen könnte:
Code:
$zeilen_zaehler = -1; 
$ziel_zeile = $_POST["Zeilennummer"]; 
$datei = fopen('daten.csv','r');  
while ($datei && (! feof($datei)) && ($zeilen_zaehler < $ziel_zeile)) {  
       if ($zeile = fgets($datei,1048576)) {     
             $zeilen_zaehler++;   
       } 
} 
fclose($datei); 

$valuearray=explode (';',$zeile);
$Feldname=array("Feldname1","Feldname2","Feldname3","Feldname4","Feldname5","Feldname6","Feldname7");

if(count($valuearray)==7){
  echo "<script type='text/javascript'>";
  echo "function checkValues(th){";
  echo "  var inputs = th.getElementsByTagName('input');";
  echo "  for (key in inputs){";
  echo "    if(inputs[key].value.indexOf(';')!=-1){";
  echo "      alert('Bitte kein Semikolon bei der Eingabe verwenden!');";
  echo "      return false;";
  echo "    }";
  echo "  }";
  echo "  return true;";
  echo "}";
  echo "</script>";
  echo "<form name='formular' action='speichern.php' method='post' onSubmit='return checkValues(this);'>"; 
  foreach($valuearray as $key=>$val){
    echo $Feldname[$key].":<input type='text' size='200' name='aenderung_".$key."' value='" .$val. "'>"; 
  }
  echo "<input style='width:200px' type='submit' action='speichern.php' value='Daten speichern'/>"; 
  echo "<input type='hidden' size='4' name='Zeilennummer' value='" .$ziel_zeile. "'>"; 
  echo "</form>";
}else{
  echo "Ein Fehler ist aufgetreten...";
}
In deiner speichern.php musst Du dann die einzelnen Felder vor dem Einfügen in die CSV Datei natürlich wieder zusammensetzen.

LG
Markus
Mit Zitat antworten
  #3 (permalink)  
Alt 28-04-2014, 09:01
Howard
 Registrierter Benutzer
Links : Onlinestatus : Howard ist offline
Registriert seit: Apr 2014
Beiträge: 2
Howard befindet sich auf einem aufstrebenden Ast
Standard

Guten Morgen,

vielen Dank für Deine Antwort.

Ich habe den Ansatz mit dem Explode weiterverfolgt und bin von dem einen Formularfeld weggegangen. Mein Ergebnis ist folgendes:

PHP-Code:
<?php

$zeilen_zaehler 
= -1;
$ziel_zeile $_POST["Zeilennummer"];
$datei fopen('daten.csv','r');

while ((! 
feof($datei)) && ($zeilen_zaehler $ziel_zeile)) {
  if (
$zeile fgets($datei,1048576)) {
    
$zeilen_zaehler++;
  }
}
$array  explode(";",$zeile);
fclose($datei);

echo 
"<span style='Font-Family:Book antiqua; Color:Red;'>Formular</span>";
echo 
"<form name='formular' action='speichern.php' method='post'>";
echo 
"<table>";
    echo 
"<tr>";
      echo 
"<td>Feld1:</td>";
      echo 
"<td><input name='Feld1' value='" .$array[3]. "'/></td>";
      echo 
"</td>";
    echo 
"</tr>";
    echo 
"<tr>";
      echo 
"<td>Feld2:</td>";
      echo 
"<td><input name='Feld2' value='" .$array[2]. "'/></td>";
    echo 
"</tr>";
    echo 
"<tr>";
      echo 
"<td>Feld3:</td>";
      echo 
"<td><input name='Feld3' value='" .$array[0]. "'/></td>";
    echo 
"</tr>";
    echo 
"<tr>";
      echo 
"<td>Feld4:</td>";
      echo 
"<td><input maxlength='8' name='Feld4' value='" .$array[1]. "'/></td>";
    echo 
"</tr>";
    echo 
"<tr>";
      echo 
"<td>Feld5:</td>";
      echo 
"<td><input name='Feld5' value='" .$array[4]. "'/></td>";
    echo 
"</tr>";
    echo 
"<tr>";
      echo 
"<td>Feld6:</td>";
      echo 
"<td><input name='Feld6' value='" .$array[5]. "'/></td>";
    echo 
"</tr>";
    echo 
"<tr>";
      echo 
"<td>Feld7:</td>";
      echo 
"<td><input name='Feld7' value='" .$array[6]. "'/></td>";
    echo 
"</tr>";
  echo 
"</table><br><br><br><br>";

echo 
"<input type='submit' action='speichern.php' value='Daten speichern'/>";
echo 
"<input type='hidden' size='4' name='Zeilennummer' value='" .$ziel_zeile"'>";
echo 
"</form>";

?>
Von der Optik mal ganz abgesehen, bin ich mit dem Ergebnis eigentlich zufrieden. Was hälst DU davon?
Das Problem mit dem Semikolon bei der Eingabe ist immer noch und werde ich noch einbauen, da ist das Javascript eine schöne Sache.
Würde ganz gerne aber ohne hin noch ne Formatierung in den einzelnen Feldern des Formulars vornehmen, falls der Anwender dort etwas fehlerhaftes einträgt, z.B. , dass der jeweils erste Buchstabe immer groß geschrieben wird oder eine gewisse Datumsformatierung.

Schon mal vielen Dank für Deine Hilfe.

Howard
Mit Zitat antworten
  #4 (permalink)  
Alt 28-04-2014, 21:35
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Warum verwendest du nicht fgetcsv()? Das ist doch genau dafür gemacht.
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/104603-csv-zeile-in-formular-feld-importieren.html
Erstellt von For Type Datum
Jappy Blog - RSS Feed URL - Blog RSS Feed This thread Refback 25-04-2014 18:27

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
csv in tabelle importieren?? adnik PHP Developer Forum 1 03-05-2005 15:41
CSV in MySql importieren firat SQL / Datenbanken 11 25-04-2005 09:40
CSV mit PMA importieren chris47803 SQL / Datenbanken 1 14-10-2004 16:48
CSV-Datei importieren chefdesigner SQL / Datenbanken 3 27-11-2003 14:25
CSV Datei importieren monachus SQL / Datenbanken 1 03-07-2003 10:18

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:57 Uhr.