php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-01-2012, 13:35
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard PHP Script bricht beim Return ab

Hallo Ihr lieben,

ich habe ein PHP Script, welches Daten aus einer CSV Datei in eine SQL Datenbank schreibt.
Das Funktioniert auch sehr gut, bis auf den Punkt, wenn ich in einer CSV Datei ein Return drin habe, dann bricht er ab.
Die Spaltentrenner sind Pieps.

BSP:

<h1>...</h1><p class="bps">dddd</p><p class="bps">dddd</p>

Funktioniert gut...


Problem:
<h1>...</h1>
<p class="bps">dddd</p>
<p class="bps">dddd</p>


Hierbei.
Dann bricht das Script nach </h1> ab.

Was kann ich tun?

Würde mich über eure Unterstützung freuen.

Gruß
Carsten
Mit Zitat antworten
  #2 (permalink)  
Alt 25-01-2012, 13:38
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zeig erst mal, wie du die csv-Datei ausliest und vor allem, wie die csv-Datei ausieht (ein Beispiel reicht)

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 25-01-2012, 13:44
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
@products_id|language_code|products_name|products_description|products_short_description|products_keywords|products_url
5
|de|NameBeschreibung xxx xxx |xxx.html 
PHP-Code:
/*Datenbank Vorgaben*/

define("server""Server");
define("user""db-Benutzer");
define("password""passwort");
define("database""db...");


$dir_handle opendir(dirname(__FILE__));

while ((
$file readdir($dir_handle)) !== false) {
    
ini_set("max_execution_time""120");
    if (
$file != '..' AND $file != '.' AND (strtolower(substr($file, -4)) == ".csv")) {
        
$data parse_csv($file);

        if (
update_db($data) >= 1){
            echo 
"Daten aus der Datei <b>" $file "</b> wurden in der Datenbank aktualisiert.<br>";
            
unlink($file);
        }
        else{
            echo 
"Die Daten der Datei <b>" $file "</b> konnten <u>nicht</u> in die Datenbank &uuml;bernommen werde!<br>";
        }
    }
    
ini_restore("max_execution_time");
}


function 
get_field_name($table_name$DB database)
{
    
$table_meta_name a....( /*$s...n*/);
    for (
$i 0$i mysql_..._fiel..(mysql_list_fields($DB$t...e_name)); $i++) {
        
array_push($table_meta_namemysql_f..._name(mysql_list_fields($DB$table_name), $i));
    }
    return (
$table_me..._name);
}


function 
parse_csv($file)
{
    
$file_handle fo...($file"r");
    
$data = array();
    while ((
$col fget...($file_ha..le0'|')) !== FALSE) {
        foreach (
$col as $key => $value) {
            
$col[$key] = trim($col[$key]);
            
$col[$key] = str_replace(';">"''|">'$col[$key]);

            
//echo $col[$key]."<br>";
        
}
        
array_push($data$col);
    }
    
fclose($file_handle);
    return 
$data;
}

function 
dbupdate($table$values$conditions$DB database)
{
    
$query 'UPDATE `' $table '` SET ';
    
$key_value '';
    
$condition ' WHERE ';
    foreach (
$values as $key => $value) {
        
$key_value .= '`' $key '`=\'' $value '\', ';
    }

    foreach ($... as $... => 
$cva...e) {
        
$condition .= '`' $ckey '`=\'' . $..alue '\' AND ';
    }
    
$key_value substr($key_value0, -2);
    
$condition substr($condition0, -5);
    
//echo $query.$key_value.$condition."<br><br>";
    
mysql_query($query $key_value $condition);
    return 
TRUE;

}

