login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Txt-bestanden updaten in SQL

Offline jefvhal - 05/08/2006 08:25
Avatar van jefvhalNieuw lid Hallo, ik heb een script die gegevens genereerd naar een text-file. Nu wil ik deze gegevens in een sql-database krijgen om er verder mee te rekenen. Ik kom op 2 problemen:

1) hoe update ik de gegevens naar een sql-database vanuit een txt-bestand waar de gegevens met een tab zijn gescheiden?
2) hoe laat ik dit automatisch met een interval van bijv. 5 minuten doen?

Ik hoop dat ik het een beetje duidelijk omschrijf.

Dank alvast

10 antwoorden

Gesponsorde links
Offline Grayen - 05/08/2006 09:10
Avatar van Grayen PHP ver gevorderde op vraag een weet ik antwoord alleen zou ik graag van jouw het txt-bestand willen zien, anders is het moeilijk om zoiets te maken
Offline marten - 05/08/2006 09:40
Avatar van marten Beheerder Je hebt ergens een scherm dat je een csv bestand en dergelijke kan uploaden. In dit scherm kan je dan aangeven welke scheidingsteken gebruikt dient te worden. Dit staat dacht ik bij SQL en dan onder die box staat een linkje. Of dit automatisch kan betwijfel ik Maar phpmyadmin is volledig opgebouwd uit PHP dus je kan even in de code gaan kijken hoe zij dat daar doen. Als je dit gaat gebruiken dien je wel op te letten bij de copyrights he 

Gr
Marten vanaf Kreta 
Offline Grayen - 05/08/2006 10:28
Avatar van Grayen PHP ver gevorderde Ik heb zelf al zo'n scriptje lopen maken, en het werkte, alleen moet je wel weten wat de scheidingstekens zijn voor een nieuwe rij en van de velden.
Offline riekele - 05/08/2006 10:30
Avatar van riekele PHP beginner dat interval van 5 min, kan je doen door cronjobs te gebruiken
Offline jefvhal - 05/08/2006 16:43
Avatar van jefvhal Nieuw lid Het text bestand wat ik heb is opgebouwd uit 3 delen gegevens per rij. voorbeeld: 23124 <TAB> naam <TAB> subgroep <HARDE RETURN> en dan weer hezelfde.
Het is de bedoeling om dat textbestand (die krijgt steeds wordt ge-updated door het bestaande script) gewoon 1 op 1 over te zetten naar SQL. Ook de volgorde van de kolommen hoeft niet te veranderen.

Jeffrey
Offline Grayen - 05/08/2006 18:05
Avatar van Grayen PHP ver gevorderde
  1. <?php
  2. /*
  3. Pas op het kan zijn dat de velden niet helemaal goed in de database worden geplaatst er komt dan een witregel voor (als je het via phpmyadmin bekijkt)
  4. Dit kun je oplossen om voor de velden waar het komt dit toe te voegen:
  5.  
  6. $aVelden[veldnr] = substr($aVelden[veldnr], 2);
  7.  
  8. en dan kan het ook gebeuren dat de eerste rij wel goed zonder witregel word geplaats (had ik tenminste) dan moet je dit erin zetten in plaats van het vorige:
  9.  
  10. voor de foreach in het script hieronder:
  11. $i = 0;
  12.  
  13. in de foreach:
  14. if($i != 0){
  15.   $aVelden[veldnr] = substr($aVelden[veldnr], 2);
  16.   $i++;
  17. }
  18.  
  19. Veel succes =)
  20.  
  21. u = url
  22. s = string
  23. a = array
  24. */
  25. $uFile = 'url/naar/het/bestand';
  26. if(is_readable($uFile)){ // controleerd of het bestand wel bestaat
  27. $sFile = fopen($uFile, 'r'); // opent het bestand
  28. $sText = fread($sFile, filesize($uFile)); // haalt de inhoud uit het bestand
  29. fclose($sFile); // sluit het bestand
  30. $aText = explode('\n', $sText); // maakt van de inhoud rijen in een array
  31. foreach($aText as $sWaarde){ // voor elke rij het volgende doen:
  32. $aVelden = explode('\t', $sWaarde); // maakt van elke rij weer velden in een array
  33. mysql_query("INSERT INTO table (veld1, veld2, veld3) VALUES ('".$aVelden[0]."', '".$aVelden[1]."', '".$aVelden[2]."')");
  34. // plaatst de rij velden in de database
  35. }
  36. }
  37. else {
  38. echo 'Het bestand kon niet worden geopend!';
  39. }
  40. ?>
Offline jefvhal - 06/08/2006 18:40
Avatar van jefvhal Nieuw lid Op de een of andere manier wordt alles in het eerste veld neergezet. alle andere velden blijven leeg.

Hij ziet het als 1 text-veld bij het invoeren inclusief alle tabs en enters. dus de explode functie doet erg vreemd..

Dat van die interval van 5 minuten kan ik simpel oplossen door de pagina steeds te refreshen op de achtergrond, moet alleen ergens in de pagina een drop table komen op een logische plek. Dus dat het script de tabel steeds opnieuw aanmaakt voor hij deze gaat inrichten met bovenstaand script.

Gr. Jeffrey
Offline Grayen - 06/08/2006 20:02
Avatar van Grayen PHP ver gevorderde het ligt niet aan explode, maar aan het gene dat aangeeft wat de string doet scheiden (in mijn voorbeeld hierboven heb ik neergezet \n en \t) die zijn dus fout . Ik weet helaas niet welke tekens er worden gebruikt als je op tab of enter drukt, want je ziet nergens de code van die tab of enter, als je dat kunt opzoeken dan kun je de fout oplossen 
Offline ikkedikke - 06/08/2006 21:09
Avatar van ikkedikke PHP expert '\t' moet "\t" zijn en '\n' "\n" op regel 30 en 32
Offline jefvhal - 06/08/2006 21:23 (laatste wijziging 06/08/2006 21:41)
Avatar van jefvhal Nieuw lid Okay, dank je wel. De functie werkt nu zoals ik bedoel.

Nu kom ik bij deel 2 van de vraag: kan je dit proces automatiseren dat hij uit het text-bestand (wat steeds wordt ge-updated) elke 5 minuten een update doet. Ik dacht door de tabel te legen voor ik het script uitvoer dat ik er wel zou zijn maar helaas krijg ik de tabel niet leeg door een php functie te gebruiken.

Ik heb nu
  1. mysql_query(DELETE * FROM 'tabelnaam');

voor dat het script gaat lopen maar dat blijkt niet te werken.

Gr Jeffrey

EDIT:
Inmiddels is het al opgelost
  1. mysql_query(TRUNCATE TABLE tabelnaam);


Dank jullie wel voor de input
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.338s