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, 14: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, 10: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, 08: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, 20:35
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
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 17: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 14:41
CSV in MySql importieren firat SQL / Datenbanken 11 25-04-2005 08:40
CSV mit PMA importieren chris47803 SQL / Datenbanken 1 14-10-2004 15:48
CSV-Datei importieren chefdesigner SQL / Datenbanken 3 27-11-2003 13:25
CSV Datei importieren monachus SQL / Datenbanken 1 03-07-2003 09: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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:23 Uhr.