CSV/XML Produktdaten

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
isi1985
Mitglied
Beiträge: 5
Registriert: 28.03.2013 10:20

CSV/XML Produktdaten

Beitrag von isi1985 »

Hallo Leute,

ich suche schon seit Wochen nach einem Script oder einem Tutorial, wie ich "CSV/XML Produktdaten" von meinen Advertisern, auf meine Homepage bekomme. Ich bin auch bereit für Support zu Zahlen.

Leider vergeblich, egal auf welche Forenbeiträge (die schon einige Jahre alt waren, zudem die scripte fehlerhaft waren(oder ich habe es nicht hinbekommen)) ich gestoßen bin, wirklich weiter gekommen bin ich nicht. Ich habe wirklich viele Foren durchsucht, viele Wörterkombinationen in Google eingegeben, es ist einfach zum verzweifeln...

Vorab möchte ich sagen, das ich Html- und css Kenntnisse habe.

In phpmyadmin Tabellen erstellen, in PHP mit Datenbanken eine Verbindung aufbauen, habe ich hinbekommen.

Auch habe ich es geschafft eine CSV Datei in eine Datenbanktabelle einzuspielen und den Inhalt auf meine Homepage zu bekommen. (Leider fehlerhaft, url der Bilder wurden angezeigt, statt die Bilder selbst)

Nun zu meinen Fragen:

1. Wie bekomme ich es hin, den gesamten Inhalt einer CSV Datei (Größer als 2MB) über PHP in meine Datenbank einzuspielen?

2. Den gesamten Inhalt einer CSV Datei, auf meine Homepage auslesen, sodass alles (inkl. der Bilder) angezeigt wird.

3. Ich einen/mehrere Filter einbauen kann (Sortieren nach...) und per css den Inhalt auch formatieren kann.

Ich bitte Euch um Hilfe, ich bin schon so verzweifelt :cry: . Ich zahle auch gerne für guten Support.

Gruß

Isi
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: CSV/XML Produktdaten

Beitrag von cYbercOsmOnauT »

Hi auch,

Deine Frage ist leider viel zu allgemein gehalten als das hier eine 100%ige Lösung angeboten werden kann. CSV (Comma Separeted Values) und XML (eXtendible Markup Language) sind zwei grundverschiedene Sachen. So wie ich Dich verstehe, sind die Daten die Du hast in einer CSV Datei. Also die Werte darin sind durch Kommata getrennt.

Man kann phpMyAdmin sagen, dass er bei einer bestimmten Menge an Datensätzen aufhören soll um den Max Execution Time Exceeded Fehler zu umgehen. Mit Linux könntest Du die CSV Datei simpel mit dem Befehl "split" in 1000-Zeilen Stücke splitten. Wahlweise nimmst Du MySQL Dumper welcher große Datensätze automatisch Stück für Stück einliest.

Wie Du die Daten nun angezeigt bekommst kann ich Dir nicht sagen. Dazu müssten wir die Struktur Deiner Daten sehen. Aber wenn Du schreibst, dass nur die URL und nicht das Bild angezeigt wird, dann hast Du den Pfad zum Bild einfach "hart" ausgegeben und nicht innerhalb des src Atriibuts eines <img> Tags.

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
isi1985
Mitglied
Beiträge: 5
Registriert: 28.03.2013 10:20

Re: CSV/XML Produktdaten

Beitrag von isi1985 »

Hallo Tekin,

ja es war schon etwas allgemein gehalten. Also hier mal meinen derzeitigen stand:

Code: Alles auswählen

<?php
      $seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
   {
   $seite = 1;
   }
   
include("head.php");

//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 15;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
                       
$abfrage = mysql_query("SELECT * FROM `teste` LIMIT $start, $eintraege_pro_seite ");
          
          /* solang mysql_fetch_assoc() eine Zeile (row) aus der Resource "ziehen" kann ist $row jeweils eine Zeile aus der Datenbank. Und es werden nun einige Elemente des Arrays ausgegeben */