function 
update_db($data)
{
    
$err true;
    
$sql_handle mysql_pconnect(serveruserpassword);
    
mysql_select_db(database$sql_handle);

    
//--------------------------------------------------------------------
    
$fields_in_csv $data[0];
    
$table_handle mysql_list_tables(database$sql_handle);
    
$tables = array();
    while (
$row mysql_fetch_row($table_handle)) {
        
array_push($tables$row[0]);
    }

    
$tables array_flip($tables);
    
$tables_alph $tables;

    foreach (
$tables_alph as $tkey => $tval) {

        
$tables_alph[$tkey] = 0;
    }
    foreach (
$tables as $key => $value) {
        
$tables[$key] = get_field_name($key);
        foreach (
$tables[$key] as $innerkey => $innervalue) {

            if (
array_...($innervalue$fields_in_csv) !== FALSE)
                
$tables_...h[$key] = $tables_alph[$key] + 1;
        }
    }

    
asort($tables_alph);
    
$tables_alph array_flip($tables_alph);

    
$table_to_update end($tables_alph);
    
//-----------------------------------------------------------


    
$fields_in_table = array();

    
$fields_in_table get_field_name($table_to_update);

    
$umlaute = array("ä" => "&auml;""Ä" => "&Auml;""ü" => "&uuml;""Ü" => "&Uuml;""ö" => "&ouml;""Ö" => "&Ouml;");

    
$update = array();
    
$condition = array();
    
$condi_count 0;

    for (
$i 1$i count($data); $i++) {
        for (
$y 0$y count($fields_in_csv); $y++) {
            if (
$fields_in_csv[$y][0] == "@") {
                
$condi_count $condi_count 1;
                
$condition array_merge($condition, array(substr($fields_in_csv[$y], 1) => $data[$i][$y]));
            }
            else {
                
$update array_merge($update, array($fields_in_csv[$y] => strtr($data[$i][$y], $umlaute)));
            }

        }
        if (
$condi_count >= 1) {
            
dbupdate($table_to_update$update$condition);
            
$err $err 1;
        }
        else {
            return 
$err "Keine Bedingungen gefunden!";
        }
    }
    return 
$err;


Geändert von cami3004 (25-01-2012 um 14:01 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 25-01-2012, 14:03
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Dein Problem werden wahrscheinlich die Zeilenumbrüche innerhalb des HTML Codes sein. Die gleichen Zeilenumbrüche werden nämlich wahrscheinlich auch am Ende jeder CSV Zeile stehen. Demnach geht das Script wahrscheinlich davon aus, dass die Zeile beim ersten Vorkommen eines Zeilenumbruchs beendet ist.

Alternativ könntest Du beim Auslesen Deiner CSv Datei mit fgetcsv auch ein Enclosure setzen, welches dieses Problem wahrscheinlich beheben würde. Vorausgesetzt Deine Spalteninhalte sind mit einem Zeichen (Enclosure) umschlossen. Wenn sie einfach so wie in Deinem Beispiel ohne jegliches umschließendes Zeichen in der Datei stehen, ist das ... Künstlerpech.
__________________
MM Newmedia | MeinBlog

Geändert von ezkimo (25-01-2012 um 14:06 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-01-2012, 14:16
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

Sicherlich sind die Absätze auch in der CSV Datei drin. Diese wurden ja aus dem HTML Code direkt aus der Datenbank übernommen.
Dann sollten diese der Bequemlichkeit in einem externen Editor bearbeitet werden und dann wieder mittlels Skript eingefügt werden.

Ich kann die Daten ja aus der SQL Datenbank mit Myphp Admin neu auslesen und somit dann auch den Spaltentrenner hinterlegen.

Ich werde dann mal die fgetcsv Funktion ersetzten und die neue Ausprobieren, dafür muss ich aber erstmal die neue Funktion kennenlernen.

Ist mir noch unbekannt.
Aber vielen Dank schonmal für den Tipp.

Gruß
Carsten
Mit Zitat antworten
  #6 (permalink)  
Alt 25-01-2012, 21:19
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von cami3004 Beitrag anzeigen
Diese wurden ja aus dem HTML Code direkt aus der Datenbank übernommen.
Wäre da XML nicht besser zu verarbeiten? Vorrausgesetzt, der HTML-Code ist valide.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #7 (permalink)  
Alt 26-01-2012, 09:18
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

Kann ich denn ganz einfach in dem Script den Datei Typ ändern?
Wahrscheinlich doch nicht.

Alternativ hatte ich mir gedacht, kann ich doch noch einen Separaten Spaltentrenner in dem Skript einfügen, oder nicht?

Gruß
Cami3004
Mit Zitat antworten
  #8 (permalink)  
Alt 26-01-2012, 10:26
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ich versteh nicht warum du da mit Spaltentrenner herumtust. fputcsv() und fgetcsv() erledigen die ganze Arbeit für dich. Du musst dich um sonst nichts kümmern.

Warum baust du eigentlich eine persistende Datenbankverbindung auf?

Bei dir fehlt das SQL-Escaping der Daten.

Warum ersetzt du Umlaute durch HTML-Entities?

Geändert von h3ll (26-01-2012 um 10:29 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 26-01-2012, 12:01
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
Ich versteh nicht warum du da mit Spaltentrenner herumtustfputcsv() und fgetcsv() erledigen die ganze Arbeit für dichDu musst dich um sonst nichts kümmern.

Warum baust du eigentlich eine persistende Datenbankverbindung auf?

Bei dir fehlt das SQL-Escaping der Daten.

Warum ersetzt du Umlaute durch HTML-Entities
1.) Ich habe doch die Funktion fgetscv genutzt.
Diese hat aber leider nicht die Return und Spaltenabsätze übernommen.

2.) Die persistende Datenverbindung habe ich genutzt, weil ich mit dem Script mehrere Dateien nacheinander ausführe und diese dann gelöscht werden, damit nicht falsche Dateien upgedatet werden.

3.) Brauche ich das Escaping nicht nur, wenn ich Daten zwischen "" und ' ' habe?

4.) Ich ersetzte die Umlaute in HTML Entries, weil ich sehr oft schon beim Import Probleme mit den Umlauten gehabt habe, seit der umsetzung in HTML Entries ist das Problem beseitigt.

