[php]tekstfile naar database

Pagina: 1
Acties:

  • Ehv_BramBo
  • Registratie: November 2000
  • Laatst online: 13-04 22:30
Ik heb een tabel met een kolom "email", en een kolom "message".

Nu wil ik een tekstfile uitlezen, en die op de juiste manier naar de database schrijven.

De tekstfile ziet er als volgt uit:
email1@test.nl "boodschap #1"
email2@test.nl "boodschap #2"
email3@test.nl "boodschap #3"
email4@test.nl "boodschap #4"
email5@test.nl "boodschap #5"

Eerst komt er dus het email adres (moet in de kolom "email" komen), en daarachter staat dussen aanhalingstekens een boodschap (moet in de kolom "boodschap" komen).

Nu weet ik dat je met de functie "file" elke regel van een tekstfile in een array ellement kan zetten, maar ik kom er niet uit hoe ik dan zo'n regel op een juiste manier naar de database kan schrijven.

Hoop dat iemand mij hiermee zou kunnen helpen.

Groetjes,

Bram

  • tomato
  • Registratie: November 1999
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$lines = file("bestand.txt");

$p = '([^ \t]+)[ \t]+';   // Email
$p .= '"([^"\\\\]*(:?\\\\.[^"\\\\]*)*)"';   // Message

foreach($lines as $row) {

   preg_match($p, $row, $m);
   list($email, $message) = array($m[1], $m[2]);

   $q = "INSERT INTO Table (Email, Message) VALUES ('".$email."', '".$message."')";
   // Voer hier je query $q uit

}
?>

Zoiets? Ik neem aan dat het uitvoeren van de query wel lukt, je geeft namelijk geen informatie over welke database je gebruikt.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Uit elke regel moet je e-mail adres en tekst via een regular expression filteren. Dit doe je via preg_match
vb:
code:
1
2
3
4
5
6
7
8
9
$lines = file('data.txt');
foreach($lines as $line)
{
  if(preg_match("/^(.*?) \"(.*?)\"$/", $line, $matches)
  {
    list(,$mail,$text) = $matches;
    //--> hier plaats je de code om $mail en $text in je database te zetten
  }
}

  • BramT
  • Registratie: Oktober 2001
  • Laatst online: 20:32

BramT

Rule #1

met database neem ik aan dat je mysql bedoelt?

dan lijkt het me niet zo moeilijk: schrijg gewoon naar de database (mysql_query(insert into...)) ipv naar het array..

of denk ik nou te simpel?? :?

You are the all-dancing, all-singing crap of the world - Jack


  • Orphix
  • Registratie: Februari 2000
  • Niet online
hehe 2 great minds think alike :)
alleen is jouw regexp iets uitgebreider :P

  • BramT
  • Registratie: Oktober 2001
  • Laatst online: 20:32

BramT

Rule #1

okee.... mooi

toen ik replyde stonden die 2 er nog niet.. :Z

You are the all-dancing, all-singing crap of the world - Jack


  • tomato
  • Registratie: November 1999
  • Niet online
Orphix: hehe 2 great minds think alike :)
He toevallig ja ;)
Ik dacht, laat ik een keer een list() gebruiken om het geheel wat duidelijker te maken en een foreach() om te loopen terwijl daar ook tig andere manieren voor zijn. Doen we precies hetzelfde :o
alleen is jouw regexp iets uitgebreider :P
Of course, check my sig, re re regex ;)

Die van mij houdt rekening met eventuele quotes in de message die geescaped zijn.

[edit]
Maar ik heb niets getest en zie nu dat ik de delimiters vergeten ben in mijn regex |:( :z

  • Orphix
  • Registratie: Februari 2000
  • Niet online
he ja die nutteloze $i in de code viel me al op ;)

[edit] die je nu stiekem hebt weggehaald! :+

  • tomato
  • Registratie: November 1999
  • Niet online
Orphix:
he ja die nutteloze $i in de code viel me al op ;)
*LOL* leuk dat je het zag, ik had eerst dit:
code:
1
2
3
$i = 0;
while ($lines[++$i]) {
   // etc

En was vergeten de $i weg te halen ;)
[edit] die je nu stiekem hebt weggehaald! :+
>:)

  • Ehv_BramBo
  • Registratie: November 2000
  • Laatst online: 13-04 22:30
Bedankt mensen het werkt :-)

p.s. wist dat het zoiets moest zijn, maar ik ben niet zo goed met reguliere expressies, dus daar kwam ik echt niet uit :-(. Zal der eens wat meer info over gaan zoeken, want merk wel weer hoe belangrijk ze eigenlijk zijn.
Pagina: 1