Avatar billede bgo Nybegynder
04. april 2005 - 16:19 Der er 10 kommentarer og
1 løsning

forkert værdi indsat ved UPDATE

Jeg forstår det ikke. Jeg har en sql der ikke indsætter den rigtige værdi i etfelt i mysql i et script. Istedet indsætter den en værdi jeg ikke aner hvor kommer fra. Jeg har echo'et den fulde sql-streng og den ser rigtig nok ud:

UPDATE seti SET curcredit = 19133.17 WHERE memberid = 1

Men af én eller anden årsag bliver den ved med at indsætte værdien 10027

Det mest underlige er, at lidt senere i scriptet har jeg præcis den samme kode, hvor det bare er en anden tabel der skal indsættes en værdi i, og der gør den det rigtigt...

et udsnit

$sql = "SELECT * FROM members WHERE (id > 0) AND (id < 16)";

$status=mysql_query("$sql") or die (mysql_error());

while ($row = mysql_fetch_array($status)){
$boinctotal=0.00;
$memberid=$row["id"];
echo("$memberid<br>");
$totalcredit=0.00;
//SETI

$sql2 = "SELECT * FROM seti WHERE memberid = $memberid";

$status2=mysql_query("$sql2") or die (mysql_error());

while ($row2 = mysql_fetch_array($status2)){
$id=$row2["accountnr"];
$curcredit=$row2["curcredit"];
echo("$id x=$x project=$projects[$x]<br>credit $curcredit<br>");

include('inc/inc_get_project_change2.php');
include('inc/inc_get_modifiers.php');
include('inc/inc_parsing2.php');
echo("$project");
if(!$stats_array['error']) {
    switch($parsing[$project]) {
        case 'parse_wapstats':
            $teamname=$stats_array['teamname'];
                     
            $totalcredit=$stats_array['tot_credit'];
                       
            $avaragecredit=$stats_array['avg_credit'];
                       
            $teamtotalcredit=$stats_array['team_tot_credit'];
                     
            $teamavaragecredit=$stats_array['team_avg_credit'];
                       
            break;
        case 'parse_show_user_xml':
            $totalcredit=$stats_array['tot_credit'];
                       
            $avaragecredit=$stats_array['avg_credit'];
                                   
            break;
        case 'parse_website':
            $teamname=$stats_array['teamname'];
                       
            $totalcredit=$stats_array['tot_credit'];
                     
            $avaragecredit=$stats_array['avg_credit'];
                     
           
            break;
       
    }
}
if (!$stats_array['teamname']=""){
if($memberid==1){
$allteamtotal+=$teamtotalcredit;
$allteamavarage+=$teamavaragecredit;
}
$boinctotal+=$totalcredit;
if($curcredit<$totalcredit){
$sql5 = "UPDATE seti SET curcredit = $totalcredit WHERE memberid = $memberid"; 'HER GÅR DET GALT
mysql_query("$sql5");
}
echo("teamname $teamname<br>totalcredit $totalcredit<br>avarage credit $avaragecredit<br>teamtotal $teamtotalcredit<br>teamavarage $teamavaragecredit<br>all teamtotal $allteamtotal<br>all teamavarage $allteamavarage<br>total credit boinc $boinctotal<br>curcredir $curcredit<br>$sql5<br><br>");
}


if($memberid==1){
$sql3 = "SELECT * FROM esea WHERE id = 1";

$status3=mysql_query("$sql3") or die (mysql_error());

while ($row3 = mysql_fetch_array($status3)){
if($teamtotalcredit>$row3["total"]){
$sql4 = "UPDATE esea SET total = $teamtotalcredit, avarage = $teamavaragecredit WHERE id = 1";
mysql_query("$sql4");
}
}
}
}

$teamtotalcredit=0;
$totalcredit=0.00;
$x+=1;


//PREDICTOR



$sql2 = "SELECT * FROM predictor WHERE memberid =$memberid";

$status2=mysql_query("$sql2") or die (mysql_error());

while ($row2 = mysql_fetch_array($status2)){
$id=$row2["accountnr"];
$curcredit=$row2["curcredit"];
echo("$id x=$x project=$projects[$x]<br>credit $curcredit<br>");

include('inc/inc_get_project_change2.php');
include('inc/inc_get_modifiers.php');
include('inc/inc_parsing2.php');
echo("$project");
if(!$stats_array['error']) {
    switch($parsing[$project]) {
        case 'parse_wapstats':
            $teamname=$stats_array['teamname'];
                     
            $totalcredit=$stats_array['tot_credit'];
                       
            $avaragecredit=$stats_array['avg_credit'];
                       
            $teamtotalcredit=$stats_array['team_tot_credit'];
                     
            $teamavaragecredit=$stats_array['team_avg_credit'];
                       
            break;
        case 'parse_show_user_xml':
            $totalcredit=$stats_array['tot_credit'];
                       
            $avaragecredit=$stats_array['avg_credit'];
                                   
            break;
        case 'parse_website':
            $teamname=$stats_array['teamname'];
                       
            $totalcredit=$stats_array['tot_credit'];
                     
            $avaragecredit=$stats_array['avg_credit'];
                     
           
            break;
       
    }
}
if (!$stats_array['teamname']=""){
if($memberid==1){
$allteamtotal+=$teamtotalcredit;
$allteamavarage+=$teamavaragecredit;
}
$boinctotal+=$totalcredit;
echo("teamname $teamname<br>totalcredit $totalcredit<br>avarage credit $avaragecredit<br>teamtotal $teamtotalcredit<br>teamavarage $teamavaragecredit<br>all teamtotal $allteamtotal<br>all teamavarage $allteamavarage<br>total credit boinc $boinctotal<br><br>");
}
if($curcredit<$totalcredit){
$sql2 = "UPDATE predictor SET curcredit = $totalcredit WHERE memberid = $memberid"; 'HER GÅR DET GODT
mysql_query("$sql2");
}

if($memberid==1){
$sql3 = "SELECT * FROM esea WHERE id = 2";

$status3=mysql_query("$sql3") or die (mysql_error());

while ($row3 = mysql_fetch_array($status3)){
if($teamtotalcredit>$row3["total"]){
$sql4 = "UPDATE esea SET total = $teamtotalcredit, avarage = $teamavaragecredit WHERE id = 2";
mysql_query("$sql4");
}
}
}

}

$teamtotalcredit=0;
$x+=1;

skal lige sige at jeg har flyttet lidt på det for at få sql'en udskrevet, men samme fejl
Avatar billede coderdk Praktikant
04. april 2005 - 16:37 #1
Hvad siger en:

DESC seti;

? Type etc?
Avatar billede bgo Nybegynder
04. april 2005 - 17:22 #2
Field Type Null Key Default Extra
id bigint(20)  PRI NULL auto_increment
memberid bigint(20)    0 
projectid varchar(50)       
approved binary(1)    0 
official binary(1)    0 
stat binary(1)    0 
credit binary(1)    0 
accountid varchar(50)       
accountnr bigint(20)    0 
curcredit float    0
Avatar billede coderdk Praktikant
04. april 2005 - 17:24 #3
Ja, ok det ser lidt underligt ud - Det burde da virke ;)
Avatar billede bgo Nybegynder
04. april 2005 - 17:35 #4
ja, jeg fatter det heller ikke :D Opsætningen af predictor tabellen er nøjagtig magen til...

