![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 13:12
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ß
Die folgende Nachricht zum Thema stammt von: suit, 19. 05. 2008, 13:17
»» Ich wäre sehr für Hilfe verbunden,
FIND
»» while ($data = fgetcsv ($csvopen, 1000, ",")) {
INSERT AFTER
echo 'debugausgabe: ' . $data[0] . '<br />';
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 13:23
»» »» 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
Die folgende Nachricht zum Thema stammt von: dedlfix, 19. 05. 2008, 13:35
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";
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 13:49
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";a
Die folgende Nachricht zum Thema stammt von: suit, 19. 05. 2008, 14:01
»» 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
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 14:07
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 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
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 14:20
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
»»
Die folgende Nachricht zum Thema stammt von: Bobby, 19. 05. 2008, 14:47
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
--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 15:14
Sehr, sehr guter Tipp! Das wars :-)
Vielen Dank dafür!
»»
»» also: if (stristr ( $data[0], $ctisearch ))
»»
»» wäre die geeignete Abfrage.
Die folgende Nachricht zum Thema stammt von: Bobby, 19. 05. 2008, 15:29
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
--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
Die folgende Nachricht zum Thema stammt von: suit, 19. 05. 2008, 14:21
»» »» »» 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()
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 15:11
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 wird
»»
»» data: "foobar "
»» cti: "foobar"
»» das würde auch nicht zutreffen - für solche fälle empfiehlt sich trim()
»»
Die folgende Nachricht zum Thema stammt von: suit, 19. 05. 2008, 15:20
»» 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
Die folgende Nachricht zum Thema stammt von: dedlfix, 19. 05. 2008, 14:26
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";
Die folgende Nachricht zum Thema stammt von: Andreas, 19. 05. 2008, 13:45
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
Die folgende Nachricht zum Thema stammt von: Bobby, 19. 05. 2008, 14:06
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
--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 14:08
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
»»
Die folgende Nachricht zum Thema stammt von: suit, 19. 05. 2008, 14:14
»» »» Außerdem wird hier nichts neu erfunden, sondern lediglich eine _kleine_ Abfrage mit PHP gestaltet!
guter plan - also weiter im andern diskussionsast ;)
Die folgende Nachricht zum Thema stammt von: Bobby, 19. 05. 2008, 14:14
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
--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
Die folgende Nachricht zum Thema stammt von: acardi, 19. 05. 2008, 14:20
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
»»
© 1998-2008
Impressum, Software: Classic Forum