error in while? unexpected ... diversen :)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jeroen Jeroen

Jeroen Jeroen

17/11/2009 11:01:00
Quote Anchor link
Hoi,

Ik probeer een functie te bouwen die een datum uit mijn database haalt.
Nou dacht ik dat ik dat wel onder de knie had, maar wat ik ook doe, dit apparaat blijft maar unexpected errors geven.

De code is volledig zoals die in zen-cart gebruikt wordt, dus de sql query werkt zoals die daar staat. Kan iemand me zeggen wat hier fout gaat?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
33
34
35
function get_boek_datum($oId){
    global $db;
    //de boekingsdatum bepalen op basis van de order history
        //hier zit nog een fout in!
      $boekdatum_raw = "select orders_status_id, date_added from " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "';
      $db->Execute($boekdatum_raw);
      while (!$boekdatum_raw->EOF) {
          $this_status_id = $boekdatum_raw->fields['orders_status_id'];    
        $this_boekdatum = $boekdatum_raw->fields['date_added'];
        echo $this_status_id;
        echo $this_boekdatum;
              //if ($this_status_id == ''){
              //    continue;
              //}
              
            //if ($this_status_id == 2){
              //    $boek_datum = $this_boekdatum;
              //    $found = true;
              //    }
              //if (($this_status_id == 3) && (!$found)){
              //    $boek_datum = $this_boekdatum;
              //    $found = true;
              //    }
              //if (($this_status_id == 1) && (!$found)){
              //    $boek_datum = $this_boekdatum;
              //}  
              $boekdatum = 1;        
              
              //$boekdatum_raw->MoveNext();
          
          }    
          return $boekdatum;
      }// END function  get_boek_datum($oId)
      
      echo "boekdatum= " . get_boek_datum(1112);
 
PHP hulp

PHP hulp

06/11/2024 04:30:08
 
Jeroen Jeroen

Jeroen Jeroen

17/11/2009 11:25:00
Quote Anchor link
ok, er is iets wel iets met die sql, want als ik die uitcomment verdwijnt de foutmelding.

Als ik de query in mysql direct doe, krijg ik drie datums met drie status id's.

ik dacht dat ik met die while door elk van de drie zou "rollen", maar kennelijk is het anders.

Moet ik nou een array maken omdat die sql 3 waarden tegelijk krijgt?

Nu ik dit zo opschrijf snap ik het geloof ik al waar het mis gaat :)
 
Jaron T

Jaron T

17/11/2009 11:49:00
Quote Anchor link
Echo je query eens?
 
Jeroen Jeroen

Jeroen Jeroen

17/11/2009 12:20:00
Quote Anchor link
sorry, maar zelfs dat lukt me niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$oID = 112;
        //$this_boekdatum_array = array();
    $boekdatum_raw = $db->Execute("SELECT orders_status_id, date_added FROM " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "');
    echo $boekdatum_raw;


Hij geeft steevast iets als unexpected T_STRING in en dan 5 regels verder.

of:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$oID = 112;
        //$this_boekdatum_array = array();
    $boekdatum_raw = $db->Execute("SELECT orders_status_id, date_added FROM " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "');
    while (!$boekdatum_raw->EOF) {
    echo $boekdatum_raw;
    $boekdatum_raw->MoveNext();
  }


precies hetzelfde
 
Ruben

ruben

17/11/2009 12:31:00
Quote Anchor link
zo zou het moeten werken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$boekdatum_raw = "    select orders_status_id, date_added
                              from     TABLE_ORDERS_STATUS_HISTORY
                            WHERE orders_id = ".$oID." ";
Gewijzigd op 01/01/1970 01:00:00 door ruben
 
Koen

koen

17/11/2009 12:42:00
Quote Anchor link
je eindigt je loop met een return?? dan krijg je toch standaard de laatste waarde van die variabele?
 
Jeroen Jeroen

Jeroen Jeroen

17/11/2009 13:07:00
Quote Anchor link
heh, die return zit daar even in een briljante poging om in ierder geval nog "iets" uit die functie te krijgen. vlak daar voor zet ik hem ook op 1, dus de functie zoals die daar staat geeft altijd 1 terug hoopte ik. (als ie het zou doen natuurlijk :))

Het lijkt toch ergens in die query te zitten op 1 of andere manier.
In mysql werkt ie gewoon goed:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT orders_status_id, date_added FROM `orders_status_history` WHERE `orders_id` = '1112';

geeft:
orders_status_id     date_added
     1     2008-12-22 12:44:18
     2     2008-12-24 19:40:48
     3     2008-12-24 19:40:56


Kan het niet met dat datum veld te maken hebben op 1 of ander manier?

Het kromme is namelijk, dat als ik vlak daaronder een vergelijkbare query doe, maar op een andere tabel, dat ie hem dan wel slikt???

driving me nutz
 
Koen

koen

17/11/2009 13:10:00
Quote Anchor link
oops, iets anders,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$boekdatum_raw
= "select orders_status_id, date_added from " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "'";
?>


je mistte nog een " daar aan t eind
Gewijzigd op 01/01/1970 01:00:00 door koen
 
Jeroen Jeroen

Jeroen Jeroen

17/11/2009 13:46:00
Quote Anchor link
sjezus koen, ik kan wel janken haha,
minstens zes uur kwijt aan die quoot.

en inmiddels zoveel eruit gesloopt dat ik weer opnieuw kan beginnen :)
phew, ff doorbijten als newbie in php :)

reuze bedankt in ieder geval, ik kan weer door, klasse.
 
Koen

koen

17/11/2009 13:51:00
Quote Anchor link
jeroen, dat zal wel vaker gebeuren ;)
btw tip:
als je je script aanpast, sla dan een back-up op.
Gewijzigd op 01/01/1970 01:00:00 door koen
 
Jeroen Jeroen

Jeroen Jeroen

18/11/2009 14:25:00
Quote Anchor link
bedankt allemaal, het werkt nu. en de tip ter harte genomen :)
brengt me trouwens op nog een vraagje:

gebruiken jullie (of zijn er...) goede ontwikkelomgevingen voor php?
Ik gebruik al eclipse voor java, en zag daar ook iets voor php in staan maar kwam er nog niet helemaal uit.

Zit nu alles te knutselen in crimson editor, maar iets als eclipse met syntax checking enzo zou wel iets voor mij kunnen zijn ;)

groeten,
jeroen
 
Jeroen Jeroen

Jeroen Jeroen

25/11/2009 13:52:00
Quote Anchor link
Ik loop toch nog tegen iets aan wat ik niet begrijp.
Ik hoop dat jullie me uit kunnen leggen wat ik hier over het hoofd zie.

De functie ziet er nu als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
33
34
function get_boek_datum($oID){
    global $db;
    $found = false;
    //de boekingsdatum bepalen op basis van de order history
    $boekdatum_raw = $db->Execute("SELECT orders_status_id, date_added FROM " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "'");

        while (!$boekdatum_raw->EOF) {
            $this_status_id = $boekdatum_raw->fields['orders_status_id'];
            $this_boekdatum = $boekdatum_raw->fields['date_added'];
                if ($this_status_id == ''){
                      continue;
                      }
                if ($this_status_id == 2){
                    $boek_datum = $this_boekdatum;
                    $found = true;
                }
                  if (($this_status_id == 3) && (!$found)){
                      $boek_datum = $this_boekdatum;
                      $found = true;
                  }
                  if (($this_status_id == 7) && (!$found)){
                      $boek_datum = $this_boekdatum;
                      $found = true;
                  }
                  if (($this_status_id == 1) && (!$found)){
                      $boek_datum = $this_boekdatum;
                      //$found = true;
                  }
        $boekdatum_raw->MoveNext();
      }

      $boek_datum = date("d-m-Y", mktime(0,0,0, substr($boek_datum, 5, 2), substr($boek_datum, 8, 2), substr($boek_datum, 0, 4)));
      return $boek_datum;
    }// einde functie get_boek_datum


De SQL query geeft de volgende waarden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
1      2009-09-26 16:01:08
4     2009-09-27 12:28:17
7     2009-10-14 21:55:40


Volgens mij moet ik als boek_datum de waarde bij 7 eruit krijgen omdat die als eerste "hit" in de if statement en daar de waarde voor found op true zet.

Echter: als ik in de laatste if (==1) de $found = true niet uitcomment, dan geeft ie de waarde behorende bij status_id is 1 ipv die van 7.

Dat kan toch helemaal niet?
Als de functie in de if (==7) found al op true zet, hoe kan ie dan ooit nog in de laatste if (==1) terecht komen?

bedankt,
jeroen
 
- SanThe -

- SanThe -

25/11/2009 14:02:00
Quote Anchor link
Volgens mij geeft die functie altijd maar één (de laatst gevonden) datum return.
 
Jeroen Jeroen

Jeroen Jeroen

25/11/2009 14:20:00
Quote Anchor link
dat is niet de bedoeling, als er een status_id 2 is moet ie stoppen.
als er geen status_id 2 is maar wel een status_id 3 moet ie daar stoppen enzovoort.

Ik had de functie ook al geprogrammeerd met de return in de if statements zelf, (dus zonder dat $found ertussen) maar dan gedraagt ie zich hetzelfde....

Kennelijk doe ik iets fundamenteels verkeerd, maar ik weet niet wat dat is.
Kan jij me op weg helpen zodat die functie wel doet wat ik wil?

bedankt,
jeroen
 
- SanThe -

- SanThe -

25/11/2009 14:22:00
Quote Anchor link
Dan is dit overbodig
$found = true;
En moet je dit gebruiken.
break;


Edit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function get_boek_datum($oID)
{

    global $db;
    //de boekingsdatum bepalen op basis van de order history
    $boekdatum_raw = $db->Execute("SELECT orders_status_id, date_added FROM " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "'");
    while (!$boekdatum_raw->EOF)
    {

        $this_status_id = $boekdatum_raw->fields['orders_status_id'];
        $this_boekdatum = $boekdatum_raw->fields['date_added'];
        if (in_array($this_status_id, array(2, 3, 7, 1)))
        {

            $boek_datum = $this_boekdatum;
            break;
        }

        $boekdatum_raw->MoveNext();
    }

    $boek_datum = date("d-m-Y", mktime(0,0,0, substr($boek_datum, 5, 2), substr($boek_datum, 8, 2), substr($boek_datum, 0, 4)));
    return $boek_datum;
}
// einde functie get_boek_datum
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Jeroen Jeroen

Jeroen Jeroen

25/11/2009 14:54:00
Quote Anchor link
Ha, de code is er zo in ieder geval al een stuk op vooruit gegaan, dit ziet er wel wat beter uit ja, maar deze werkt helaas ook niet.
Ik krijg uit deze functie nog steeds de waarde die bij 1 hoort en niet de waarde die ik wil, namelijk die van 7.

Heb de code nu exact zoals hierboven maar hij "breakt" niet!
 
- SanThe -

- SanThe -

25/11/2009 15:07:00
Quote Anchor link
Wil je eerst de hoogste?
Gebruik dan ORDER BY en zet ze op volgorde.
 
Jeroen Jeroen

Jeroen Jeroen

25/11/2009 15:24:00
Quote Anchor link
Jaja, dat is een hele goeie, ik moet inderdaad order by gebruiken omdat momenteel de status_id 1 als eerste uit deze query komt, en die wil ik sowieso alleen maar als niks anders matcht.

Maar dan heb ik nog steeds een probleem, want de waarde 2 heeft de grootste voorkeur, als die bestaat wil/moet ik die hebben als datum en maken de andere waardes niet meer uit.

Als waarde 2 er niet is dan moet ik de waarde voor id 3 hebben.
Als die er niet is dan de waarde voor 7 en heb ik dan nog niks dan pas de waarde voor 1.
 
Jeroen Jeroen

