[ingewikkeld] tekstbestand als database
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!
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
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!
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
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.
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.
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.
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.
fgetcsv().
Dat is ook prima te realiseren. Kijk bijvoorbeeld naar de functie Bedankt voor al je hulp tot nu toe Blanche, ik ga met die functie aan de slag.
- .cvs bestand uploaden
- gegevens uit geuploade cvs bestand in de tabel in database zetten (tabel eerst geleegd worden)
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.
Voor een voorbeeldje van een upload script kun je 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.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$file= file_get_contents('tabel.txt');
$data = explode("\n",$file);
foreach($data as $value) {
$veld = explode('|',$value);
}
?>
$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.
Niek, hier zou ik dus de functie fgetcsv() voor gebruiken. Die functie kan dat soort dingen in 1 keer doen.
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.
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.
Bijboorbeeld met de INSERT ... ON DUPLICATE KEY UPDATE syntax: De hoeveelheid producten maakt niet uit. Dat aantal kan een database makkelijk aan.
leendert schreef op 23.01.2007 15:25:
De 'records' worden afgeloten met een: '|'
en de 'velden' met een enter
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.
Webmakerij schreef op 23.01.2007 18:56:
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 schreef op 23.01.2007 15:25:
De 'records' worden afgeloten met een: '|'
en de 'velden' met een enter
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.
TXT-Rulezz
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.
Als ik een flatfile database maak gebruik ik altijd 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