[ingewikkeld] tekstbestand als database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Leendert

leendert

23/01/2007 15:25:00
Quote Anchor link
Hallo allemaal.

Is het mogelijk om een tekstbestand als 'database' te gebruiken?

De 'records' worden afgeloten met een: '|'
en de 'velden' met een enter

er zijn 3 kolommen:
- artikel nummer
- omschrijving
- prijs

er moet gezocht kunnen worden op de omschrijving en artikelnummer.

is dit mogelijk? Ik heb echt helemaal geen verstand van werken met een tekstbestandje. Maar dit is het handigst zo, de gebruiker hoeft dan alleen het tekstbestandje te uploaden, alls gewoon zo in een mysql tabel zetten heeft ook geen zin.

met welke functie kan je zoeken in een tekstbestand en hoe laat je dan de producten zien die overeen komen met de zoekopdracht?

En als je op omschrijving zoekt hoeft het niet exact overeen tekomen.

Weet je hier een voorbeeldscript van of een tutorial of iets, of je kan mij uitleggen hoe dit werkt, Alvast bedankt!
 
PHP hulp

PHP hulp

19/04/2024 13:32:58
 
Joren de Wit

Joren de Wit

23/01/2007 15:33:00
Quote Anchor link
Het kan wel, maar ik vraag me toch af waarom je hier geen database voor wilt gebruiken?

Wat je moet gaan doen is dat tekstbestandje met bijvoorbeeld file() uitlezen. Elke nieuwe regel (dus in principe elk record) komt onder een aparte key in een array te staan. Vervolgens zou je die entrys in de database met explode() kunnen splitsen zodat er een multidimensionale array ontstaat.

Dan zou je met array_keys() kunnen gaan zoeken op een omschrijving. Ik denk wel dat je dit in een recursieve functie moet gaan verwerken omdat je met een multidimensionale array te maken hebt.

Als je de keys gevonden hebt, kun je de gegevens uit de array tonen...

ps. Nogmaals, ik zou je toch echt aanraden om hier een database voor te gebruiken. Als je namelijk met een tekst bestandje gaat werken verlies je de uitermate grote kracht van een database!
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Leendert

leendert

23/01/2007 15:37:00
Quote Anchor link
waarom: omdat het geen zin heeft om precies hetzelfde zo in een tabel te ploffen. Dan heb je ten eerste allerlei dubbele records en alles.
En ik vind dit wel een uitdaging omdat ik dit echt nog nooit gedaan hebt en zo leer ik weer wat :)

is het geen probleem om iets van 14.000 velden in een array te hebben?

Kijk dat is weer wel een nadeel. Normaal haal je alleen uit de database wat je nodig hebt en nu moet je eerst alles in ene array zetten. Of zie ik dit verkeerd?

verder bedankt voor je uitleg!
 
Joren de Wit

Joren de Wit

23/01/2007 15:42:00
Quote Anchor link
Een array met 14.000 keys is veel, maar moet opzich geen probleem zijn. Ik weet niet wat de prestaties zijn met het zoeken door zo'n array en of dat de snelheid van je script heel erg gaan beïnvloeden.

En ja, je moet elke keer eerst alle gegevens ophalen.

En daarnaast wat je zeg over de database: hoezo heeft het geen zin om deze informatie in een database te zetten? Ik denk zelfs (weet wel zeker) dat het meer nut heeft om deze informatie met behulp van een database te verwerken dan alles gewoon in een tekst bestandje te knallen.

En de omschrijven die je geeft lijkt me al een prima opbouw van een tabel:

artikelen
----------
artikelnummer
omschrijving
prijs
 
Leendert

leendert

23/01/2007 15:46:00
Quote Anchor link
Ja, ik ga het denk ik tog maar in een database zetten.

Mij lijkt het tog wel traag, het bestandje wat dan ingelezen moet worden is ongeveer 4mb, beetje teveel lijkt me.

Maar de producten moeten wekelijks vernieuwd worden. Door de eigenaar waarvoor ik het maakt. Dit moet het liefts zo eenvoudig en snel mogelijk gaan.

Is er een scriptje dat je een tekstbestand upload en dat het script alles automatisch in de database zet. phpmyadmin heeft deze functie in ieder geval wel. Dus het moet kunnen.
 
Joren de Wit

Joren de Wit

23/01/2007 15:52:00
Quote Anchor link
Jep je kunt in phpmyadmin gewoon een csv bestandje importeren. Je kunt dan ook aangeven welke scheidingstekens je gebruikt...

Over het beheren van de database: schrijf een scriptje dat de gebruiker in staat stelt om producten toe te voegen, aan te passen en te verwijderen. Dat gaat nog sneller en zal zelfs nog minder fouten opleveren dan het werken met een tekst bestandje.
 

23/01/2007 15:54:00
Quote Anchor link
En even second opinion: Blanche heeft helemaal gelijk, het is gekkenwerk om zoiets in een tekstbestand te pompen, dit is nou precies waar databases voor gemaakt zijn. En bovendien is het inderdaad ook het handigst om gewoon een scriptje te maken waarin je de klant in staat stelt om makkelijk gegevens in te voeren, te wijzigen en te verwijderen.
 
Leendert

leendert

23/01/2007 15:56:00
Quote Anchor link
Ja okej, zulke scriptjes heb ik wel.
Maar de gebruiker moet geen losse producten toevoegen maar iets van 14.000 tegelijk en deze staan in een tekst of cvs bestandje.

