Seite 1 von 1

CSV/XML Produktdaten

Verfasst: 28.03.2013 11:31
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

Re: CSV/XML Produktdaten

Verfasst: 29.03.2013 13:51
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

Re: CSV/XML Produktdaten

Verfasst: 29.03.2013 16:10
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

Re: CSV/XML Produktdaten

Verfasst: 29.03.2013 23:45
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.

Re: CSV/XML Produktdaten

Verfasst: 30.03.2013 11:54
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.

Re: CSV/XML Produktdaten

Verfasst: 30.03.2013 16:26
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>

Re: CSV/XML Produktdaten

Verfasst: 31.03.2013 11:43
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

Re: CSV/XML Produktdaten

Verfasst: 01.04.2013 00:31
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.