csv- Dateien wer kann helfen ???
A.bau
- php
Hi,
Ich brauche dringend Hilfe zum Thema csv-dateien. ich weiß nicht wie viel ich schon ausprobiert habe, aber ich bleibe immer an der selben Stelle hängen.
Die Datei sieht wie folgt aus:
ID | name | nachname| adresse ....
ich kriege es zwar hin die Datei komplett auszulesen, also alle Einträge. Ich möchte aber nur ein ganz bestimmtes Feld über einen Vergleich ausgeben.
z.b. wenn der eingetragene name = $name ist anzeigen
Wer hat da eine Idee und kann mir helfen?
Mit mysql wäre das keine Problem, es soll aber eine Textdatei als DB dienen.
Danke in voraus
Gruss a.bau
Hi,
Ich brauche dringend Hilfe zum Thema csv-dateien. ich weiß nicht wie viel ich schon ausprobiert habe, aber ich bleibe immer an der selben Stelle hängen.
Die Datei sieht wie folgt aus:
ID | name | nachname| adresse ....
ich kriege es zwar hin die Datei komplett auszulesen, also alle Einträge. Ich möchte aber nur ein ganz bestimmtes Feld über einen Vergleich ausgeben.
z.b. wenn der eingetragene name = $name ist anzeigen
Ist 1.)eine Zuweisung und zwei Varaibalen gleichen Namens
Datei:
$ID | $name | $nachname| $adresse
if($name == $search)
{ ^^
das andere
}
Gruesse
Wilhelm
Ist 1.)eine Zuweisung und zwei Varaibalen gleichen Namens
Datei:
$ID | $name | $nachname| $adresse
if($name == $search)
{ ^^
das andere
}
ok. das ist schon verständlich, aber wie mache ich aus den Eintragungen Variablen? Das ist nämlich meine größtes Problem.
ich kreige das einfach nicht hin.
Gruss A.
Moin!
ok. das ist schon verständlich, aber wie mache ich aus den Eintragungen Variablen? Das ist nämlich meine größtes Problem.
ich kreige das einfach nicht hin.
Datei zeilenweise einlesen. Dann ist eine Zeile in einer... oh Wunder... Variablen drin. :)
Dann mit Stringfunktionen diese Zeichenkette auseinandernehmen und anderen Variablen zuweisen.
Ansatzpunkte sind die Funktionen:
explode()
split()
strpos()
strrpos()
strrchr()
substr()
stristr()
strstr()
ereg()
eregi()
Die machen alle irgendwas mit Strings und finden irgendwelche Bestandteile oder zerhacken die Zeichenkette an bestimmten Zeichen. Genau das willst du.
Funktionsbeschreibungen gibts bei http://www.selfphp.info in Kurzform oder bei http://www.php.net/docs.php in ausführlich mit englischen Userkommentaren. Die Befehlsbeschreibung ist aber in vielen Sprachen verfügbar.
- Sven Rautenberg
ok. das ist schon verständlich, aber wie mache ich aus den Eintragungen Variablen? Das ist nämlich meine größtes Problem.
ich kreige das einfach nicht hin.
$collect=file("csvdatei.csv");
for ($i=0;$i<count($collect);$i++)
{
$test=explode(";",$collect[$i]);
list($id,$name,$blabla, .......)=$test;
.....
{
Unter <list> traegst Du Deine Feldwerte (versehen mit $) ein und schon hast Du die Variablen. Solltest Du statt ";" einen anderen Separator verwenden, natuerlich entsprechend anpassen.
Gruesse
Wilhelm
$collect=file("csvdatei.csv");
for ($i=0;$i<count($collect);$i++)
{
$test=explode(";",$collect[$i]);
list($id,$name,$blabla, .......)=$test;
.....
{
Unter <list> traegst Du Deine Feldwerte (versehen mit $) ein und schon hast Du die Variablen. Solltest Du statt ";" einen anderen Separator verwenden, natuerlich entsprechend anpassen.
das hat geklappt, danke für die Hilfe.
Aber leider funktioniert das mit den vergleichen nicht.
if($name == $search){
Gruss A.Bau
Hi,
das hat geklappt, danke für die Hilfe.
Aber leider funktioniert das mit den vergleichen nicht.if($name == $search){
Evtl. liegt es an Gross/Kleinschreibung, dann http://www.php.net/manual/de/function.strtolower.php,
ansonsten Dateiinhalt und Script posten.
Gruesse
Wilhelm
Evtl. liegt es an Gross/Kleinschreibung, dann http://www.php.net/manual/de/function.strtolower.php,
ansonsten Dateiinhalt und Script posten.
Der Dateiinhalt beschränkt sich für das Testen nur auf
| name1| pwd1| | | | |
| name2| pwd2| | | | |
alle anderen felder sind leer.
Das ist das Script, welches die aus einem Formular übergebenen Daten mit denen in der Datei vergleichen soll. Aus dem Formular werden die $name und $pwd übergeben.
if ($login) {
$collect=file("user.txt", "r");
for ($i=0;$i<count($collect);$i++) {
$test=explode("|",$collect[$i]);
list($id,$user,$user_pw,$name,$vorname,$strasse,$plz,$ort)=$test;
}
if ($name == $user and $pwd == $user_pw) {
echo "Sie sind eingeloggt";
}
else {
echo "Sie sind nicht registriert";
}
}
was ist falsch??
Gruss A.bau
Moin!
Der Dateiinhalt beschränkt sich für das Testen nur auf
| name1| pwd1| | | | |
| name2| pwd2| | | | |
^ ^
Da sind Leerzeichen. Die sind im Usernamen- und Paßwort-Extrakt aus der Datei natürlich mit drin. Vielleicht sollten die besser da weg. :)
was ist falsch??
- Sven Rautenberg
Moin!
Der Dateiinhalt beschränkt sich für das Testen nur auf
| name1| pwd1| | | | |
| name2| pwd2| | | | |
^ ^
Da sind Leerzeichen. Die sind im Usernamen- und Paßwort-Extrakt aus der Datei natürlich mit drin. Vielleicht sollten die besser da weg. :)
Hallo Sven,
ich habe die Leerzeichen entfernt, es klappt aber immer noch nicht.
Obwohl die Daten doch jetzt identisch sein müssten, erhalte ich die Meldung "sie sind nicht registriert"
if ($name == $user and $pwd == $user_pw) {
echo "Sie sind eingeloggt";
}
else {
echo "Sie sind nicht registriert";
}
Gibt es noch eine andere Möglichkeit die Variablen zu vergleichen oder stimmt etwas an der IF-Anweisung nicht?
Vielen Dank im Voraus
A.bau
Moin!
Hallo Sven,
ich habe die Leerzeichen entfernt, es klappt aber immer noch nicht.
Obwohl die Daten doch jetzt identisch sein müssten, erhalte ich die Meldung "sie sind nicht registriert"
if ($name == $user and $pwd == $user_pw) {
echo "Sie sind eingeloggt";
}
else {
echo "Sie sind nicht registriert";
}
Gibt es noch eine andere Möglichkeit die Variablen zu vergleichen oder stimmt etwas an der IF-Anweisung nicht?
Klammern setzen wäre mein Favorit:
if (($name == $user) and ($pwd == $user_pw)) {
Ich kann mir nie merken, welche Verknüpfung denn jetzt Vorrang vor den anderen Verknüpfungen hat, deshalb setze ich bei logischen Verknüpfungen (and, or, not,...) IMMER Klammern um die Elemente. Dann bin ich relativ sicher, daß es so funktioniert, wie ich denke.
- Sven Rautenberg
Moin!
» Klammern setzen wäre mein Favorit:
if (($name == $user) and ($pwd == $user_pw)) {
Ich kann mir nie merken, welche Verknüpfung denn jetzt Vorrang vor den anderen Verknüpfungen hat, deshalb setze ich bei logischen Verknüpfungen (and, or, not,...) IMMER Klammern um die Elemente. Dann bin ich relativ sicher, daß es so funktioniert, wie ich denke.
Hi,
ich bin am verzweifeln, ich kan das drehen wie ich will, der Vergleich klappt einfach nicht. Hab Klammern gesetzt, auch mal die Variablen getauscht $user == $name immer noch die selbe Meldung.
Ich habe aber festgestellt das ein Wert der übegebenen Variablen bei auslesen der Datei verloren geht. Die $name ist nicht mehr vorhanden nur noch $pwd. und deshlab klappt das auch nicht.
Aber woran liegt das?
A.Bau
Ich habe aber festgestellt das ein Wert der übegebenen Variablen bei auslesen der Datei verloren geht. Die $name ist nicht mehr vorhanden nur noch $pwd. und deshlab klappt das auch nicht.
Aber woran liegt das?
Noch mal ich.
Ich hab den Fehler der verlorenen Variablen gefunden, aber trotzdem habe ich immer noch die Meldung "sie sind nicht registriert".
if (($log_name == $user) && ($pwd == $user_pw)) {
echo "Sie sind eingeloggt";
}
else {
echo "Sie sind nicht registriert";
}
muß ich vielleicht die Variablen anderes vergleichen ???
if (($log_name == $user) && ($pwd == $user_pw)) {
echo "Sie sind eingeloggt";
}
else {
echo "Sie sind nicht registriert";
}
muß ich vielleicht die Variablen anderes vergleichen ???
Hi,
Dein Problem ist folgendes:
Du liest vermutlich immer die ganze Datei ein, also ist Dein Ergebnis nach dem letzten Satz _immer falsch_ (ausser es ist die gewuenschte ID)
Folgender Code funktioniert: (Man koennte ihn vielleicht eleganter machen mit Verschachtelungen und <break> )
Die Datei wird gelesen, wenn das Feld LOGIN gleich Name ist, werden Name und Kennwort in einer Variablen gespeichert. Diese kannst Du dann auf Fehler abfragen (falsch oder keine EIngabe)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Unbenannt</title>
</head>
<body>
<?
if($sub==1)
{
$name1="";
$kennwort1="";
$collect=file("pwd.csv");
for ($i=0;$i<count($collect);$i++)
{
$test=explode(";",$collect[$i]);
list($name,$kennwort)=$test;
if($name == $login)
{
$kennwort1=$kennwort;
$name1=$name;
}
}
if($name1!="" && $kennwort1==$pwd) echo"richtig";
if($name1=="") {
echo"keine gueltige ID";
$sub="";
}
if($name1!="" && $kennwort1!=$pwd) {
echo"falsch";
$sub="";
}
}
?>
<?
if($sub!=1)
{
echo"<form method="post" action=$PHP_SELF>";
echo"<input type="hidden" name="sub" value="1">";
echo"<P>LogIn <INPUT type="text" name="login" size="35"></P>";
echo"<P>Passwort <INPUT type="password" name="pwd" size="35"></P>";
echo"<P><INPUT name=submit type=submit value="Process">";
echo"</form>";
}
?>
</body>
</html>
Gruesse
Wilhelm
Hi,
Die Datei wird gelesen, wenn das Feld LOGIN gleich Name ist, werden Name und Kennwort in einer Variablen gespeichert. Diese kannst Du dann auf Fehler abfragen (falsch oder keine EIngabe)
Ich habe dein Script auf meine Datei angepaßt und obwohl die Variablen gleich sind erhalte ich als Ausgabe "falsch".
gruss
Hi
Ich habe dein Script auf meine Datei angepaßt und obwohl die Variablen gleich sind erhalte ich als Ausgabe "falsch".
Wie gesagt: auf meinem Rechner funktioniert das so.
Wir haben jetzt 2 Moeglichkeiten:
du postest einmal die _komplette Seite_ mit allem php-gedoens + copy/paste der csv.datei und man kann Dir vielleicht nochmal weiterhelfen
ich gebe auf
Wilhelm
- du postest einmal die _komplette Seite_ mit allem php-gedoens + copy/paste der csv.datei und man kann Dir vielleicht nochmal weiterhelfen
Hi,
Ok letzter Versuch sonst geb ich auch auf, ist mir nämlich auch alles sehr rätselhaft.
Hier das angepasste script
if($sub==1){
$name1="";
$kennwort1="";
$collect=file("user.txt");
for ($i=0;$i<count($collect);$i++)
{
$test=explode("|",$collect[$i]);
list($name,$kennwort)=$test;
if($name == $login)
{
$kennwort1=$kennwort;
$name1=$name;
}
}
echo "Name: $name <br> Passwort: $kennwort<br>"; //Datentest
if($name1!="" && $kennwort1==$pwd) echo"richtig";
if($name1=="") {
echo"keine gueltige ID";
$sub="";
}
if($name1!="" && $kennwort1!=$pwd) {
echo"falsch";
$sub="";
}
}
und der Datei Inhalt sieht so aus (habe ich reduziert auf namen und passwort)
name1|pwd1
name2|pwd2
name3|pw3
Bauer|twity
Eine ID hab ich noch nicht festgelegt.
A.Bau
Hi,
und der Datei Inhalt sieht so aus (habe ich reduziert auf namen und passwort)
name1|pwd1
name2|pwd2
name3|pw3
Bauer|twity
Wenn es so in der Datei steht, kann es nicht funktionieren, da nach Passwort kein Limiter gesetzt ist. Entweder einen setzen
name1|pwd1|
oder mit http://www.php.net/manual/de/function.chop.php die Leerstellen entfernen.
"pwd1 " ist nicht gleich mit "pwd1"
Ich meinte mich deutlich ausgedrueckt zu haben. Einen copy/paste von Deiner bestehenden user.txt und den kompletten html-Code inkl. Formulardefinition. Ansonsten ergehen wir uns nur noch im Raetselraten.
Bei mir funktioniert der kleine Popanz, wenn es bei Dir nicht geht, muss irgendwas an Deinen Dateien falsch sein. Und das wollte ich eigentlich sehen, nicht was Du hier schreibst.
Leicht verstimmt
Wilhelm
echo "Name: $name <br> Passwort: $kennwort<br>"; //Datentest
Diese Ausgabe ist Quatsch! Du gibst den letzten Satz der Datei aus. ;-)
echo "Name: $name1 <br> Passwort: $kennwort1<br>"; //Datentest
ware richtiger
Hi,
und der Datei Inhalt sieht so aus (habe ich reduziert auf namen und passwort) -- ALLE DATEN WURDEN GELÖSCHT UND NEU EINGEBEN ÜBER UNTENSTEHENDES SCRIPT
name1|pwd1
name2|pwd2
name3|pw3
Bauer|twity -- das ist past und copy aus der user.txt
Leicht verstimmt
Sorry war nicht meine absicht
hier das Formular für den Login, habe es genauso übernommen
if($sub!=1)
{
echo"<form method="post" action=$PHP_SELF>";
echo"<input type="hidden" name="sub" value="1">";
echo"<P>LogIn <INPUT type="text" name="login" size="35"></P>";
echo"<P>Passwort <INPUT type="password" name="pwd" size="35"></P>";
echo"<P><INPUT name=submit type=submit value="Process">";
echo"</form>";
}
Das Script zum Eintragen in die user.txt
echo "<form action=admin.php method=post>";
echo "<table width='50%'>\n";
echo "<tr><td>Loginname: </td><td><input type='text' name='user' size='10' maxlength='10'></td></tr>\n";
echo "<tr><td>Passwort: </td><td><input type='text' name='user_pw' size='10' maxlength='10'></td></tr>\n";
echo "<tr><td><input type='submit' name='lesen' value='Auslesen'></td><td><input type='submit' name='submit' value='Anlegen'></td></tr>\n";
echo "</table></form>\n";
if ($submit) {
$str="$user|$user_pw \n";
$fp=fopen("user.txt", "a+") ;
fwrite($fp, $str);
print "USER: $user, <br> PASSWORT: $user_pw wuden eingetragen \n <a href='admin.php'>back</a>";
fclose($fp);
}
Gruss A.Bau
Hi,
name1|pwd1|
das war der Fehler der limiter hinter der letzten Eintragung fehlte es klappt nun endlich.
Ein ganz dickes danke, das du mit mir so viel geduld hattest. ;)
Gruss A.Bau
Hallo,
das war der Fehler der limiter hinter der letzten Eintragung fehlte es klappt nun endlich.
Ein ganz dickes danke, das du mit mir so viel geduld hattest. ;)
*demhimmelseidank* :-)
Gruesse
Wilhelm
Hi
hier noch ein Zusatz, ich habe mir die Variablen anzeigen lassen, die übergeben werden und die ausgelesen werden
sieht dann so aus
aus dem Formular: Name: Bauer Passwort: twity
aus der Datei: Name: Bauer Passwort: twity
falsch
Meiner Meinung nach sind die doch identisch. eigentlich müßte richtig stehen.
Gruss
if ($name == $user and $pwd == $user_pw) {
^^^
setze hier mal &&
Gruesse
Wilhelm
if ($name == $user and $pwd == $user_pw) {
^^^
setze hier mal &&
Gruesse
Wilhelm
Hallo Wilhelm,
das hab ich auch schon gemacht, funktioniert trotzdem nicht. Eine der Vergleichsvariablen aus dem Formular geht beim auslesen der Datei verloren und ich weiß nicht warum?
Gruss A.Bau