PHP - CSV durchsuchen
acardi
- php
Hallo,
ich habe eine csv Datei, die ich anhand einer Formular Eingabe durchsuchen möchte.
Bisher habe ich folgendes zusammengebretzelt:
<?php
$ctisearch = $_GET["ctisearch"];
echo $ctisearch;
$Zeilen = 1;
$csvopen = fopen("stol.csv", "r");
$row = 1;
while ($data = fgetcsv ($csvopen, 1000, ",")) {
if ($data[0] == $ctisearch) {
echo "Gefunden in Zeile " . $row . ": ";
echo "Spalte 2: " . $data[1] . " -- ";
echo "Spalte 3: " . $data[2] . " -- ";
echo "Spalte 4: " . $data[3] . "<br />";
}
$row++;
}
fclose($csvopen);
?>
Es funktioniert allerdings nicht. Die Formular Übergabe ist kein Problem, klappt, aber in meiner Schleife scheint ein Problem mit den Arrays zu sein, allerdings erkenne ich es nicht.
Die Schleife durchläuft auch ohne Probleme, nur ein Ergebnis liefert sie nicht.
Ich wäre sehr für Hilfe verbunden,
einen freundlichen Gruß
Ich wäre sehr für Hilfe verbunden,
FIND
while ($data = fgetcsv ($csvopen, 1000, ",")) {
INSERT AFTER
echo 'debugausgabe: ' . $data[0] . '<br />';
Ich wäre sehr für Hilfe verbunden,
FIND
while ($data = fgetcsv ($csvopen, 1000, ",")) {
INSERT AFTER
echo 'debugausgabe: ' . $data[0] . '<br />';
Jetzt steht da 1900x "debugausgabe" ;-)
Wie genau soll mir dieser Tipp weiterhelfen?
Grüße
echo $begrüßung;
Jetzt steht da 1900x "debugausgabe" ;-)
Vermutlich bekommst du auch noch 1900 Hinweismeldungen, wenn du das error_reporting auf E_ALL stellst (und display_errors auf on). PHP unterdrückt dann nicht mehr die Hinweismeldungen bei Zugriffen auf nicht vorhandene Variablen. Eine solche liegt möglicherweise vor.
Wie genau soll mir dieser Tipp weiterhelfen?
Du sollst dir die Werte der beteiligten Variablen ausgeben lassen, um so Wunsch und Wirklichkeit miteinander zu vergleichen. Kontrollausgaben sind das einfachste und wirkungsvollste Mittel zur Fehlersuche. Deutlich genauer als ein echo ist übrigens die Funktion var_dump().
echo "$verabschiedung $name";
Ich bekomme keine 1900 Hinweismeldungen, lediglich folgende:
Notice: Undefined index: ctisearch in suche.php on line 11
Allerdings ist die Variable definiert.
Es werden immer die ersten 8 Einträge angezeigt, es wird also nicht richtig gesucht.
Aber mit "if ($data[0] == $ctisearch)" vergleiche ich doch, oder etwa nicht?
Grüße
echo $begrüßung;
Jetzt steht da 1900x "debugausgabe" ;-)
Vermutlich bekommst du auch noch 1900 Hinweismeldungen, wenn du das error_reporting auf E_ALL stellst (und display_errors auf on). PHP unterdrückt dann nicht mehr die Hinweismeldungen bei Zugriffen auf nicht vorhandene Variablen. Eine solche liegt möglicherweise vor.
Wie genau soll mir dieser Tipp weiterhelfen?
Du sollst dir die Werte der beteiligten Variablen ausgeben lassen, um so Wunsch und Wirklichkeit miteinander zu vergleichen. Kontrollausgaben sind das einfachste und wirkungsvollste Mittel zur Fehlersuche. Deutlich genauer als ein echo ist übrigens die Funktion var_dump().
echo "$verabschiedung $name";
Ich bekomme keine 1900 Hinweismeldungen, lediglich folgende:
Notice: Undefined index: ctisearch in suche.php on line 11
Allerdings ist die Variable definiert.
ja, es wird aus GET übernommen wie es scheint
Es werden immer die ersten 8 Einträge angezeigt, es wird also nicht richtig gesucht.
Aber mit "if ($data[0] == $ctisearch)" vergleiche ich doch, oder etwa nicht?
könnte es sein, das $ctisearch ein array ist oder ist in $ctisearch überhaupt etwas enthalten?
$ctisearch = $_GET["ctisearch"];
ggf solltest du mit isset oder isempty prüfen, ob in $_GET["ctisearch"]; überhaupt irgendwas daherkommt
Der echo() zeigt mir an, dass durch GET etwas übernommen wird .. die Formular Übergabe funktioniert.
Auch der Abgleich scheint zu funktionierne, denn wenn ich einen Suchbegriff eingebe erscheinen nicht alle Einträge - nämlich gar keiner.
Selbst wenn ich nur den Buchstaben "h" suchen lasse, kommt nichts.
Irgendwo sitzt dadrin noch der Wurm?
Ich bekomme keine 1900 Hinweismeldungen, lediglich folgende:
Notice: Undefined index: ctisearch in suche.php on line 11
Allerdings ist die Variable definiert.
ja, es wird aus GET übernommen wie es scheintEs werden immer die ersten 8 Einträge angezeigt, es wird also nicht richtig gesucht.
Aber mit "if ($data[0] == $ctisearch)" vergleiche ich doch, oder etwa nicht?
könnte es sein, das $ctisearch ein array ist oder ist in $ctisearch überhaupt etwas enthalten?
$ctisearch = $_GET["ctisearch"];
ggf solltest du mit isset oder isempty prüfen, ob in $_GET["ctisearch"]; überhaupt irgendwas daherkommt
Wenn ich GET mit print_r ausgebe erscheint auch die Formulareingabe, genau wie beim echo.
Die CSV Datei wird auch korrekt eingegeben ... mache ich die Kontrolle gibt er die ausgewählten Arrays aus.
Mir steht ein Fragezeichen auf der Stirn geschrieben ;-)
Moin
Ja, ich möchte das Rad neu erfinden :-)
Ich möchte kein Fertigscript nehmen, sondern verstehen, was mein Script macht!
Löblich Löblich,
Was wird ausgegeben, wenn du $_GET mit print_r() ausgibst?
Als nächste würde ich als Kontrolle $data[0] innerhalb der whileschleife (noch vor der If-Abfrage) ausgeben, um zu schauen, das die CSV korrekt eingelesen wird.Poste bitte das Ergebnis (in abgekürzter Form)
Gruß Bobby
Moin
Ok, ich glaube ich weiß wo dein Problem liegt. Du suchst nach bestimmten Zeichen in der Zeichenkette $data[0].
Bei der Abfrage if ($data[0] == $ctisearch) müssen jedoch die beiden Werte exakt übereinstimmen um ein positives Ergebnis zu erhalten..
du musst eine String-Funktion anwenden um auf Zeichen zu prüfen, die innerhalb einer Zeichenkette vorkommen.
stristr() wäre eine solche Funktion:
also: if (stristr ( $data[0], $ctisearch ))
wäre die geeignete Abfrage.
Gruß Bobby
Sehr, sehr guter Tipp! Das wars :-)
Vielen Dank dafür!
also: if (stristr ( $data[0], $ctisearch ))
wäre die geeignete Abfrage.
Moin
Sehr, sehr guter Tipp! Das wars :-)
Vielen Dank dafür!
Gut.
Dazu ein Hinweis:
Versuche bitte beim nächsten Mal auf dein Problem näher einzugehen. Angefangen mit der Erklärung mit welchen Daten was passieren soll. Hättest du von vornherein gesagt, das du nach einer bestimmten Zeichen innerhalb einer Zeichenkette suchst, hättest du die Antwort viel schneller bekommen. Ich bin auf dein eigentliches Problem nur duch deine Aussage mit dem "h" als Suchstring gestossen.
Du siehst, eine möglichst genaue Problembeschreibung hilft dem Fragenden und den Antwortenden.
Gruß Bobby
Es werden immer die ersten 8 Einträge angezeigt, es wird also nicht richtig gesucht.
Aber mit "if ($data[0] == $ctisearch)" vergleiche ich doch, oder etwa nicht?
wenn deine schleife 1900 durchläufe hat, brich sie mit break nach sagen wir 25 durchläufen ab und du beschränkst deine ausgabe auf einfache art und weise
jetzt fügst in der schleife
folgendes ein:
echo 'data: "' . $data[0] . '"<br />';
echo 'cti: "' . $ctisearch . '"<br />';
oder wie schon vorgeschlagen mit var_dump
echo 'data: "' . var_dump($data[0]) . '"<br />';
echo 'cti: "' . var_dump($ctisearch) . '"<br />';
wenn du mit == als vergleichsoperator arbeitest und nur strings/zahlen usw gemischt vergleichen willst, ist vardump nicht zwingend erforderlich, da der datentyp eigentlich egal ist
wenn du datentypen vergleichen willst (mit ===) ist var_dump essentiell wichtig, da der string(true) != bool(true) ist
wenn du jetzt zb da stehen hast
data: "foobar"
cti: "snafu"
kannst du dir sicher sein, dass dein if nicht zutreffen wird
data: "foobar "
cti: "foobar"
das würde auch nicht zutreffen - für solche fälle empfiehlt sich trim()
Es werden nur alle Einträge angezeigt, wenn ich auch zur Einleseüberprüfung einen echo rausgebe.
Im Normalfall, ohne üÜberprüfungsecho, erscheinen keine Suchtreffer!
Gebe ich gar nichts ein, kommen die ersten 8 Einträge!
Ich hoffe die Informationen helfen bei der Lösungssuche.
Es werden immer die ersten 8 Einträge angezeigt, es wird also nicht richtig gesucht.
Aber mit "if ($data[0] == $ctisearch)" vergleiche ich doch, oder etwa nicht?
wenn deine schleife 1900 durchläufe hat, brich sie mit break nach sagen wir 25 durchläufen ab und du beschränkst deine ausgabe auf einfache art und weise
jetzt fügst in der schleife
folgendes ein:
echo 'data: "' . $data[0] . '"<br />';
echo 'cti: "' . $ctisearch . '"<br />';oder wie schon vorgeschlagen mit var_dump
echo 'data: "' . var_dump($data[0]) . '"<br />';
echo 'cti: "' . var_dump($ctisearch) . '"<br />';wenn du mit == als vergleichsoperator arbeitest und nur strings/zahlen usw gemischt vergleichen willst, ist vardump nicht zwingend erforderlich, da der datentyp eigentlich egal ist
wenn du datentypen vergleichen willst (mit ===) ist var_dump essentiell wichtig, da der string(true) != bool(true) ist
wenn du jetzt zb da stehen hast
data: "foobar"
cti: "snafu"
kannst du dir sicher sein, dass dein if nicht zutreffen wirddata: "foobar "
cti: "foobar"
das würde auch nicht zutreffen - für solche fälle empfiehlt sich trim()
Im Normalfall, ohne üÜberprüfungsecho, erscheinen keine Suchtreffer!
Gebe ich gar nichts ein, kommen die ersten 8 Einträge!
das sollte nicht sein - es sollten keine oder alle kommen ( je nachdem, ob das if zutriff oder nicht)
Ich hoffe die Informationen helfen bei der Lösungssuche.
die lösung musst du selbst finden ;)
mach folgendes: "wirf dein script weg" - sprich benenn es um und mach ein neues
fange mit folgendem an:
<?php
echo $_GET['ctisearch'];
?>
dann mach folgendes
<?php
// prüfen ob ctisearch nicht gesetzt ist oder leer ist
if (!isset($_GET['ctisearch']) || isempty($_GET['ctisearch']) {
echo 'suchbegriff nicht gesetzt oder leer';
} else {
echo $_GET['ctisearch'];
}
?>
nach diesem schema baust du dein komplettes script nach und gibst an allen ecken und enden debugausgaben aus, sonst wirst du niemals dahinterkommen, wann was passiert
echo $begrüßung;
Bitte zitiere nur das, worauf du dich beziehst, nicht einfach alles. Danke.
Notice: Undefined index: ctisearch in suche.php on line 11
Allerdings ist die Variable definiert.
Es geht nicht um eine Variable sondern um den Index-Wert ctisearch, der in deinem Fall im Array $_GET erwartet wird. Der Hinweis kommt ja nicht von ungefähr. Wenn PHP sagt, der Indexwert sei nicht vorhanden, dann ist das so. Vielleicht hast du einen Tippfehler im Formular und der Indexwert heißt anders.
Es werden immer die ersten 8 Einträge angezeigt, es wird also nicht richtig gesucht.
Daran ist aber sicher nicht PHP schuld. Mach weitere Kontrollausgaben. Du kannst auch das Ergebnis eines Vergleichs kontrollieren. Z.B.
var_dump($data[0] == $ctisearch);
Aber mit "if ($data[0] == $ctisearch)" vergleiche ich doch, oder etwa nicht?
Ja, nur was du womit vergleichst, kann dir nur eine Kontrollausgabe offenbaren.
echo "$verabschiedung $name";
Hi,
bist Du Dir sicher, dass Du an dieser Stelle das Rad neu erfinden willst?
Du könntest auch einfach eine fertige Klasse zum Parsen einer CSV-Datei nehmen.
Eine Suche nach "CSV" auf phpclasses.org brachte 441 Treffer...
Hier wäre ein Beispiel:
http://www.phpclasses.org/browse/package/4122.html
Viele Grüße,
Andreas
Moin
bist Du Dir sicher, dass Du an dieser Stelle das Rad neu erfinden willst?
Manchmal ist es besser das Rad neu zu erfinden, um dessen wirkungsweise zu verstehen!!!!
Außerdem wird hier nichts neu erfunden, sondern lediglich eine _kleine_ Abfrage mit PHP gestaltet!
Gruß Bobby
Ja, ich möchte das Rad neu erfinden :-)
Ich möchte kein Fertigscript nehmen, sondern verstehen, was mein Script macht!
Grüße
Moin
bist Du Dir sicher, dass Du an dieser Stelle das Rad neu erfinden willst?
Manchmal ist es besser das Rad neu zu erfinden, um dessen wirkungsweise zu verstehen!!!!
Außerdem wird hier nichts neu erfunden, sondern lediglich eine _kleine_ Abfrage mit PHP gestaltet!
Gruß Bobby
Außerdem wird hier nichts neu erfunden, sondern lediglich eine _kleine_ Abfrage mit PHP gestaltet!
guter plan - also weiter im andern diskussionsast ;)
Moin
Ja, ich möchte das Rad neu erfinden :-)
Ich möchte kein Fertigscript nehmen, sondern verstehen, was mein Script macht!
Löblich Löblich,
Was wird ausgegeben, wenn du $_GET mit print_r() ausgibst?
Als nächste würde ich als Kontrolle $data[0] innerhalb der whileschleife (noch vor der If-Abfrage) ausgeben, um zu schauen, das die CSV korrekt eingelesen wird.
Poste bitte das Ergebnis (in abgekürzter Form)
Gruß Bobby
Wenn ich GET mit print_r ausgebe erscheint auch die Formulareingabe, genau wie beim echo.
Die CSV Datei wird auch korrekt eingegeben ... mache ich die Kontrolle gibt er die ausgewählten Arrays aus.
Mir steht ein Fragezeichen auf der Stirn geschrieben ;-)
Moin
Ja, ich möchte das Rad neu erfinden :-)
Ich möchte kein Fertigscript nehmen, sondern verstehen, was mein Script macht!
Löblich Löblich,
Was wird ausgegeben, wenn du $_GET mit print_r() ausgibst?
Als nächste würde ich als Kontrolle $data[0] innerhalb der whileschleife (noch vor der If-Abfrage) ausgeben, um zu schauen, das die CSV korrekt eingelesen wird.Poste bitte das Ergebnis (in abgekürzter Form)
Gruß Bobby