Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Spezielles txtfile erzeugen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Spezielles txtfile erzeugen

    Ich arbeite nun schon seit längerer Zeit hin und wieder mit PHP.

    Bei unserem aktuellen Shop bin ich jetzt aber auf ein Problem gestossen, das ich ohne Hilfe nicht lösen kann.

    Der Script soll spezielle Felder ( in unserem Fall Artikel ) aus der Datenbank auslesen und diese in ein Txt File schreiben.

    Zur kontrolle und genaueren anpassung habe ich das ganze erstmal als reine Browserausgabe gemacht. Nun sollte ich die Ausgabe in ein Txtfile schreibe ( CSV) und hab keine Ahnung wie ich das Anstelle.

    Anbei der Link und der Code

    http://www.onlineshop-ag.ch/garry/test.php

    PHP-Code:
    <?php

    $link 
    mysql_connect('bla''blub''blablub');
    $db_select = @ mysql_select_db (ups);

    $result mysql_query('SELECT * from `ISCAT`where SCID= 1');
    if (!
    $result) {
        die(
    'Ungültige Abfrage: ' mysql_error());
    }

    while (
    $row mysql_fetch_array($resultMYSQL_NUM)) {
               
    printf ('"%s","%s","'$row[0], $row[14]);
               
    $preisstr_replace(",",".",$row[5]);
               echo 
    round($preis*2,1)/2;
               
    printf ('","","http://www.onlineshop-ag.ch/shop_s/%s","http://www.onlineshop-ag.ch/shop/bilder/Artikel/%s_1.jpg","%s"<br/>',$row[21], $row[0], $row[15]);
    }

    //mysql_free_result($result);

    ?>
    Danke schonmal für die Hilfe und fröhliche Weihnachten

    Greetings Garry


  • #2
    Und wo ist jetzt das Problem? Ich schreib mal ne CSV-Datei:

    PHP-Code:
    $inhalt "0;acht;\"fuff zehn\"\n";
    $inhalt .= "1;zwei;\"oder drei\"\n";
    file_put_contents("datei.csv",$inhalt);

    // ODER 
    $inhalt[] = '0;acht;"fuff zehn"';
    $inhalt[] = '1;zwei;"oder drei"';
    file_put_contents("datei2.csv",implode("\n",$inhalt)); 
    und schon hab ich zwei gültige CSV-Dateien geschrieben

    Kommentar


    • #3
      Ok. soweit so klar.

      Aber ich steh halt immernoch auf der Leitung weil die ganze Ausgabe ne while Schleife ist. Wo bau ich da file_put_contents ein.

      In deinem Beispielt übergibst du ja statische werte als Ausgabe.

      Kommentar


      • #4
        Nicht dein Ernst oder?

        PHP-Code:
        while(blubb){
          
        $inhalt[] = '0;acht;"fuff zehn"';
        }
        file_put_contents("datei2.csv",implode("\n",$inhalt)); 

        Kommentar


        • #5
          Hmmm. Doch. Weil es so eben nicht fuktioniert

          PHP-Code:
          while ($row mysql_fetch_array($resultMYSQL_NUM)) {
                  
          $preis str_replace(",",".",$row[5]);
                  
          $preis2 round($preis*2,1)/2;
                  
          $inhalt[] = '"%s","%s","%s","","http://www.onlineshop-ag.ch/shop_s/%s","http://www.onlineshop-ag.ch/shop/bilder/Artikel/%s_1.jpg","%s"<br/>'$row[0], $row[14], $preis2$row[21], $row[0], $row[15];

          }

          file_put_contents("datei2.txt",implode("\n",$inhalt)); 


          // 2ter Versuch


          while ($row mysql_fetch_array($resultMYSQL_NUM)) {
                  
          $preis str_replace(",",".",$row[5]);
                  
          $preis2 round($preis*2,1)/2;
                  
          $inhalt[] = `'"%s","%s","%s","","http://www.onlineshop-ag.ch/shop_s/%s","http://www.onlineshop-ag.ch/shop/bilder/Artikel/%s_1.jpg","%s"<br/>', $row[0]$row[14]$preis2$row[21]$row[0]$row[15])`;

          }

          file_put_contents("datei2.txt",implode("\n",$inhalt)); 
          Bei der 2ten Variante mit `am Anfang und Ende der $Inhalt Definition erzeugt er mir wenigstens ein File. Auch wenn es leer ist.

          Ansonsten Sorry. Stehe im Moment ein wenig auf dem Schlauch weil ich doch schon relativ lange nix mehr in die Richtung gemacht hab.

          Ich sollte vielleicht noch erwähnen, das es total ca. 1900 Datensätze sind +/-

          Kommentar


          • #6
            wenn du es unbedingt in der Syntax machen willst, dann benutze sprintf

            Kommentar


            • #7
              Wenn ich mich nicht irre, überschreibst Du in Deiner while() Schleife jedesmal die Variable $Inhalt ?!
              So, das wenn er Dir eine Datei schreibt, nur das letzte darin stehen dürfte.
              Wenn Du es so schreibst:
              PHP-Code:
              $inhalt .= `'"%s","%s","%s","","http://www.onlineshop-ag.ch/shop_s/%s","http://www.onlineshop-ag.ch/shop/bilder/Artikel/%s_1.jpg","%s"<br/>', $row[0]$row[14]$preis2$row[21]$row[0]$row[15])`; 
              hängst Du mit jedem durchlauf der Schleife den Inhalt an die Variable $inhalt an und überschreibst sie nicht einfach.

              Schlagt mich wenn ich mich irre, aber so mach ich das immer

              V.G.
              Frank-ae
              Mein Projekt: www.my-matrix.de

              Kommentar


              • #8
                Wenn ich mich nicht irre, überschreibst Du in Deiner while() Schleife jedesmal die Variable $Inhalt ?!
                du irrst... das [] erzeugt automatisch einen numerischen Array-Key

                Kommentar


                • #9
                  Danke für den Hinweis cycap,

                  Aber dann darf sich McDeath nicht wundern, weil er ja "nur" $inhalt in die Datei schreiben will, wenn ich jetzt ein echo auf $inhalt mache, bekomme ich als Ergebnis: Array, wo her soll denn nun file_put_contents() wissen was es schreiben soll, ohne Konkrete Angabe von $inhalt ?!

                  das ganze vieleicht so lösen:


                  PHP-Code:
                  for ($i = (count(array($inhalt); $i 0$i --)
                  {
                      
                  file_put_contents("datei2.txt",implode("\n",$inhalt[$i])); 

                  V.G.
                  Frank-ae

                  Mein Projekt: www.my-matrix.de

                  Kommentar


                  • #10
                    Zitat von frank-ae Beitrag anzeigen
                    Danke für den Hinweis cycap,

                    Aber dann darf sich McDeath nicht wundern, weil er ja "nur" $inhalt in die Datei schreiben will, wenn ich jetzt ein echo auf $inhalt mache, bekomme ich als Ergebnis: Array, wo her soll denn nun file_put_contents() wissen was es schreiben soll, ohne Konkrete Angabe von $inhalt ?!

                    das ganze vieleicht so lösen:


                    PHP-Code:
                    for ($i = (count(array($inhalt); $i 0$i --)
                    {
                        
                    file_put_contents("datei2.txt",implode("\n",$inhalt[$i])); 

                    V.G.
                    Frank-ae

                    nein, der teil stimmt schon, denn er schreibt nicht $inhalt sondern implode("",$inhalt);
                    und ein implode() auf $inhalt[$i] macht keinen wirklichen sinn, da du implode nur auf arrays machen kannst.
                    Das Problem liegt er darin das es %s verwendet aber kein sprintf()
                    Ich würde das ohne sprintf() lösen und einfach
                    $inhalt[] = $var1.' muh '.$var2;
                    oder so machen, dann dürfte es auch gehn.

                    wenn wir grad dabei sind noch ein kleiner tipp: ich würde definitiv MYSQL_ASSOC zurückgeben lassen, da du bei $row['name'] weißt was es ist, bei $row[0] aber keine ahnung hast. aber das nur so nebenbei ...

                    mfg

                    Kommentar


                    • #11
                      endlich sagt mal jemand was ich denke^^

                      Kommentar


                      • #12
                        Zitat von BlackWolf Beitrag anzeigen
                        denn er schreibt nicht $inhalt sondern implode("",$inhalt);
                        und ein implode() auf $inhalt[$i] macht keinen wirklichen sinn, da du implode nur auf arrays machen kannst.
                        Verdamt Du hast recht, ich habe das implode() überlesen, ich glaube ich geh nochmal in die Grundlagen... back to basics...



                        V.G.
                        Frank - ae
                        Mein Projekt: www.my-matrix.de

                        Kommentar


                        • #13
                          Nunja. Es war für das Problem der falsche Lösungsansatz

                          statt mysql_fetch_array hätte ich mysQL_fetch_assoc nehmen sollen.

                          PHP-Code:
                          <?php
                          $db_select 
                          = @ mysql_select_db (onlineshop);

                          $result mysql_query('SELECT * from `ISCAT`where SCID= 1');
                          if (!
                          $result) {
                              die(
                          'Ungültige Abfrage: ' mysql_error());
                          }

                          while (
                          $row mysql_fetch_assoc($result))
                            {
                              
                          $preis str_replace(",",".",$row["PRICE"]);
                              
                          $preis2 round($preis*2,1)/2;
                              
                          $inhalt[] = '"'.$row['ITEMID'].'","'.$row['idescription'].'","'.$preis2.'","http://www.onlineshop-ag.ch/shop_s/'.$row['link'].'","http://www.onlineshop-ag.ch/shop/bilder/Artikel/'.$row['ITEMID'].'_1.jpg","'.$row['IZUSATZ'].'"';

                          }
                          $inhalt str_replace(array("ä","ü","ß","Ä","Ü","Ö"),array("ä","ü","","ö","ß","Ä","Ü","Ö",),$inhalt);
                          file_put_contents("datei2.txt","$titelzeile\n".implode("\n",$inhalt));
                          ?>
                          So ein kleiner Umdenker wirkt wunder.

                          So funktioniert es perfekt und ich kann die Ausgabefiles jederzeit an neue Gegebenheiten anpassen

                          Kommentar

                          Lädt...
                          X