while($row = mysql_fetch_assoc($abfrage)) {
echo "  <li class='item'> Artikelnr.: $row[ArtNumber] <a href='$row[Deeplink1]'><img src='$row[Img_url]'    max-width='140px' height='230px' ></a><br>   <big><b>$row[Title]</big></b><br>   $row[DisplayPrice]<br> 
   $row[ProductCategoryName]<br>    
   $row[Stil]  $row[NEU]  <a href='$row[Img_url]'> klicke hier</a>   <a href='$row[ImgUrl_seite]'>von seite</a> <a href='$row[ImgUrl_oben]'>von oben</a> <a href='$row[ImgUrl_unten]'>von unten</a>
  $row[Geschlecht] </a>                            
           
          ";     
}

$result = mysql_query("SELECT ArtNumber FROM `teste`");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";


//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($seite == $b)
      {
      echo "  <b>$b</b> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <a href=\"?seite=$b\">$b</a> ";
      }


   }
echo "</div>";
 
Es ist noch nicht richtig formatiert. Könntest du mir vielleicht sagen wie ich ("gehe zurück" und "gehe vorwärts") und ("erste Seite" und "letzte Seite") einbaue?

Mit dem Mysql Dumper habe ich es versucht, hat irgendwie nicht geklappt?

Ich bekomme es einfach nicht hin CSV Dateien Größer als 2mb auf die DB einzuspielen.

Der letzte Schritt wäre noch Filtermöglichkeiten einzubauen.

Ich danke dir sehr für deine Antwort.

Gruß

Ismail
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: CSV/XML Produktdaten

Beitrag von cYbercOsmOnauT »

Um die letzte Seitenzahl zu ermitteln musst Du wissen wieviele Seiten es gibt. Das kann man aus der DB auslesen, aber wenn es eine feste Datenbank ist, würde ich mit statischen Werten arbeiten.
Solche Dinger

Code: Alles auswählen

$row[ArtNumber]
innerhalb eines String mit doppelten Anführungsstrichen " sind zwar funktionsfähig, aber erzeugen sehr wahrscheinlich eine sog. Notice. Korrekt solltest Du sie in der folgenden Schreibweise nutzen

Code: Alles auswählen

{$row['ArtNumber']}
Welches Problem Du mit dem MySQLDumper hattest kann ich aus der Ferne natürlich nicht feststellen. ;) Zu den Filtermöglichkeiten kann ich auch nichts sagen. Dazu müsste man es sich sehr viel genauer ansehen.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
isi1985
Mitglied
Beiträge: 5
Registriert: 28.03.2013 10:20

Re: CSV/XML Produktdaten

Beitrag von isi1985 »

Hallo Tekin,

Code: Alles auswählen

$seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
   {
   $seite = 1;
   }
   
include("head.php");

//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 15;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
                       
$abfrage = mysql_query("SELECT * FROM `teste` LIMIT $start, $eintraege_pro_seite ");
          
          /* solang mysql_fetch_assoc() eine Zeile (row) aus der Resource "ziehen" kann ist $row jeweils eine Zeile aus der Datenbank. Und es werden nun einige Elemente des Arrays ausgegeben */
while($row = mysql_fetch_assoc($abfrage)) {
echo "  <li class='item'>  <a href='$row[Deeplink1]'><img src='$row[Img_url]'    max-width='140px' height='230px' ></a><br>   <big><b>$row[Title]</big></b><br>   $row[DisplayPrice]<br> 
   $row[ProductCategoryName]<br>    
    
  $row[Geschlecht] </a>                            
           
          ";     
}

$result = mysql_query("SELECT Title FROM `teste`");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;  
  


                                    
?>  
  

    </ul>        
 </div>
 </div>
 </div>
 <?php 
 
 //Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";


//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($seite == $b)
      {
      echo "  <b>$b</b> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <a href=\"?seite=$b\">$b</a> ";
      }


   }  
       
echo "</div>";
?>
 </div>
Das ist mein derzeitiger Stand. Ich kann dir nicht ganz folgen, was die ermittlung der Seitenanzahl angeht. In meiner DB sind genau 4314 Artikel.

