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. |
 |

15-05-2020, 20:17
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 153
|
|
CSV-Datei in Variablen zerlegen
Hallo,
ich habe folgende CSV-Datei:
Mit folgendem Code kann ich mir den Inhalt mit php anzeigen lassen:
PHP-Code:
<?php error_reporting(0); $row = 1; $handle = fopen ("file.csv","r"); while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) { $num = count ($data); $row++; for ($c=0; $c < $num; $c++) {
print $data[$c] . "<br>\n"; } } fclose ($handle);
Jetzt bräuchte ich einen Denkanstoß wie ich die einzelnen Zellen in Variablen schreiben lassen kann. Damit ich diese weiterverarbeiten kann.
Die CSV-Dateien die ich verarbeiten möchte, sind immer nach diesem Muster aufgebaut.
LG Sven
Geändert von Sven4972 (15-05-2020 um 20:21 Uhr)
|

15-05-2020, 22:14
|
Flavaslava
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 20
|
|
Hey Sven4972,
ich habe mal einen Beispiel Script entwickelt. Mit diesem Script kannst du die gelesene Daten in einer Tabelle ansehen. Es ist auch ersichtlich wie die weiterverarbeitung mit Variablen funktioniert.
PHP-Code:
<?php error_reporting(0);
//Variablen definieren $erste_zeile = ""; // Dies ist die Variable für die Erste Zeile $ueberschriften = ""; // Dies ist die Variable für die Spaltennamen $alle_spieler = array(); //Dies ist der Array um die Spieler einzeln zu speichern
// Datei Auslesen $handle = fopen ("file.csv","r");
//Zähler $count = 0; while(($data = fgetcsv ($handle, 1000, ",")) !== FALSE) { foreach($data as $dat) {
// Erste Zeile herausfiltern if($count == 0) { $erste_zeile = explode(";",$dat); }
// Zweite Zeile herausfiltern elseif($count == 1) { $ueberschriften = explode(";",$dat); }
// Alle Spieler in Array eintragen else {
$arr = explode(";", $dat); //Hier wird durch explode der vorherige String zu einem Array $alle_spieler[] = $arr; // Hier wird jeder Datensatz in alle_spieler array hinzugefügt
}
$count++; }
} // Datei Schliessen fclose ($handle);
?>
<p> Erste Zeile = <?php var_dump($erste_zeile); ?> </p>
<table border="1">
<tr> <?php /* Tabellen Überschrift */ foreach($ueberschriften as $ueberschrift) { echo "<th>" . $ueberschrift . "</th>"; } echo "</tr>";
/* Da alle Spieler in einem Multi Array gespeichert wurden, muss hier zweimal foreach verwendet werden */ foreach($alle_spieler as $spieler) {
echo "<tr>";
foreach($spieler as $sp) { echo "<td>" . $sp . "</td>"; }
echo "</tr>";
} ?> </tr>
</table>
Was wolltest du denn ganz genau mit den ausgelesenen Daten machen?
Die in einer Datenbank speichern oder anderweitig verwenden?
Ich könnte dir besser behilflich sein, wenn ich wüsste was du genau damit vor hast.
Mit freundlichen Grüßen
Flavaslava
Wichtiger Notiz:
Ich gebe kein Gewähr das dieses Script einwandfrei läuft. Bitte achte stets darauf einen Backup zu machen bevor du dieses Script benutzt. Dieses Script ist nur ein Vorschlag. Es gibt mehrere Wege zur Lösung. Es wurden keine Sicherheitsaspekte oder sonstige sachen beachtet, da dies nur ein Beispiel ist.
|

16-05-2020, 14:34
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 153
|
|
Hallo,
danke für Deine Hilfe.
Nach dem Auslesen, möchte ich die Variablen dann in die Datenbank schreiben.
Pro Spieler eine neue Spalte in der vorhandenen Tabelle.
LG Sven
|

