A.bau: csv- Dateien wer kann helfen ???

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                              1. du postest einmal die _komplette Seite_ mit allem php-gedoens + copy/paste der csv.datei und man kann Dir vielleicht nochmal weiterhelfen

                              2. ich gebe auf

                              Wilhelm

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

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

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

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

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

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

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

                  2. if ($name == $user and $pwd == $user_pw) {

                    ^^^

                    setze hier mal &&

                    Gruesse
                    Wilhelm

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