Dus ik wil dezelfde functie als phpmyadmin heeft in de adminpanel van de shop maken, zodat hij alleen een bestandje moet uploaden en dat alles dan weer uptodate is.
 
Joren de Wit

Joren de Wit

23/01/2007 16:04:00
Quote Anchor link
Dat is ook prima te realiseren. Kijk bijvoorbeeld naar de functie fgetcsv().
 
Leendert

leendert

23/01/2007 16:11:00
Quote Anchor link
Bedankt voor al je hulp tot nu toe Blanche, ik ga met die functie aan de slag.
 
Leendert

leendert

23/01/2007 16:17:00
Quote Anchor link
Ik zou helemaal blij zijn als iemand een voorbeeld heeft hoe ik dit aan moet pakken:

- .cvs bestand uploaden
- gegevens uit geuploade cvs bestand in de tabel in database zetten (tabel eerst geleegd worden)
 
Joren de Wit

Joren de Wit

23/01/2007 17:21:00
Quote Anchor link
Voor een voorbeeldje van een upload script kun je hier eens kijken.

Als het uploaden vervolgens gelukt is, kun je de data uitlezen met behulp van fgetcsv(). Zie de link voor een voorbeeldje hoe je dat zou kunnen doen.

Vervolgens zou ik er niet voor kiezen om de tabel elke keer leeg te gooien, maar enkel de gegevens te updaten. Als extra kolom zou je bijvoorbeeld de datum van laatste wijziging toe kunnen voegen. Als er een product al bestaat in de database, controleer je of de gegevens in de csv nieuwer zijn dan de gegevens die al in de database staan en zo ja dan updaten. In alle gevallen update je de datum zodat je weet wanneer dat product voor het laatst geupdate is.
 
Niek s

niek s

23/01/2007 17:30:00
Quote Anchor link
je kant de "database" uitlezen op deze manier denk ik:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$file
= file_get_contents('tabel.txt');
$data = explode("\n",$file);
foreach($data as $value) {
    $veld = explode('|',$value);
}

?>

Zal ook wel met een multidemensionale array kunnen, tuurlijk. maar ik heb ff geen idee hoe je dat dan moet gaana anpakken.
 
Joren de Wit

Joren de Wit

23/01/2007 17:34:00
Quote Anchor link
Niek, hier zou ik dus de functie fgetcsv() voor gebruiken. Die functie kan dat soort dingen in 1 keer doen.
 
Leendert

leendert

23/01/2007 18:41:00
Quote Anchor link
Blanche schreef op 23.01.2007 17:21:
Vervolgens zou ik er niet voor kiezen om de tabel elke keer leeg te gooien, maar enkel de gegevens te updaten. Als extra kolom zou je bijvoorbeeld de datum van laatste wijziging toe kunnen voegen. Als er een product al bestaat in de database, controleer je of de gegevens in de csv nieuwer zijn dan de gegevens die al in de database staan en zo ja dan updaten. In alle gevallen update je de datum zodat je weet wanneer dat product voor het laatst geupdate is.

Het gaat wel over ongeveer 14.000 producten, die in dat bestand staan.
Hoe moet ik dan controleren of iets nieuwer is?
En het gaat over producten op ict-gebied en de prijzen daarvan verschillen bij distriteurs vaak per dag. Dus je het is bijna zeker dat het na een week verandert is.
 
Joren de Wit

Joren de Wit

23/01/2007 18:49:00
Quote Anchor link
Bijboorbeeld met de INSERT ... ON DUPLICATE KEY UPDATE syntax: zie de mysql handleiding. In dit geval worden nieuwe producten toegevoegd en oude producten geupdate.

De hoeveelheid producten maakt niet uit. Dat aantal kan een database makkelijk aan.
 

23/01/2007 18:56:00
Quote Anchor link
leendert schreef op 23.01.2007 15:25:
De 'records' worden afgeloten met een: '|'
en de 'velden' met een enter

Niet anders om? Lijkt mij logischer.

Maar het kan gewoon, kijk ook eens naar de functie explode().
Overigens is zoeken wel min of meer een ramp... en gaat er heel wat snelheid verloren.
 
Leendert

leendert

23/01/2007 19:03:00
Quote Anchor link
Webmakerij schreef op 23.01.2007 18:56:
leendert schreef op 23.01.2007 15:25:
De 'records' worden afgeloten met een: '|'
en de 'velden' met een enter

Niet anders om? Lijkt mij logischer.

Maar het kan gewoon, kijk ook eens naar de functie explode().
Overigens is zoeken wel min of meer een ramp... en gaat er heel wat snelheid verloren.


Ja het is andersom ;)

maar ik ga het tog maar in ene database gooien, steeds 4/5mb gegeven in een array lezen is een beetje veel.
 
Arjan Schuurman

Arjan Schuurman

23/01/2007 19:33:00
Quote Anchor link
WEER IEMAND MET TXT :D:D:D:D

TXT-Rulezz
 
Jos

Jos

23/01/2007 19:43:00
Quote Anchor link
Als ik een flatfile database maak gebruik ik altijd Serialize en Unserialize,

scheelt je weer een hoop gedonder met in en uitlezen.

Edit: BBclone heeft een prachtige flatfile database die het bekijken echt waard is.
Gewijzigd op 01/01/1970 01:00:00 door Jos
 



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.