ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
355
355
EMPFEHLEN
-
11.01.12 11:35 #1
- 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****
-
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
-
11.01.12 11:59 #3
- 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 ;-)
-
11.01.12 12:26 #4
- 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.
-
11.01.12 12:52 #5
- 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 gewundertdie stelle meinst du sicherlich, oder?Code :1
customer_id > 0
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:"cid" wird ja oben deklariertCode :1
customer_id as cid
Geändert von raybrackho (11.01.12 um 13:49 Uhr)
-
11.01.12 13:50 #6
- 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 ;-)
-
11.01.12 14:10 #7
- Registriert seit
- Feb 2004
- Beiträge
- 79
-
11.01.12 16:22 #8
- Registriert seit
- Feb 2004
- Beiträge
- 79
also wenn ich
unter mein query setze, kommt folgender Fehler:Code :1 2
echo "{$query}\n"; mysql_query($query) or die(mysql_error());
Code :1
Catchable fatal error: Object of class stdClass could not be converted to string in .../html/runonce_v2.php on line 25
-
11.01.12 16:28 #9
- 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:
und das kannst du nicht mit echo ausgeben.PHP-Code:$query = $db->query("SELECT DISTINCT email, customer_id as cid FROM `" . DB_PREFIX . "order` WHERE customer_id > 0");
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.
-
13.01.12 13:22 #10
- Registriert seit
- Feb 2004
- Beiträge
- 79
danke tombe, allerdings bringt mich das bei meinem grundproblem nicht weiter.
Ähnliche Themen
-
Mysql UPDATE. SET spalte mit mehreren Werten
Von kramoo im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 15.11.11, 15:22 -
MySQL - UPDATE mit mehrern WHERE - Werten.
Von Michael Brauner im Forum PHPAntworten: 2Letzter Beitrag: 05.03.11, 19:08 -
MYSQL: Update mit werten aus anderer Tabelle
Von Opor im Forum Relationale DatenbanksystemeAntworten: 10Letzter Beitrag: 11.03.10, 16:23 -
SQL UPDATE mit Werten aus anderen Doks der gleichen Tabelle
Von klaussp im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 11.02.09, 13:13 -
Oracle Update mit Werten aus anderer Tabelle
Von Sabine_81 im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 13.10.08, 13:34





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren