PHP strpos() foutmelding

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik lees uit een txt-bestand een voorraad met producten, die als volgt genoteerd staan:

"art#","maat","omschrijving","prijs","voorraad"

Nu gebruik ik de volgende code:
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
28
29
30
31
32
33
34
35
    while(!feof($fopen)){
        $offset = (int)2;
        $komma = ",";
        $data = fgets($fopen,100);
        //artikelnummer
        $einde_artikelnummer = strpos($data, ",");
        $artikelnummer = substr($data,1,$einde_artikelnummer-2);
        $rest = substr($data,$einde_artikelnummer);
        //maat van het artikel
        $einde_maat = strpos($rest,",",2);
        $maat = substr($rest,2,$einde_maat-3);
        $rest2 = substr($rest,$einde_maat);
        //omschrijving van het artikel
        $einde_omschrijving = strpos($rest2,",",2);
        $omschrijving = substr($rest2,2,$einde_omschrijving-3);
        $rest3 = substr($rest2,$einde_omschrijving);
        //prijs
        $einde_prijs = strpos($rest3,",",2);
        $prijs = substr($rest3,1,$einde_prijs-1);
        $rest4 = substr($rest3,$einde_prijs);
        //voorraad
        $voorraad = substr($rest4,1);               
        echo("
                <tr>
                    <td width=\"10%\">$artikelnummer</td>
                    <td width=\"10%\">$maat</td>
                    <td>$omschrijving</td>
                    <td>$prijs</td>
                    <td>$voorraad</td>
                </tr>
        ");
        
        
            
    }//while


Ik krijg echter de volgende foutmelding:
code:
1
2
3
4
5
Warning: strpos(): Offset not contained in string. in /usr/local/psa/home/vhosts/imvdesign.nl/httpdocs/vanzijlbanden/bandenvoorraad.php on line 30

Warning: strpos(): Offset not contained in string. in /usr/local/psa/home/vhosts/imvdesign.nl/httpdocs/vanzijlbanden/bandenvoorraad.php on line 34

Warning: strpos(): Offset not contained in string. in /usr/local/psa/home/vhosts/imvdesign.nl/httpdocs/vanzijlbanden/bandenvoorraad.php on line 38


Wat is er mis?

Ik kom er niet uit.

Weet iemand toevallig ook hoe ik makkelijker deze data in een tabel kan zetten, aangezien het laden van de pagina nu redelijk lang duurt...misschien gaan werken met arrays?

edit:

Dit worden dus de regels 10,14 en 18

[ Voor 19% gewijzigd door Verwijderd op 22-10-2005 15:41 ]


Acties:
  • 0 Henk 'm!

  • .daan
  • Registratie: Januari 2002
  • Laatst online: 23-09-2023

.daan

{visibility:hidden;}

Ik gok dat de regelnummers in de foutmelding niet meer overeenkomen met de regelnummers in het stuk code dat je gepost hebt...kun je dit voor het gemak misschien even aangeven?

public void ik()


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Je geeft aan dat je vanaf teken 2 wil zoeken (strpos(x, y, 2)). Is die string wel lengte 2? Daar doet mij de melding aan denken...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sjroorda schreef op zaterdag 22 oktober 2005 @ 15:41:
Je geeft aan dat je vanaf teken 2 wil zoeken (strpos(x, y, 2)). Is die string wel lengte 2? Daar doet mij de melding aan denken...
De string is zeg maar de rest van de regel als ik het artikelnummer eraf gehaald heb.

Dus de regel ziet er in het begin als volgt uit:
"100000","225/75R16","BFGOODRICH TRAIL T/A225/75R16",0.00,0.00

Als ik het artikelnummer eraf gehaald heb, is de rest dus:
,"225/75R16","BFGOODRICH TRAIL T/A225/75R16",0.00,0.00

Dan zou die dus vanaf positie 2 moeten gaan kijken naar de volgende komma...hieruit komt dan de maat....tenminste zo zie ik het...

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Test eens met strlen() en dmv prints van $rest wat $rest op elk kritiek punt is. :)

[ Voor 88% gewijzigd door Voutloos op 22-10-2005 15:47 ]

{signature}


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Heb je al een 'echo' gedaan op die variabelen om te kijken of de substr wel goed gaat?

offtopic:
Bovenin je code definieer je 2 variabelen $offset en $komma, gebruik die dan ook :)

Acties:
  • 0 Henk 'm!

  • ripperke
  • Registratie: Augustus 2003
  • Laatst online: 19-08 16:06

ripperke

w00t!

mss niet echt oplossing voor je probleem, maar waarom gebruik je niet gewoon de explode() functie ? :?

If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP


Acties:
  • 0 Henk 'm!

  • Boogie
  • Registratie: Januari 2001
  • Laatst online: 06-11-2024
Waarom gebruik je geen explode?
PHP:
1
2
3
4
$regelarray=explode($regel);
$regelarray[0] //is dan je artikelnummer, enz.
//kijk maar eens met
print_r($regelarray);

