MSN lijst naar MySQL

Door Thom nvt, 20 jaar geleden, 3.181x bekeken

Dit script gebruik ik om op mijn webwinkel mensen de mogenlijkheid te bieden hun MSN contactpersonen te importeren in hun online adresboek. Ik kon op internet niets vinden wat hier op leek, dus heb ik er zelf maar eentje gebouwd. Het is misschien nog wat omslachtig, maar het werkt teminste! De comments leggen het meeste wel uit, maar ik zal de basis uitleggen.
Eerst de MySQL database:

De database ziet er als volgt uit.
database naam: contacts
Primary key, ID ,int 4
UserID ,int 4
contactMail ,carchar 64

De map op mijn server is contacts. Daar moet dit bestand niet in. Dat is een tijdelijke map voor het uploaden van MSN's .ctt bestanden.

De code:
Eerst verbinden met de database.
Dan de variabelen declareren en het pad naar het bestand selecteren. DIT MOET NOG EEN POST OF GET VARIABELE WORDEN!
Dan de onnodige XML zooi verwijderen en vervangen door NULL.
Ook vervang ik een aantal dingen door MySQL query-dingen. Kijk maar eens naar het onbewerkte bestand van MSN. Het begin van elk mailadres word dus (NULL, '" . $_SESSION['nummer'] . "', $xml) daarbij is $xml het mailadres en $_SESSION['nummer'] de userID.
Daarna halen we alle newlines en whitespaces eruit. Dat is om een fout in MySQL te voorkomen en het wat makkelijker te bewerken te maken.
Dan bouwen we het begin van de INSERT query.
Dan imploden we de array XML (de bewerkte inhoud van het bestand) en voegen hem in achter het begin van INSERT.
Dan veranderen we het stukje bij VALUES van VALUES ),( naar VALUES (
Dan voeren we de query uit. Dit natuurlijk met foutcontrole.
Als alles goed gaat komt er "success!" te staan. Anders de MySQL fout met de uitgevoerde query.

Veel succes ermee!

EDIT: In het stukje met insert staat dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "INSERT  INTO `test`.`contactlist` (`ID`, `UserID`, `contactMail`) VALUES ";

`test`.`contactlist` werkt alsvolgt:
`test` is de database. Ffies veranderen naar je eigen dus
`contactlist` is de table. ook ffies veranderen. Net als de overige.

Gesponsorde koppelingen

PHP script bestanden

  1. msn-lijst-naar-mysql

 

Er zijn 17 reacties op 'Msn lijst naar mysql'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Henk
Henk
20 jaar geleden
 
0 +1 -0 -1
Je kan de spaties weghalen als je tags om je code doet.
Han eev
Han eev
20 jaar geleden
 
0 +1 -0 -1
Volgens mij klopt dit ook niet

$sql = "INSERT INTO `test`.`contactlist` (...)
`test`.`contactlist` ?

Hoe had je dat in gedachten?
Thom nvt
Thom nvt
20 jaar geleden
 
0 +1 -0 -1
de database is test en de table contactlist. Zo doet MySQL het zelf ook.

en @henk: Tnx, ga ik meteen doen!

EDIT: was al gebeurt, maar tnx voro de tip.
ook een stukje over
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "INSERT  INTO `test`.`contactlist` (`ID`, `UserID`, `contactMail`) VALUES ";
erin gezet
Gebruiker PHP
Gebruiker PHP
20 jaar geleden
 
0 +1 -0 -1
Dit kan stukken beter, het niveau gevorderd snap ik dan ook niet.
Strikt gezien zou je hier een XML parser voor moeten gebruiken, maar prce lijkt mij hier toch wat beter.

Ook de titel vind ik onduidelijk en misleidend. XML2SQL, dat klopt half want je kan hier immers geen andere XML invoeren dan de XML uit een CTT bestand. Misschien is MSN contactenlijst importeur een betere naam?

En PHP 4 volstaat i.p.v PHP 5.2.2 omdat alle functies die jij gebruikt in PHP 4 beschikbaar zijn.
Hieronder heb ik een naar mijn idee betere versie geschreven van hetgeen wat hierboven staat.

Zie: http://www.phphulp.nl/php/scripts/2/1102/
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
Het heeft eigenlijk niks met XML te maken, maar alles met een tekstbestand. Je neemt een tekstbestand en gaat met str_replace() bepaalde delen eruit slopen. Het had net zo goed EDI of een willekeurig ander formaat kunnen zijn. Ik zie de toegevoegde waarde van XML niet.

Ik kan niemand aanraden om op deze manier met XML om te gaan, dat is een ramp. Neem gewoon een XML-parser en klaar ben je. Dan kun je ook gaan valideren met een schema, wel zo handig.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Ik ben het helemaal met Frank eens. Ik zag net de titel "XML2SQL" en ik dacht: eindelijk een leuk script met SimpleXML of DOM. Maar nee, één en al str_replace-drama. Sorry maar ik vind dit geheel nutteloos. Je kunt met SimpleXML in 1 à 2 regels een heel bestand parsen en dan kun je het dynamisch in een tabel laden. Ik zal kijken of ik het vanavond even kan maken. Dus dat je een XML bestand direct omvormt tot een SQL tabel via SimpleXML / PDO.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Quote:
de database is test en de table contactlist. Zo doet MySQL het zelf ook.
Volgens mij begrijp je dan niet hoe databases werken.

Verder vond ook ik de titel zeer misleidend en incorrect, dus heb ik 'm verbeterd. Ook het niveau heb ik even gecorrigeerd als je het niet erg vind. Ik vind dit persoonlijk niet in de buurt komen van gevorderd.

Wel goed dat het werkt, mensen die er naar op zoek zijn hebben er zeker wat aan. Het kan alleen qua programmeerstijl een stuk beter en sneller.
Thom nvt
Thom nvt
20 jaar geleden
 
0 +1 -0 -1
Jullie mogen dat sneller vinden en makkelijker enzo, maar ik vind die str_replace zooi (ik weet dat het verschrikkelijk is, maar wel lekker simpel) veel makkelijker werken. het is low-level, weet ik, maar het ging mij erom met zo min mogenlijk regels code die bestanden te converteren. Dit bestand is alleen de engine, en die komt dus ook apart te staan. GUI ofzo moet er nog omheen. Jullie kunnen het resultaat rond september bekijken.
Gebruiker PHP
Gebruiker PHP
20 jaar geleden
 
0 +1 -0 -1
Hieronder de "echte" versie. Dus met XML. Ik heb hier gebruik gemaakt van de SimpleXMLElement class van PHP, natuurlijk kun je ook de "gewone" XML functies gebruiken maar dit is handiger.

http://www.phphulp.nl/php/scripts/2/1102/

Maar heb je mijn 2 scripts gelezen?
1x PRCE met maar 1 preg_match_all
1x XML met 2 regel om de XML parser aan te zetten

Dat is toch veel minder code?
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Quote:
Jullie mogen dat sneller vinden en makkelijker enzo, maar ik vind die str_replace zooi (ik weet dat het verschrikkelijk is, maar wel lekker simpel) veel makkelijker werken. het is low-level, weet ik, maar het ging mij erom met zo min mogenlijk regels code die bestanden te converteren. Dit bestand is alleen de engine, en die komt dus ook apart te staan. GUI ofzo moet er nog omheen. Jullie kunnen het resultaat rond september bekijken.
Zo min mogelijk regels? Dan moet je dus SimpleXML gebruiken en niet str_replace.
Thom nvt
Thom nvt
20 jaar geleden
 
0 +1 -0 -1
ok jullie snappen het duidelijk niet.
Kijk eens naar mijn code en de code van Don slag. Welke is korter????
en nu is het ook zo dat het alleen gaat om één formaat bestand wat nooit een andere opmaak krijgt waar dan ook. misschien in nieuwere MSN versies, maargoed.
Dan is het voor mij veel makkelijker even de str_replace zooi aan te passen.
2e punt: ik heb sowiezo een bloedhekel aan XML, dus als ik ook maar iets van het woord XML in de code zie staan freak ik (grapje) maar ik vind het irritant met al die -> en [0] tekentjes erin... werkt voor mij niet.
punt 3: Als ik het zo goed vind laat me dan in die waan =P
Gebruiker PHP
Gebruiker PHP
20 jaar geleden
 
0 +1 -0 -1
Punt 1: Mijne is langer omdat ik veel meer dingen controleer en bepaalde dingen netter doe.
Punt 2: XML is leerbaar en alles behalve moeilijk. Die [0] dingen zijn de key's van de array's dus ook iets normaals.
Punt 3: Nee, PHPhulp helpt mensen en als wij dingen zien die beter kunnen helpen leden van PHPhulp je graag.

Dit heb ik nodig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$XML        =    new SimpleXMLElement($sourceFile);
// Start de XML parser en parse het bestand.

foreach($XML->service[0]->contactlist[0] as $email){
// Loop door alle emailadressen, service is de 2e XML tag en contactlist de 3e tag.



}


En jij hebt veel str_replace dingen nodig.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Inderdaad. Meer dan die 2 regels van Don slag zijn niet nodig. Zie je nu m'n punt?
Robert Deiman
Robert Deiman
20 jaar geleden
 
0 +1 -0 -1
Ik vind de discussie wel mooi geweest, dit is een zeer eenvoudig te begrijpen script wat termination heeft gepost. Die XML parser download je zelf, en bouw je niet zelf. Inderdaad zitten er dan meer controles in en heb je minder regels nodig voor het uitlezen zelf.

Vind je dat je het beter kan, plaats dan aub een los script hiervoor met de XML parser zoals jullie hier al aangeven, en post geen stukken code in de reactie. Geef dan de tip dat het slimmer/ netter/ veiliger is met een parser + link naar jou code en het is duidelijk.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
XML parser zit in PHP geintegreerd, hoef je niet te downloaden.
Thom nvt
Thom nvt
20 jaar geleden
 
0 +1 -0 -1
Kijk Robert_Deiman begrijpt het teminste. Dit script is niet bedoeld om met arrays te werken (en ja ik ben niet achterlijk ik weet wat een array is) Het is gewoon bedoeld als een simpel aan te passen script dat gewoon zijn werk doet. Je hebt mij ook nooit horen zeggen dat ik niet weet hoe een XML parser werkt, alleen dat het veel simpeler is on dit aan te passen.

Ik heb er expres geen controles in gezet voor al bestaande dingen. Dit script is alleen bedoeld voor conversie van MSN naar een SQL query. Niet om van alles en nog wat te controleren. Dat zijn dingen die de eindgebruiker zelf moet verzinnen. En zeg nou zelf: Een beetje creativiteit overlaten aan de eindgebruiker is goed.

en @ PHPerik: Ik zie je punt, maar niet waarom je dat hier post...
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
Quote:
Dit script is alleen bedoeld voor conversie van MSN naar een SQL query.
Klopt helemaal! En dat is nu net ook zo jammer, nu is het niet bruikbaar voor andere vormen van XML-input (de MSN-data wordt tenslotte als XML aangeleverd).

Wanneer je een eenvoudige XML-to-SQL-script had geschreven, zoals jij in eerste instantie ook vermelde, dan was het een veel waardevoller script geworden omdat anderen dit ook zouden kunnen gebruiken voor hun XML-uitdagingen.

Met een schroevendraaier kun je prima een spijker op de kop slaan. Het is alleen niet het aangewezen gereedschap daarvoor, dat is de welbekende hamer, en je komt dus vroeg of laat in de problemen. Zo ook dit script, het is sterk af te raden om hiermee verder te gaan, het werkt voor de MSN-lijst maar verder is het niet/nauwelijks toe te passen. SimpleXML is zó veel eenvoudiger en functioneler...

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. msn-lijst-naar-mysql

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.