tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
355
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    raybrackho raybrackho ist offline Mitglied Silber
    Registriert seit
    Feb 2004
    Beiträge
    79
    Ich habe ein kleines Script für mein Shopping-System Open Cart.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    <?php
    require_once('config.php');
    require_once(DIR_SYSTEM . 'startup.php');
     
    // Registry
    $registry = new Registry();
     
    // Loader
    $loader = new Loader($registry);
    $registry->set('load', $loader);
     
    // Config
    $config = new Config();
    $registry->set('config', $config);
     
    // Database 
    $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
    $registry->set('db', $db);
     
    $query = $db->query("SELECT DISTINCT email, customer_id as cid FROM `" . DB_PREFIX . "order` WHERE customer_id > 0");
     
    foreach ($query->rows as $row){
        $query2 = $db->query("UPDATE `" . DB_PREFIX . "order` SET customer_id = '". (int)$row['cid'] ."' WHERE LCASE(email) = '".strtolower($row['email'])."'");
    }
        
    echo 'done';
    ?>

    Hierbei sollen Kunden, die erst ein Bestellung aufgegeben haben und erst später ein Konto eingerichtet haben die Möglichkeit bekommen auf ihre alten Bestellungen zurückzugreifen.
    Leider funktioniert es nicht.

    Es kommen aber auch keine Fehler.

    Sieht irgendwer wo hier der Wurm steckt****
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Am besten mal das Query testen: [PHP] [MySQL] Debug Queries
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Hmm, macht es wirklich Sinn, nach Datensätzen zu suchen, die eine Kundennummer haben, wenn man eigentlich Datensätze sucht, die keine Kundennummber haben (weil kein Kundenkonto vorhanden)? Und vor allem, warum durchsucht man irgendwie alle Datensätze? Ist das nicht etwas heikel, wenn man die Einkäufe von anderen Kunden in seinem Profil betrachten kann?

    EDIT: Beim Update wird "(int)$row['cid']" verwendet, aber selektiert wird oberhalb email und customer_id. Es sollte also zu mindest mal (int)$row['customer_id'] heißen, oder?
    Geändert von saftmeister (11.01.12 um 12:22 Uhr)
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Sehe ich das richtig das du beim Update die eMail Adresse als Filterkriterium nimmst?

    Dann solltest du das doch mit einer Abfrage lösen können und nicht mit 2 Abfragen und einer FOREACH-Schleife.

    Oder verstehe ich mal wieder was falsch!?
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #5
    raybrackho raybrackho ist offline Mitglied Silber
    Registriert seit
    Feb 2004
    Beiträge
    79
    also das script wurde mir freundlicherweise zur verfügung gestellt. meine sql kenntnisse sind nur rudimentär.

    @saftmeister: das hatte mich ehrlich gesagt auch schon gewundert
    Code :
    1
    
    customer_id > 0
    die stelle meinst du sicherlich, oder?

    also das script sollte bestenfalls so funktionieren:

    -gucken welche bestellungen customer_id=0 haben
    -von diesen bestellungen die email adressen nehmen
    -kunden, die die gleiche mail verwenden die "alte" bestellung anhängen (also der alten bestellung statt customer_id 0 die customer_id des kundenkontos geben)

    EDIT:
    @Saftmeister:
    Code :
    1
    
    customer_id as cid
    "cid" wird ja oben deklariert
    Geändert von raybrackho (11.01.12 um 13:49 Uhr)
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Ich würde die Email-Adresse als einziges Kriterium ansehen, was auch schon tombe geschrieben hat und nur ein Query absetzen:

    Code php:
    1
    
    $query2 = $db->query("UPDATE `" . DB_PREFIX . "order` SET customer_id = '". (int)$row['cid'] ."' WHERE LCASE(email) = '".strtolower($email)."'");

    Wobei $email aus dem aktuell angemeldeten (oder frisch angelegten) Kunden-Datensatz kommen muss, den man evtl. über Session-Variable bekommt. Wird dieser Code direkt nach dem Anlegen des neuen Benutzer-Kontos ausgeführt?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    raybrackho raybrackho ist offline Mitglied Silber
    Registriert seit
    Feb 2004
    Beiträge
    79
    Zitat Zitat von saftmeister Beitrag anzeigen
    Wird dieser Code direkt nach dem Anlegen des neuen Benutzer-Kontos ausgeführt?
    Das wäre zu schön, aber das krieg ich glaube ich nicht umgesetzt.
    Im Moment führe ich das Script manuell aus.

    Und dann dürfte die "alte" Bestellung die dem Kundenkonto hinzugefügt wird auf keinen Fall bereits einem Konto zugewiesen sein (daher customer_id=0).
     

  8. #8
    raybrackho raybrackho ist offline Mitglied Silber
    Registriert seit
    Feb 2004
    Beiträge
    79
    also wenn ich
    Code :
    1
    2
    
    echo "{$query}\n";
    mysql_query($query) or die(mysql_error());
    unter mein query setze, kommt folgender Fehler:
    Code :
    1
    
    Catchable fatal error: Object of class stdClass could not be converted to string in .../html/runonce_v2.php on line 25
     

  9. #9
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Wenn man noch von obigem Code ausgeht, dann dürfte Zeile 25 wohl diese hier sein:

    PHP-Code:
    $query $db->query("SELECT DISTINCT email, customer_id as cid FROM `" DB_PREFIX "order` WHERE customer_id > 0"); 
    und das kannst du nicht mit echo ausgeben.

    Wenn du die SQL-Anweisung ausgeben willst, dann musst du eine Variable zwischenschalten:

    PHP-Code:
    $sql "SELECT DISTINCT email, customer_id as cid FROM `" DB_PREFIX "order` WHERE customer_id > 0";

    $query $db->query($sql);

    echo 
    $sql
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  10. #10
    raybrackho raybrackho ist offline Mitglied Silber
    Registriert seit
    Feb 2004
    Beiträge
    79
    danke tombe, allerdings bringt mich das bei meinem grundproblem nicht weiter.
     

Ähnliche Themen

  1. Mysql UPDATE. SET spalte mit mehreren Werten
    Von kramoo im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 15.11.11, 15:22
  2. MySQL - UPDATE mit mehrern WHERE - Werten.
    Von Michael Brauner im Forum PHP
    Antworten: 2
    Letzter Beitrag: 05.03.11, 19:08
  3. MYSQL: Update mit werten aus anderer Tabelle
    Von Opor im Forum Relationale Datenbanksysteme
    Antworten: 10
    Letzter Beitrag: 11.03.10, 16:23
  4. SQL UPDATE mit Werten aus anderen Doks der gleichen Tabelle
    Von klaussp im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 11.02.09, 13:13
  5. Oracle Update mit Werten aus anderer Tabelle
    Von Sabine_81 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 13.10.08, 13:34

Stichworte