[ Voor 31% gewijzigd door Boogie op 22-10-2005 15:51 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Overigens kan dit wellicht veel handiger, aangezien alle waarden door hetzelfde token (hier een komma) gescheiden staan. Lees strtok() en aanverwante functies eens na. :)

{signature}


Acties:
  • 0 Henk 'm!

  • nXXt
  • Registratie: November 2004
  • Laatst online: 19-09 09:36

nXXt

Carpe omnia

ripperke schreef op zaterdag 22 oktober 2005 @ 15:48:
mss niet echt oplossing voor je probleem, maar waarom gebruik je niet gewoon de explode() functie ? :?
Dat vroeg ik me ook af, volgens mij is dat een beter optie (met eventueel wat getweak en strtok).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ga ik gelijk proberen!!!

Dank jullie horen nog van mij...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Gelukt!

Dank jullie wel.

Hij doet er nog steeds even over om alles te laden (maar ja zijn ook ongeveer 10.000 regels.....)

Kan dit sneller als ik met arrays werk?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ik weet niet wat je verder doet met deze code. Je kan gebruik maken van caching of misschien is het wel handiger om het gewoon eens in een DB te stoppen. Ooit wordt deze lijst toch te lang (wellicht is hij dat met 10.000 items al :+ ), dus een leuk relationeel DBtje met tevens dingen als product categoriën zou dan al een hele verbetering zijn.

Bij elke pagina opnieuw dat hele tekstbestand inlezen is gewoon redelijk duur.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De bedoeling is dat iemand elke ochtend deze lijst met voorraad upload, zodat deze actueel te zien is op de site. Dus hij hoeft niet in elke pagina de lijst te laten zien.

Via een soort winkelwagen-systeem moet alleen te zien zijn wat de voorraad is.

Als ik de hele lijst in een database zet, duurt dat niet onwijs lang dan? Dat is namelijk natuurlijk wel makkelijker werken....

Kan natuurlijk ook zo doen dat als hij het bestand upload, dat hij gelijk een pagina laadt, die dus alles in de database zet.....dan heeft de klant er verder geen last van...

Denk dat ik dat maar doe. Dan kan de klant gewoon uit de database een product halen...en gelijk de voorraad zien.

Dank voor de hulp

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op zaterdag 22 oktober 2005 @ 16:15:
De bedoeling is dat iemand elke ochtend deze lijst met voorraad upload, zodat deze actueel te zien is op de site. Dus hij hoeft niet in elke pagina de lijst te laten zien.
Dan kan je net zo goed ipv dit tekstbestand de uitkomst van dit scriptje elke dag uploaden en daarmee heb je een soort handmatige caching. :) Vereist geen dev-tijd en de klant ziet een site met betere responstijden.
Overigens vraag ik me dus af als je geen product categoriën hebt, hoe leuk de gemiddelde klant het vind om een item te zoeken in zo'n lange lijst. ;)
Als ik de hele lijst in een database zet, duurt dat niet onwijs lang dan? Dat is namelijk natuurlijk wel makkelijker werken....
Maak in plaats van een regeltje output naar een <TR> een regeltje output naar een INSERT query en je bent klaar. :) Elke keer 10.000 items uit een DB trekken en weergeven is echter niet per se sneller dan die gegeven uit een tekstbestand halen. Maar goed, hangt allemaal van de wensen af. Met een DB wil je automatisch ook wel een online admin, maar als je die admin eenmaal hebt is de beschikbaarheid van 1 product wijzigen een simpel muisklikje ipv een tekstbestand wijzigen en uploaden.
Kan natuurlijk ook zo doen dat als hij het bestand upload, dat hij gelijk een pagina laadt, die dus alles in de database zet.....dan heeft de klant er verder geen last van...
Of doe iets met caching, of voer nieuwe items direct toe aan de DB. Elke dag de DB helemaal opnieuw vullen is een beetje onzin.

[ Voor 11% gewijzigd door Voutloos op 22-10-2005 16:24 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem is dat ze werken met een of ander voorraad-programma dat dus verder niet anders kan dan een txt-bestand als uitvoer geven. En om nou elke dag in 10000 producten een aantal wijzigingen te gaan doen is misschien niet helemaal haalbaar.

Op zich inderdaad een pagina uploaden is misschien nog makkelijker...in plaats van het bestandje en daarna de pagina laden...

Denk dat ik het idd maar in een DB zet. Moet ik nog even over nadenken. Bedankt voor de reacties iig..

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Is fgetcsv niks voor je :? Het ziet er iig aardig als csv uit en dan bespaart het je een hoop werk om het ook gewoon met de daarvoor bedachte functies te behandelen ;)

Ow en 10000 is niet veel voor een database. Als je het goed opzet maakt het allemaal weinig uit, zolang je maar probeert operaties die maar 1x per dag hoeven niet voor elke pageview ofzo te doen ;)
Pagina: 1