Ich suche schon die ganze Zeit nach einer Lösung, was das mit der Seitanzahl angeht.
Hier mal der Link zur Seite: http://www.topsale-produkte.de/schuhe.php.

Es ist noch nicht formatiert. :grin:

Was die Filtermöglichkeiten angeht:

Ich habe jetzt Schuhe für Herren und Damen, möchte es aber voneinander trennen. Der User soll die Möglichkeit bekommen nach "Preis" und "Marke" zu sortieren.
(Durch anklicken einer kleinen Box...)

Was das hochladen von csv Dateien angeht, hab ich eine Lösung gefunden:

http://www.csv-database-import.org/index.htm

Hier hab ich die Möglichkeit csv Daten >2 MB in die DB hochzuladen.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: CSV/XML Produktdaten

Beitrag von cYbercOsmOnauT »

Ich meine es so:

Code: Alles auswählen

<?php   
    include("head.php");

    // Einträge pro Seite: Hier 15 pro Seite
    $eintraege_pro_seite = 15;
    
    // Abfrage auf welcher Seite man ist
    $seite = isset($_GET['seite']) ? (int) $_GET['seite'] : 1
    
    // Maximale Anzahl von Seiten ermitteln
    $result = mysql_query("SELECT COUNT(`Title`) AS productCount FROM `teste`");
    $row = mysql_fetch_assoc($result);
    $wieviel_seiten = ceil($row['productCount'] / $eintraege_pro_seite);
    
    // Überprüfung der verlangten Seite
    if ($seite < 1)
        $seite = 1;
    elseif ($seite > $wieviel_seiten)
        $seite = $wieviel_seiten;

    // Ausrechen welche Spalte man zuerst ausgeben muss:
    $start = ($seite-1) * $eintraege_pro_seite;

    $abfrage = mysql_query("SELECT * FROM `teste` LIMIT {$start}, {$eintraege_pro_seite}");
              
              /* solang mysql_fetch_assoc() eine Zeile (row) aus der Resource "ziehen" kann ist $row jeweils eine Zeile aus der Datenbank. Und es werden nun einige Elemente des Arrays ausgegeben */
    while($row = mysql_fetch_assoc($abfrage)) {
    echo <<<EOM
<li class='item'>
    <a href='{$row['Deeplink1']}'>
        <img src='{$row['Img_url']}' max-width='140px' height='230px' />
    </a>
    <br />
    <big><strong>{$row['Title']}</strong></big>
    <br />
    {$row['DisplayPrice']}
    <br /> 
    {$row['ProductCategoryName']}
    <br />
    {$row['Geschlecht']}
</li>               
EOM;
    }                                   
    ?>  
        </ul>        
     </div>
     </div>
     </div>
     <?php 
     //Ausgabe der Seitenlinks:
    echo "<div align=\"center\">";
    echo "<b>Seite:</b> ";


    //Ausgabe der Links zu den Seiten
    for($page=1; $page <= $wieviel_seiten; $page++)
   {

       //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
       if($seite == $page)
          {
          echo "  <strong>{$page}</strong> ";
          }

       //Aus dieser Seite ist der User nicht, also einen Link ausgeben
       else
          {
          echo "  <a href='?seite={$page}'>{$page}</a>";
          }


   }
    ?>
     </div>
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
isi1985
Mitglied
Beiträge: 5
Registriert: 28.03.2013 10:20

Re: CSV/XML Produktdaten

Beitrag von isi1985 »

Hallo Tekin,

vielen Dank für deine Unterstützung.

Hier ist mein derzeitiger Stand:

Code: Alles auswählen

<?php 
  