Prøver lige at smide stumperne ud i inkluderede filer, så jeg kan få et bedre overblik (og nemmere kommentere hele afsnit ud i min fejlsøgen) ;)
Avatar billede bgo Nybegynder
04. april 2005 - 17:53 #5
hov - opdager at fejlen sandsynligvis ligger i den ydre løkke..

hvor memberid egentlig skulle være 3 er den 1 - hvor den egentlig skulle være 18 er den 5 - så der sker nogle overskrivninger der ikke burde finde sted.

Tager lige resten over smider ud så jeg kan få overblik over den ydre løkke
Avatar billede bgo Nybegynder
04. april 2005 - 19:02 #6
tilsyneladende er det gået helt galt med indkapslingen - så jeg forsøger med om total omstrukturering
Avatar billede bgo Nybegynder
04. april 2005 - 21:20 #7
hmm. underligt. det her:

<?
$sql2 = "SELECT * FROM seti WHERE memberid = $memberid";

$status2=mysql_query("$sql2") or die (mysql_error());

while ($row2 = mysql_fetch_array($status2)){
$id=$row2["accountnr"];
$curcredit=$row2["curcredit"];
echo("$id x=$x project=$projects[$x]<br>credit $curcredit<br>");

include('inc/inc_get_project_change2.php');
include('inc/inc_get_modifiers.php');
include('inc/inc_parsing2.php');
echo("$project");

if(!$stats_array['error']) {
    switch($parsing[$project]) {
        case 'parse_wapstats':
            $teamname=$stats_array['teamname'];
                     
            $totalcredit=$stats_array['tot_credit'];
                       
            $avaragecredit=$stats_array['avg_credit'];
                       
            $teamtotalcredit=$stats_array['team_tot_credit'];
                     
            $teamavaragecredit=$stats_array['team_avg_credit'];
                       
            break;
        case 'parse_show_user_xml':
            $totalcredit=$stats_array['tot_credit'];
                       
            $avaragecredit=$stats_array['avg_credit'];
                                   
            break;
        case 'parse_website':
            $teamname=$stats_array['teamname'];
                       
            $totalcredit=$stats_array['tot_credit'];
                     
            $avaragecredit=$stats_array['avg_credit'];
                     
           
            break;
       
    }
}

if (!$stats_array['teamname']==""){
if($memberid==1){
$allteamtotal+=$teamtotalcredit;
$allteamavarage+=$teamavaragecredit;
}
$boinctotal+=$totalcredit;
}


if($curcredit<$totalcredit){
$sql5 = "UPDATE seti SET curcredit = $totalcredit WHERE memberid = $memberid";
//mysql_query("$sql5");
}
echo("teamname $teamname<br>totalcredit $totalcredit<br>avarage credit $avaragecredit<br>teamtotal $teamtotalcredit<br>teamavarage $teamavaragecredit<br>all teamtotal $allteamtotal<br>all teamavarage $allteamavarage<br>total credit boinc $boinctotal<br>curcredir $curcredit<br>$sql5<br><br>");

}
?>

