PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   HILFE: Datensätze werden als bearbeitet makiert, obwohl sie nicht bearbeitet wurden. (http://www.selfphp.de/forum/showthread.php?t=25607)

Einradkohorte 24.07.2015 19:53:50

HILFE: Datensätze werden als bearbeitet makiert, obwohl sie nicht bearbeitet wurden.
 
Hallo Gemeinde,

ich habe hier ein kleines Script geschrieben und mein Chef hat eine Anmerkung gemacht. Kann mir jemand bitte helfe dieses Problem zu lösen und mir eine short-description dazu geben damit ich das einwandfrei nachvollziehen kann? Hier das Script plus Anmerkung. Danke für eure Unterstützung ich weiß den Support echt zu schätzen.

Script:

PHP-Code:

<?php
include_once(dirname(__FILE__) . '/../bootstrap.php');

$oDb oxDb::getDboxDb::FETCH_MODE_ASSOC );
$sQ1 "SELECT `oxid` FROM `oxorder` WHERE `oxtransstatus` = 'NOT_FINISHED' AND `oxpaymenttype` = 'trosofortgateway_su'";
$oRs $oDb->getArray$sQ1falsefalse );

foreach (
$oRs as $oxOrderID) {
    
$oxOrderID $oxOrderID['oxid'];
    
$sQ "SELECT oxorderid, oxartid, oxartnum, oxamount FROM `oxorderarticles` WHERE `oxOrderID` = '$oxOrderID'";
    
$oRs $oDb->getArray$sQfalsefalse );


    foreach (
$oRs as $oxArticle){
        
$oArticle oxNew('oxarticle');


        if (
$oArticle->load($oxArticle['oxartid'])) {
            
$oArticle->reduceStock(-$oxArticle['oxamount'], true);

        }

    }

$updstatus "UPDATE oxorder SET oxtransstatus = 'NOT_FINISHED_MODI' WHERE oxtransstatus = 'NOT_FINISHED' AND `oxpaymenttype` = 'trosofortgateway_su'";
$result mysql_query($updstatus) or die ('Update fehlgeschlagen : ' msql_error($oDb));
}

?>

Anmerkung vom Chef:

++ $result = mysql_query($updstatus) or die ('Update fehlgeschlagen : ' . msql_error($oDb)); ++

Du änderst hier ALLE Datensätze, d. h. auch zwischenzeitlich neu eingetroffene Datensätze werden direkt als bearbeitet markiert obwohl, sie nicht bearbeitet wurden. Bitte ändere das so, dass nur der aktuell bearbeitete Datensatz als bearbeitet markiert wird. So können wir das nicht verwenden.

vt1816 25.07.2015 03:56:44

AW: HILFE: Datensätze werden als bearbeitet makiert, obwohl sie nicht bearbeitet wurd
 
Hallo und willkommen hier im Forum.

In Deinem Update-Statment fehlt die richtige WHERE-Klausel.

Einradkohorte 25.07.2015 12:13:01

AW: HILFE: Datensätze werden als bearbeitet makiert, obwohl sie nicht bearbeitet wurd
 
Dankeschön :), ich versteh aber nicht genau was du meinst. Ich habe doch "WHERE oxtransstatus = 'NOT_FINISHED' AND `oxpaymenttype` = 'trosofortgateway_su'";. was habe ich denn übersehen?

Vielleicht kannst du mir ein link zu eine tutorial oder ähnlichem schicken damit ich das gescheit nachvollziehen kann und in Zukunft solche Fragen nichtmehr stellen muss :)

raiguen 27.07.2015 10:39:52

AW: HILFE: Datensätze werden als bearbeitet makiert, obwohl sie nicht bearbeitet wurd
 
Mit deiner WHERE-Klausel updatest du ALLE Datensätze, die dieser Bedingung entsprechen! Somit hat dein Chef schon recht.

Was du übersehen hast, ist die eindeutige ID oxid, die jeder Datensatz hat und die du ja auch in der foreach-Schleife verwendest.
Also musst du diese ID in die WHERE-Klausel des UPDATE-Statements einarbeiten:
PHP-Code:

$updstatus "UPDATE oxorder SET `oxtransstatus` = 'NOT_FINISHED_MODI' WHERE `oxid` = '$oxOrderID'"

Somit wird auch nur dieser passende Datensatz entsprechend geupdatet ;-)


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

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.