function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="seite")
   {
   if(ereg("\?",$url)) $anhang = "&";
   else $anhang = "?";

   if(substr($url,-1,1) == "&") {
      $url = substr_replace($url,"",-1,1);
      }
   else if(substr($url,-1,1) == "?") {
      $anhang = "?";
      $url = substr_replace($url,"",-1,1);
      }

   if($anzahl%2 != 0) $anzahl++; //Wenn $anzahl ungeraden, dann $anzahl++

   $a = $seite-($anzahl/2);
   $b = 0;
   $blaetter = array();
   while($b <= $anzahl)
      {
      if($a > 0 AND $a <= $maxseite)
         {
         $blaetter[] = $a;
         $b++;
         }
      else if($a > $maxseite AND ($a-$anzahl-2)>=0)
         {
         $blaetter = array();
         $a -= ($anzahl+2);
         $b = 0;
         }
      else if($a > $maxseite AND ($a-$anzahl-2)<0)
         {
         break;
         }

      $a++;
      }
   $return = "";
   if(!in_array(1,$blaetter) AND count($blaetter) > 1)
      {
      if(!in_array(2,$blaetter)) $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=1\">1</a>&nbsp;...";
      else $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=1\">1</a>&nbsp;";
      }

   foreach($blaetter AS $blatt)
      {
      if($blatt == $seite) $return .= "&nbsp;<b>$blatt</b>&nbsp;";
      else $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$blatt\">$blatt</a>&nbsp;";
      }

   if(!in_array($maxseite,$blaetter) AND count($blaetter) > 1)
      {
      if(!in_array(($maxseite-1),$blaetter)) $return .= "...&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$maxseite\">letzte</a>&nbsp;";
      else $return .= "&nbsp;<a href=\"{$url}{$anhang}{$get_name}=$maxseite\">$maxseite</a>&nbsp;";
      }

   if(empty($return))
      return  "&nbsp;<b>1</b>&nbsp;";
   else
      return $return;
   }  
  $seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite)){
$seite = 1;
}



//Verbindung zu Datenbank aufbauen

include("head.php");


//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 20;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
                       
$abfrage = mysql_query("SELECT * FROM `teste` LIMIT $start, $eintraege_pro_seite ");
          
          /* solang mysql_fetch_assoc() eine Zeile (row) aus der Resource "ziehen" kann ist $row jeweils eine Zeile aus der Datenbank. Und es werden nun einige Elemente des Arrays ausgegeben */
while($row = mysql_fetch_assoc($abfrage)) {
echo "  <li class='item'>  <a href='$row[Deeplink1]'><img src='$row[Img_url]'    max-width='140px' height='230px' ></a><br>   <big><b>$row[Title]</big></b><br>   $row[DisplayPrice]<br> 
   $row[ProductCategoryName]<br>    
    
  $row[Geschlecht] </a>                            
           
          ";     
}
// Tabelle schliessen
    
  






  echo "</div>";
  //Ausgabe der Links zu den Seiten

//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wie viele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

$result = mysql_query("SELECT * FROM `teste` ");
$menge = mysql_num_rows($result);


//Errechnen wie viele Seiten es geben wird
$wieviele_seiten = ceil($menge / $eintraege_pro_seite);


//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";


//*****************************************
//* Dieser Abschnitt ist neu
//*****************************************
//Aufruf unserer Funktion
echo blaetterfunktion($seite,  $wieviele_seiten);
     

echo "</div>";
?> 
Damit bin ich auch zufrieden erstmal. :P

Nun möchte ich eine erweiterte Suchfunktion (User kann mehrere Wörter eingeben und suchen), 3 mehrfach-selection-Boxen und ein Dropdown-selection fürs sortiern der DB Inhalte (Auf und absteigend nach Preis bsp.).

Ich habe sehr viele Skripte versucht, ich habe es einfach nicht zum laufen bekommen.

Kannst du mir helfen???



Ich habe schon etliches
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: CSV/XML Produktdaten

Beitrag von cYbercOsmOnauT »

Auf dem ersten Blick kann ich sagen, dass Du meinen Code nicht wirklich genau betrachtet hast. Sonst hättest Du so manche Stelle in Deinem letzten Code anders gestaltet. Nun gut. Deine Filterfunktion geht jedenfalls weit über den Bereich des "Wir helfen ein wenig auf die Sprünge". Tut mir leid.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Antworten

Zurück zu „Coding & Technik“