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 14-01-2008, 12:31
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Wie prüfe ich beim einlesen der Datei, ob der Datensatz schon vorhanden ist

Hallo,

Mit dem angeführten Script werden Daten aus der merkmale.txt in die Tabelle merkmale geladen. Das funktioniert auch soweit sehr gut. Problem ist nun, wenn ich eine neue merkmale.txt habe und diese importiere, muss geprüft werden, ob es den Satz schon mal gibt oder nicht. Wenn nicht vorhanden soll er natürlich angefpgt werden ansonsten verworfen werden. Der primäre Key ist PNr, nach dem kann ausgewählt werden.

Kann ich das direkt im Query machen und wenn wie oder muss da php ran (und wenn wie)?

PHP-Code:
<?php

//Datenbank verbinden
require_once ($root "/functions/db_connection.php");

// einlesen der Datei
$datei "merkmale.txt";
$csv file($datei);// Liest die Datei zeilenweise in ein Array
foreach($csv as $value)
    {
     
$parts explode(";"$value);// Zerbrechen der Zeile anhand des Trenners ";"
     
$partquery implode("','"$parts);
     
$partquery "'" $partquery "'"
     
$query "INSERT INTO merkmale (PNr, Bezug, Bez_Nr, Merkmal, Aktueller_Wert, Datentyp, Auswahl, Text, Wert, Einheit, 
Kennzeichen, erstellt_am, erstellt_von, geaendert_am, geaendert_von) VALUES(" 
$partquery ")";
     
     
$result mysql_query($query);
     if (!
$result)
     {
      die(
'Ungültige Abfrage: ' mysql_error());
     }
     }
    echo 
"Alle Datensätze wurden in die Datenbank importiert.";
?>

Gruß

Michael