Jeroen Jeroen

25/11/2009 15:31:00
Quote Anchor link
dat verklaart trouwens ook waarom mijn eerste query niet goed in elkaar zat, die query kwam gewoon als eerste met die status_id 1 langs en dan was ie klaar...
Het wordt weer een leerzame middag merk ik al ;)

Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen Jeroen
 
- SanThe -

- SanThe -

25/11/2009 15:35:00
Quote Anchor link
Tja, dat is lastig want hij pakt nu de eerste die die tegenkomt.
Vanwaar die (on)logica?
 
Jeroen Jeroen

Jeroen Jeroen

25/11/2009 16:04:00
Quote Anchor link
De (on) logica zit hem in de acties die de orders mogelijk kunnen krijgen.
1. in behandeling
2. vandaag verzonden
3. afgeleverd
4. bijgewerkt
5. wordt verwerkt
6. geannuleerd
7. afgehaald

Waar ik de functie voor nodig heb is om de best mogelijke datum voor de boekhouding te bepalen, wat weer in een programma buiten de webinterface zit.

De best mogelijke datum om te boeken is 2. vraag me niet waarom, dat zegt het vrouwtje en die logica ga ik helemaal niet over nadenken ;)

maar ja, er zijn ook afhalers, veel minder, maar die krijgen dus nooit 2 maar 7, dan is dat de beste datum.

dan heb je ook nog foutjes (het doorschuiven van bestellingen is handmatige actie) en sowieso wil je alles wel boeken dus als 2 en 7 er niet zijn, wil je de datum van 3 als beste datum. Om dezelfde reden is er ook de datum 1 die in principe nooit getriggered zou moeten worden, maar deze zit erin omdat elke order altijd een waarde heeft op 1 (automatisch) dus als er iemand iets helemaal loopt te ver$%^& dan heeft ie in ieder geval nog een waarde

Ik heb de code nu als volgt gemaakt;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
33
function get_boek_datum($oID)
{
    global $db;
    //de boekingsdatum bepalen op basis van de order history
    $boekdatum_raw = $db->Execute("SELECT orders_status_id, date_added FROM " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id = '" . $oID . "' ORDER BY orders_status_id DESC");

    while (!$boekdatum_raw->EOF)
    {
        $this_status_id = $boekdatum_raw->fields['orders_status_id'];
        $this_boekdatum = $boekdatum_raw->fields['date_added'];
        
        if (in_array($this_status_id, array(2, 3, 7, 1)))
        {
            if (($this_status_id == 7) || ($this_status_id == 3))
            {
            $boek_datum = $this_boekdatum;
            }
            if ($this_status_id == 2)
            {
                $boek_datum = $this_boekdatum;
                break;
            }
            if (($this_status_id == 1) && ($boek_datum == ''))
            {
                $boek_datum = $this_boekdatum;
                break;
            }
        }
        $boekdatum_raw->MoveNext();
    }
      $boek_datum = date("d-m-Y", mktime(0,0,0, substr($boek_datum, 5, 2), substr($boek_datum, 8, 2), substr($boek_datum, 0, 4)));
      return $boek_datum;
}// einde functie get_boek_datum

Bij status 7 & 3 geef ik geen break;
en bij status 1 komt ie alleen nog als de datum nog steeds niks heeft.

Volgens mij moet ie goed zijn zo, wel ietsje minder mooi maar ja...

Bedankt voor je hulp!

ps. geen bewuste bump, maar een refresh knop op een verkeerd moment, zag het gelijk maar je eigen post verwijderen kan niet...

edit: nog even ter aanvulling, in vrijwel alle gevallen heeft een bestelling zowel status 3 als status 2. alleen status 3 is vaak een dag of wat later als status 2. als status 2 niet de voorkeursdatum zou zijn voor de boekingen dan zou het inderdaad mooi op te lossen zijn met de waarde die hij als eerste tegenkomt, maar dat is dus niet het geval :)
Gewijzigd op 01/01/1970 01:00:00 door Jeroen Jeroen
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.