Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mehrere Abfragen in CSV speichern

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Mehrere Abfragen in CSV speichern

    Hallo zusammen,

    habe ein kleines Problem.
    Ich kann über mein Formular zu bestimmten Artikelnummer die ausgewählten Attribute (Name, EAN, etc..) suchen.

    Diese möchte ich nun in eine CSV exportieren.
    Leider übernimmt er immer nur den letzten Datensatz (hängt mit der foreach für die Abfrage zusammen?!).

    Ich denke, dass ich einfach den Wald vor lauter Bäumen nicht erkenne und das Problem wahrscheinlich auf der Hand liegt und würde mich freuen, falls jemand einen Tipp hat!

    Der Code für die Abfrage:
    PHP-Code:
    <?PHP
      
    if(isset($_POST['produktinfo']))$_SESSION['produktinfo'] = $_POST['produktinfo'];

    if(isset(
    $_POST['suche2']) && isset($_POST['suche2']))
    {
        if(isset(
    $_SESSION['produktinfo']))
        {  
            
    $daten implode(","$_SESSION['produktinfo']);
        }
     
        if (!isset(
    $_SESSION['artikel'])) $_SESSION['artikel']=array();

        if(
    in_array($_POST['suchfeld'], $_SESSION['artikel']))    
        {
            echo 
    "Das Produkt ist bereits vorhanden!"
        }
            else 
            {
                
    $_SESSION['artikel'][] = $_POST['suchfeld'];
            }
     
        
    $suche $_SESSION['artikel']; //in $suche ist ein Array aus den Artikelnummern des Suchfeldes
        
        
    if(isset($suche) && !empty($suche))
            {
            
    //Tabelle wird erstellt
            
    echo "<table border=\"1\">";
              
            
    //Tabellenspalten werden erstellt
            
    foreach($_SESSION['produktinfo'] as $info)
            {
                echo 
    "<th>$info</th>";
            }
            echo 
    "<th>L&ouml;schen</th>";
            echo 
    "</tr>";
             
                foreach(
    $suche as $artikel)
                {
                    
    $sql="SELECT $daten FROM tbl_basisdaten WHERE Artikelnummer LIKE'".mysqli_real_escape_string($conn,$artikel)."' OR Artikelname LIKE'".mysqli_real_escape_string($conn,$artikel)."'";

                    
    //Ausgabe Tabelle erzeugen
                    
    $result=mysqli_query($conn,$sql); 
                           
                    
    $row=mysqli_fetch_array($resultMYSQLI_ASSOC); 
                    
                    foreach(
    $row as $feld=>$value)
                    {
                        echo 
    "<td>$value</td>";
                        
    next($row); 
                    }
                    echo 
    "<td align=\"center\"><input type=\"checkbox\" name=\"loeschen[]\" value=$artikel></td>";
                    echo 
    "</tr>";
                }
                echo 
    "</table>";
            }
            
     else if(!isset(
    $suche) || empty($suche))
     {
         echo
    "Bitte geben Sie eine Artikelnummer ein";
         
     }
     
    }
    ?>


    Und der Script für den Export (erstellt nach Tutorials bei Youtube und diversen Websites):
    PHP-Code:
    else if(isset($_POST['export1']) && isset($_POST['export1']))
        {
            
            
            
    $conn=mysqli_connect('localhost''administrator''administrator');
            
    $db=mysqli_select_db($conn,"db_produktdatenbank");
            
            
            
            if(isset(
    $_SESSION['produktinfo']))
            {  
                
    $daten implode(","$_SESSION['produktinfo']);
            }
             
         
            
    $suche $_SESSION['artikel']; //in $suche ist ein Array aus den Artikelnummern des Suchfeldes
            
                
    foreach($suche as $artikel)
                {
                    
    $sql="SELECT $daten FROM tbl_basisdaten WHERE Artikelnummer LIKE'".mysqli_real_escape_string($conn,$artikel)."' OR Artikelname LIKE'".mysqli_real_escape_string($conn,$artikel)."'";
                
                    
    //Ausgabe Tabelle erzeugen
                    
    $result=mysqli_query($conn,$sql); 
               
                    
    $row=mysqli_fetch_array($resultMYSQLI_ASSOC);
                }   
                
    //var_dump($row); 
               
            
                    
    $filename 'uploads/'.strtotime("now").'.csv';
                    
    $fp  fopen($filename,"w");
                    
    $seperator "";
                    
    $comma "";        
      
                    foreach(
    $row as $name => $value)
                    {
                        
    $seperator .= $comma '' .str_replace('','""',$name);
                        
    $comma ",";
                    }
            
                    
    $seperator .= "\n";
               
                    
    fputs($fp,$seperator);
            
                    
    mysqli_data_seek($result0);
                    
                    while(
    $row mysqli_fetch_assoc($result))
                    {
                        
    $seperator "";
                        
    $comma "";
                        
                        foreach(
    $row as $name => $value)
                        {
                            
    $seperator .= $comma '' .str_replace('','""',$value);
                            
    $comma ",";
                            
                        }
            
                        
    $seperator .= "\n";
               
                        
    fputs($fp,$seperator);
                    }
                        
    fclose($fp);
                
            }
           
    ?> 
    Ich weiß, es wird wohl einige gravierende Fehler geben...
    Für Kritik bin ich immer gerne offen, da ich noch nicht lange in der Materie bin!

  • #2
    Hallo, für konkrete Hilfe wäre es stets hilfreich, wenn du uns die entsprechende Fehlermeldung mit auf den Weg gibst, die dir PHP liefert.

    Kommentar


    • #3
      Hallo Phpyton,

      es wirft mir keine Fehlermeldung aus. Die CSV wird ohne Murren und Knurren erzeugt.
      Nur steht lediglich der letzte Datensatz, sprich die Daten der letzten gesuchten Artikelnummer in der CSV. (Die Spaltenüberschriften werden korrekt übernommen)

      Gruß Jan

      Kommentar


      • #4
        Debuggen wäre auch hier eine gute Option.

        - http://php-de.github.io/#debugging
        - http://phpforum.de/forum/showthread.php?t=216988

        Schau dir bei Gelegenheit mal fputcsv an. Du machst das glaube ich reichlich umständlich.

        - http://php.net/manual/en/function.fputcsv.php

        Was soll das hier tun?

        PHP-Code:
        str_replace('','""',$value
        Der Unterschied zwischen gesetzt und GESETZT?

        PHP-Code:
        if(isset($_POST['export1']) && isset($_POST['export1'])) 

        Kommentar


        • #5
          Vielen herzlichen Dank mermshaus!

          fputcsv hat sofort funktioniert! da habe ich viel zu umständlich gedacht und gemacht
          Zieht nun alle Datensätze, die vorher gesucht wurden.


          PHP-Code:
          else if(isset($_POST['export1']))
              {
             
                  
          $conn=mysqli_connect('localhost''administrator''administrator');
                  
          $db=mysqli_select_db($conn,"db_produktdatenbank");
                  
          $filename 'uploads/'.strtotime("now").'.csv';
                  
          $fp=fopen($filename,'w');
                  
                  if(isset(
          $_SESSION['produktinfo']))
                  {  
                      
          $daten implode(","$_SESSION['produktinfo']);
                  }
                   
               
                  
          $suche $_SESSION['artikel']; //in $suche ist ein Array aus den Artikelnummern des Suchfeldes
                  
                  
          foreach($suche as $artikel)
                  {
                      
          $sql="SELECT $daten FROM tbl_basisdaten WHERE Artikelnummer LIKE'".mysqli_real_escape_string($conn,$artikel)."' OR Artikelname LIKE'".mysqli_real_escape_string($conn,$artikel)."'";
                      
                      
                      
          $result=mysqli_query($conn,$sql); 
                      
          $row[]=mysqli_fetch_array($resultMYSQLI_ASSOC);
                      
                      
                  }   
                      
          $list=$row;
                      
                      
          fputcsv($fp,$_SESSION['produktinfo']);
                      
                      foreach(
          $list as $fields => $value)
                      {
                          
          fputcsv($fp,$value);
                      }
                  
          fclose($fp);
              } 

          Mit string replace war ich der Meinung, die Daten in Anführungszeichen zu setzen für die CSV-Datei.

          Gesetzt und Gesetzt hab ich bereits abgeändert...war aus einem anderen File kopiert als ich anscheinend noch nicht genug Kaffee intuss hatte

          Trotzdem nochmal ein riesiges Dankeschön auch bezüglich der links!

          Kommentar

          Lädt...
          X