Geändert von fritzje610 (14-01-2008 um 12:40 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 14-01-2008, 12:34
stekoe2000
 Registrierter Benutzer
Links : Onlinestatus : stekoe2000 ist offline
Registriert seit: Jul 2003
Beiträge: 342
stekoe2000 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. Code umbrechen,
2. Unique Felder in der Datenbank machen?
__________________
Liebe Grüße,
SteKoe!

PHP Tutorials
Peter Kropff | Quakenet | Schattenbaum.net
Mit Zitat antworten
  #3 (permalink)  
Alt 14-01-2008, 12:39
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

wenn ich das PNr-Feld als unique definiere wird zwar das einfügen von doppelten Sätzen verhindert, allerdings werden auch keine weiteren hinzugefügt.
Ich habe dazu nur mittels phpMyAdmin die Spalte als unique gesetzt. Der Rest ist so geblieben. Ich denke mal, dass ich dann den Query noch anpassen muss.
Nur wie? Oder muss ich da doch mit php prüfen?



Gruß


Michael
Mit Zitat antworten
  #4 (permalink)  
Alt 14-01-2008, 12:54
IchBinIch
 Registrierter Benutzer
Links : Onlinestatus : IchBinIch ist offline
Registriert seit: Apr 2003
Beiträge: 324
IchBinIch ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du die Scriptausführung aktiv (die('Ungültige Abfrage:...')) unterbrichst, sollte es dich eigentlich nicht wundern, dass alle folgenden Einträge nicht eingetragen werden.
__________________
ICH BIN ICH!!!
Mit Zitat antworten
  #5 (permalink)  
Alt 14-01-2008, 13:01
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das ist richtig. Manchmal hat man Tomaten auf den Augen. Dann muss dort ein INSERT hin, soweit so gut. Nur wie muss der aussehen. Einfach nochmal alles drüber, sprich den selben Query nochmal oder kann man dann sagen, nimm nur die, die es noch nicht gibt? wie mach ich das am besten ? Diese Querys sind nicht so wirklich mein Fall.


Gruß

Michael
Mit Zitat antworten
  #6 (permalink)  
Alt 14-01-2008, 13:08
IchBinIch
 Registrierter Benutzer
Links : Onlinestatus : IchBinIch ist offline
Registriert seit: Apr 2003
Beiträge: 324
IchBinIch ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Dann muss dort ein INSERT hin, soweit so gut.
Warum das??? Das insert hast du doch schon längst?

OffTopic:
Eigenen Code verstanden, oder nur irgendwo kopiert und mit Glück zum laufen gebracht?


Zitat:
Nur wie muss der aussehen. Einfach nochmal alles drüber, sprich den selben Query nochmal oder kann man dann sagen, nimm nur die, die es noch nicht gibt? wie mach ich das am besten ?
Ja genau, am besten machst du für jede Zeile in der Datei eine eigene Querie...

OffTopic:
Diese Querys sind nicht so wirklich mein Fall.
Schleifen offensichtlich auch nicht. Versuch noch mal nachzuvollziehen, was eine Schleife ist und wie sie Funktioniert. Danach liest du noch mal meine letzte Antwort und überlegst, was ich dir wohl damit sagen wollte, dass du die Scriptausführung mit die() absichtlich (und überflüssigerweise) abbrichst.
__________________
ICH BIN ICH!!!
Mit Zitat antworten
  #7 (permalink)  
Alt 14-01-2008, 13:09
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habs mit dem ausführen desselben query anstatt des die .... probiert und das funktioniert dann auch. Ist das eigentlich "sauber" oder gibts da bessere/elegantere Wege?

Gruß

Michael
Mit Zitat antworten
  #8 (permalink)  
Alt 14-01-2008, 13:11
IchBinIch
 Registrierter Benutzer
Links : Onlinestatus : IchBinIch ist offline
Registriert seit: Apr 2003
Beiträge: 324
IchBinIch ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zeig mal den Code, aber ich würde vermuten, dass es absolut überflüssig ist...
__________________
ICH BIN ICH!!!
Mit Zitat antworten
  #9 (permalink)  
Alt 14-01-2008, 13:13
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn PNr der Primärschlüssel ist, ist er automatisch UNIQUE, das musst du nicht mehr speziell machen.
Und dann kannst du ja nach dem entsprechenden Fehlercode (#1062 - Duplicate entry '1' for key 1 ) abfragen:
PHP-Code:
$result mysql_query($query);
if (!
$result){
    if(
mysql_errno() == 1062){
        echo 
"Datensatz $parts[0] schon vorhanden<br />";
    }
else{
    die(
'Ungültige Abfrage: ' mysql_error());

Mehr brauchst du gar nicht zu ändern.
__________________
Gruss
H2O
Mit Zitat antworten
  #10 (permalink)  
Alt 14-01-2008, 13:21
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
<?php

//Datenbank verbinden
require_once ($root "/functions/db_connection.php");

// einlesen der Datei
$datei "merkmale.txt";
$csv file($datei);// Liest die Datei zeilenweise in ein Array
foreach($csv as $value)
    {
     
$parts explode(";"$value);// Zerbrechen der Zeile anhand des Trenners ";"
     
$partquery implode("','"$parts);
     
$partquery "'" $partquery "'"// Ergebnis soll 'Hallo', 'Welt', 'Michael' sein
     
$query "INSERT INTO merkmale (PNr, Bezug, Bez_Nr, Merkmal, Aktueller_Wert, Datentyp, Auswahl, Text, Wert, Einheit, 
Kennzeichen, erstellt_am, erstellt_von, geaendert_am, geaendert_von) VALUES(" 
$partquery ")";
     
$result mysql_query($query);
     if (!
$result)
     {
      
$query "INSERT INTO merkmale (PNr, Bezug, Bez_Nr, Merkmal, Aktueller_Wert, Datentyp, Auswahl, Text, Wert, Einheit,
 Kennzeichen, erstellt_am, erstellt_von, geaendert_am, geaendert_von) VALUES(" 
$partquery ")";
     }
     }
    echo 
"Alle Datensätze wurden in die Datenbank importiert.";
?>
Wie gesagt, so funktioniert das, allerdings ist das sicherlich nicht elegant, da er ja auf alle Fälle den kompletten Import durchführen muss. Es reicht doch wenn er die fehlenden hinzufügt.
Aus der Logik her würde ich sagen per Select die Spalte PNr auslesen. Steht dann ja in einem Array. Die Importdatei einlesen, die dann ja auch in einem Array steht. Die beiden dann vergleichen und wenn keine Übereinstimmung diesen Satz in die Datenbank schreiben.

Gruß

Michael

Geändert von fritzje610 (14-01-2008 um 13:27 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 14-01-2008, 13:31
IchBinIch
 Registrierter Benutzer
Links : Onlinestatus : IchBinIch ist offline
Registriert seit: Apr 2003
Beiträge: 324
IchBinIch ist zur Zeit noch ein unbeschriebenes Blatt
Standard

*rofl*

Man Merkt doch deutlich, dass du nichtmal versucht hast, zu verstehen, was du da gemacht hast...

Was glaubst du wohl, bewirkt dieser Code?

PHP-Code:
if (!$result)
     {
      
$query "INSERT INTO merkmale (PNr, Bezug, Bez_Nr, Merkmal, Aktueller_Wert, Datentyp, Auswahl, Text, Wert, Einheit,
 Kennzeichen, erstellt_am, erstellt_von, geaendert_am, geaendert_von) VALUES(" 
$partquery ")";
     } 
Außer minimalem zusätzlichen Speicherverbraucht, gar nichts! Von mir auch klnntest du in die Variable $query alle drei Teile von Herr der Ringe reinschreiben. Nen Effekt hat das aber genauso wenig.

Wie gesagt, überflüssig wie ein Kropf
__________________
ICH BIN ICH!!!
Mit Zitat antworten
  #12 (permalink)  
Alt 14-01-2008, 13:33
IchBinIch
 Registrierter Benutzer
Links : Onlinestatus : IchBinIch ist offline
Registriert seit: Apr 2003
Beiträge: 324
IchBinIch ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Aus der Logik her würde ich sagen per Select die Spalte PNr auslesen. Steht dann ja in einem Array. Die Importdatei einlesen, die dann ja auch in einem Array steht. Die beiden dann vergleichen und wenn keine Übereinstimmung diesen Satz in die Datenbank schreiben.
kann man so machen.
__________________
ICH BIN ICH!!!
Mit Zitat antworten
  #13 (permalink)  
Alt 14-01-2008, 14:13
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank H2O. Es funktioniert. Ich denke ich habe es auch verstanden was Du gemaht hast.

- Du setzt den Query ab und guckst ob $result true ist (Query ok war)

- wenn nicht prüfe ob die Fehlermeldung die 1062 ist und gib die vorhanden Satznummern aus

- danach kommt der Sprung zurück in die foreach und er versucht den query nochmals abzusetzen. Bei dem werden dann die restlichen Sätze hinzugefügt.

- wieder die Prüfung auf 1062 bzw. auf einen eventuellen Fehler von mysql

- wenn beide nicht vorliegt den echo ausgeben das alles hinzugefügt wurde


Richtig ?



Gruß

Michael
Mit Zitat antworten
  #14 (permalink)  
Alt 14-01-2008, 14:16
IchBinIch
 Registrierter Benutzer
Links : Onlinestatus : IchBinIch ist offline
Registriert seit: Apr 2003
Beiträge: 324
IchBinIch ist zur Zeit noch ein unbeschriebenes Blatt
Standard

annähernd.

die schleife itteriert durch deine quelldaten:
1) es wird versucht deinen datensatz zu schreiben.
2) wenn dies nicht gelingt
2 a) wird geprüft ob es an "dublicate entry" liegt. Dann wird ein entsprechender hinweis ausgegeben
2 b) oder bei allen anderen möglichen fehlern: abgebrochen.
3) nächster Datensatz -> beginne bei 1)
__________________
ICH BIN ICH!!!
Mit Zitat antworten
  #15 (permalink)  
Alt 14-01-2008, 14:20
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für eure Hilfe. Ich denke, ich habe es gerafft.

Gruß

Michael
Mit Zitat antworten
Antwort

Lesezeichen


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

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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:31 Uhr.