giver det her output (udsnit):

1
146735 x=0 project=seti
credit 0
setiteamname ESEA (Earth Space Exploration Agency)
totalcredit 19133.17
avarage credit 48.48
teamtotal 19012.10
teamavarage 409.39
all teamtotal 19012.1
all teamavarage 409.39
total credit boinc 19133.17
curcredir 0
UPDATE seti SET curcredit = 19133.17 WHERE memberid = 1

2
2839011 x=0 project=seti
credit 0
setiteamname None
totalcredit 0.00
avarage credit 0.00
teamtotal -
teamavarage -
all teamtotal 19012.1
all teamavarage 409.39
total credit boinc 0
curcredir 0
UPDATE seti SET curcredit = 19133.17 WHERE memberid = 1

3
7833542 x=0 project=seti
credit 0
setiteamname None
totalcredit 1683.17
avarage credit 53.98
teamtotal -
teamavarage -
all teamtotal 19012.1
all teamavarage 409.39
total credit boinc 1683.17
curcredir 0
UPDATE seti SET curcredit = 1683.17 WHERE memberid = 3

jeg er ikke helt med på hvorfor SQL'en kommer med i 2'eren - og hvorfor $totalcredit og $memberid har de værdier på det tidspunkt - jeg mener, $memberid udskrives jo i første omgang korrekt som "2", men bliver til "1" når SQL'en udskrives. Og $totalcredit gik jeg ud fra blev til 0..

Under alle omstændigheder betyder det at der vel foregå en masse unødvendige opdateringer af samme felt i samme række - og det er sandsynligvis dér der går galt når jeg kører hele molevitten..
Avatar billede bgo Nybegynder
04. april 2005 - 21:29 #8
åhh jeg kvaj.. glemte da helt at $sql5 jo ikke bliver opdateret i 2'eren, og heller ikke fravælges i udskriften, så selvfølgelig har de de værdier *klasker mig selv på panden* :D
Avatar billede bgo Nybegynder
04. april 2005 - 22:14 #9
Jeg fandt brøleren - naturligvis et andet sted end der hvor jeg leder efter den *lol* typisk..

Det var simpelthen et sted hvor jeg opdaterer den forkerte tabel. Så er det jo klart det egentlig ser ud til at virke, men får de forkerte værdier alligevel.

De 10027 kommer fra dette sted, men skulle egentlig være 10027.05 - det er så en anden sag. Øvrige rækker i den tabel modtager fint float. Nå, men jeg fandt fejlen ;)
Avatar billede coderdk Praktikant
04. april 2005 - 22:14 #10
hehe ;)
Avatar billede bgo Nybegynder
04. april 2005 - 22:21 #11
jah, sådan kan det gå - ku' være jeg skulle indsætte en nulstilling af sql5 et sted *lol*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-supporter til Level 3 support på Forsvarets operative C2 systemer

Politiets Efterretningstjeneste

Data engineer til PET

Capgemini Danmark A/S

Java Engineer

HusCompagniet A/S

Senior data engineer