16-05-2020, 16:39
|
Flavaslava
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 20
|
|
Hey Sven,
hab hier mal etwas gebastelt, eventuell hilft es dir.
Ich habe die Tabellen Spalten namen nach der von der Excel Datei gemacht.
Hier ist die Tabelle:
PHP-Code:
CREATE TABLE `spieler` ( `id` int(11) NOT NULL, `spielername` varchar(100) NOT NULL, `summe` int(11) NOT NULL, `gewonnen` int(11) NOT NULL, `verloren` int(11) NOT NULL, `anderegewonnen` int(11) NOT NULL, `gesamtpunkte` int(11) NOT NULL ) ENGINE=InnoDB; ALTER TABLE `spieler` ADD PRIMARY KEY (`id`);
ALTER TABLE `spieler` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
Und hier ist der PHP-Script dazu:
PHP-Code:
<?php
//Variablen definieren $erste_zeile = ""; // Dies ist die Variable für die Erste Zeile $ueberschriften = ""; // Dies ist die Variable für die Spaltennamen $alle_spieler = array(); //Dies ist der Array um die Spieler einzeln zu speichern
// Datei Auslesen $handle = fopen ("file.csv","r");
//Zähler $count = 0; while(($data = fgetcsv ($handle, 1000, ",")) !== FALSE) { foreach($data as $dat) {
// Erste Zeile herausfiltern if($count == 0) { $erste_zeile = explode(";",$dat); }
// Zweite Zeile herausfiltern elseif($count == 1) { $ueberschriften = explode(";",$dat); }
// Alle Spieler in Array eintragen else {
$arr = explode(";", $dat); //Hier wird durch explode der vorherige String zu einem Array $alle_spieler[] = $arr; // Hier wird jeder Datensatz in alle_spieler array hinzugefügt
}
$count++; }
} // Datei Schliessen fclose ($handle);
// Datenbankverbindungsaufbau $dbConnect = new mysqli("localhost","Datenbankbenutzername","Datenbankkennwort","Datenbankname");
//Fehler Variable definieren $error = array();
// Alle Spieler durchlaufen foreach($alle_spieler as $spieler) {
// In die Tabelle eintragen $abfrage = $dbConnect->query("INSERT INTO spieler(spielername,summe,gewonnen,verloren,anderegewonnen,gesamtpunkte) VALUES('".$spieler[0]."','".$spieler[1]."','".$spieler[2]."','".$spieler[3]."','".$spieler[4]."','".$spieler[5]."')");
// Überprüfen ob die Daten eingetragen worden sind if($abfrage) { $error[] = "true"; } else { $error[] = "false"; }
}
// Ausgabe von von Fehlermeldung if(in_array("false",$error)) { echo "Es ist ein Fehler aufgetreten."; } else { echo "Daten wurden erfolgreich in die Datenbank eingetragen."; }
Ich habe die Tabelle die man sehen konnte weggemacht, wusste nicht ob du es brauchst, habe dafür eine Fehlermeldung eingebaut, so dass du sehen kannst ob die Daten eingetragen worden sind.
Vergiss bitte nicht bei der Datenbankverbindungsaufbau die Daten anzupassen.
Mfg
Flavaslava
Wichtiger Notiz:
Ich gebe kein Gewähr das dieses Script einwandfrei läuft. Bitte achte stets darauf einen Backup zu machen bevor du dieses Script benutzt. Dieses Script ist nur ein Vorschlag. Es gibt mehrere Wege zur Lösung. Es wurden keine Sicherheitsaspekte oder sonstige sachen beachtet, da dies nur ein Beispiel ist.
|

16-05-2020, 20:41
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 153
|
|
Hallo,
habe die Datenbank und das Eintragen in die Tabelle, an meine vorhandene Tabelle angepasst und es läuft schon fast so wie gedacht.
Ich bräuchte noch aus der Zelle C1 das Datum und die Zeit einzeln.
Wie könnte ich das realisieren?
LG Sven
|

16-05-2020, 22:04
|
Flavaslava
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 20
|
|
du kannst mithilfe von $erste_zeile Array auf die Daten zugreifen, einfach ein var_dump($erste_zeile) machen und schauen wo sich das datum befindet, diesen herausfiltern und dann kannst du mit explode(" ", $array); den string in ein array umwandeln und dann hast du im ersten array das Datum und in dem zweiten Array die Zeit.
Ein Beispiel:
PHP-Code:
var_dump($erste_zeile);
$zeit = explode(" ", $erste_zeile[2]);
echo "<br>";
var_dump($zeit);
echo "<br>"; $datum = $zeit[0];$uhrzeit = $zeit[1];
echo "Datum = " . $datum;
echo "<br>";
echo "Uhrzeit = " . $uhrzeit;
Die Ausgabe könnte so aussehen:
Code:
array(6) { [0]=> string(3) "445" [1]=> string(2) "36" [2]=> string(16) "15.05.2020 15:06" [3]=> string(0) "" [4]=> string(0) "" [5]=> string(0) "" }
array(2) { [0]=> string(10) "15.05.2020" [1]=> string(5) "15:06" }
Datum = 15.05.2020
Uhrzeit = 15:06
|

22-05-2020, 08:42
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 153
|
|
Hallo,
danke für deine Hilfe und Hinweise, es läuft jetzt so wie ich es haben möchte.
LG Sven
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|