-
Was wäre denn dein Vorschlag, damit ich auch die Absätze richtig übertragen bekomme?
Carsten
Mit Zitat antworten
  #10 (permalink)  
Alt 26-01-2012, 12:09
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von cami3004 Beitrag anzeigen
Ich habe doch die Funktion fgetscv genutzt.
Diese hat aber leider nicht die Return und Spaltenabsätze übernommen.
Dann machst du was falsch. Bei mir funktionierts. Eventuell ist auch einfach nur die CSV-Datei kaputt?

Zitat:
Zitat von cami3004 Beitrag anzeigen
Die persistende Datenverbindung habe ich genutzt, weil ich mit dem Script mehrere Dateien nacheinander ausführe und diese dann gelöscht werden, damit nicht falsche Dateien upgedatet werden.
Das Eine hat mit dem Anderen nichts zu tun. Also warum verwendest du eine persistente Datenbankverbindung?

Zitat:
Zitat von cami3004 Beitrag anzeigen
Brauche ich das Escaping nicht nur, wenn ich Daten zwischen "" und ' ' habe?
Du brauchst es _immer_!

Zitat:
Zitat von cami3004 Beitrag anzeigen
Ich ersetzte die Umlaute in HTML Entries, weil ich sehr oft schon beim Import Probleme mit den Umlauten gehabt habe, seit der umsetzung in HTML Entries ist das Problem beseitigt.
Damit kehrst du das Problem unter den Teppich, aber löst es nicht. Du hast offenbar ein Zeichensatzproblem, um das du dich kümmern solltest.

Zitat:
Zitat von cami3004 Beitrag anzeigen
Was wäre denn dein Vorschlag, damit ich auch die Absätze richtig übertragen bekomme?
Korrekte CSV-Dateien erzeugen.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-01-2012, 12:18
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
function parse_csv($file)
{
    
$file_handle fopen($file"r");
    
$data = array();
    while ((
$col fgetcsv($file_handle0'|')) !== FALSE) {
        foreach (
$col as $key => $value) {
            
$col[$key] = trim($col[$key]);
            
$col[$key] = str_replace(';">"''|">'$col[$key]);
            
//echo $col[$key]."<br>";
        
}
        
array_push($data$col);
    }
    
fclose($file_handle);
    return 
$data
Hier habe ich die fgetcsv Funktion genutzt.
Ich denke nicht das da ein Fehler drin ist.

Die CSV Datei exportiere ich direkt aus dem PHPMyAdmin.
Mit Zitat antworten
  #12 (permalink)  
Alt 26-01-2012, 12:20
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

Pm
Mit Zitat antworten
  #13 (permalink)  
Alt 26-01-2012, 12:23
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Was soll dieser Quatsch mit str_replace? Die ganze foreach-Schleife ist nutzlos.

Und warum schreibst du array_push() statt einfach nur $data[] = ?

Statt mir irgendwas zu schicken, kannst du ja im Forum eine (kleine) Beispieldatei posten, wo der Fehler nachvollziehbar auftritt.
Mit Zitat antworten
  #14 (permalink)  
Alt 26-01-2012, 12:29
cami3004
 Registrierter Benutzer
Links : Onlinestatus : cami3004 ist offline
Registriert seit: Dec 2011
Beiträge: 17
cami3004 befindet sich auf einem aufstrebenden Ast
Standard

Das Beispiel habe ich doch oben in der CSV Datei aufgelistet.
Immer wenn ein Absatz mit einem Return drin ist, bricht das Skript diese Zeile ab.

Die replace Zeile ist wirklich überflüssig, stimmt. Danke
Mit Zitat antworten
  #15 (permalink)  
Alt 26-01-2012, 12:30
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von cami3004 Beitrag anzeigen
Das Beispiel habe ich doch oben in der CSV Datei aufgelistet.
Immer wenn ein Absatz mit einem Return drin ist, bricht das Skript diese Zeile ab.

Die replace Zeile ist wirklich überflüssig, stimmt. Danke
Sorry, hab ich übersehen.

Geändert von h3ll (26-01-2012 um 12:37 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php.exe bricht Script ab skalu PHP Developer Forum 4 09-12-2010 13:07
smtp class bricht beim senden ab jens76 PHP Developer Forum 9 08-07-2008 17:00
Server bricht Script ab Laire Webmaster 4 07-02-2008 20:29
Script bricht ab dioony PHP Developer Forum 4 01-11-2004 18:05
[Funktion] PHP-Script bricht immer ab 1&1 loebbeshop PHP Developer Forum 35 25-06-2003 00:55

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:34 Uhr.