18.000 bestanden in MySQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jurrien P

Jurrien P

15/01/2012 11:52:05
Quote Anchor link
Hoi,

Ik heb op dit moment 18.000 userfiles, het zijn .ini files en ik wil ze graag allemaal in mijn MySQL database krijgen, handmatig zou dit heel veel tijd gaan kosten. Heeft iemand een idee hoe ik het zou kunnen doen? Het structuur gaat als volgt:

Kingunit.ini

Cash=100
Score=20
...

Ik heb dus een database tabel die ziet er dan hetzelfde eruit:

Username Cash Score ...

Hoe moet ik dit dan maken voor 18
000 bestanden? Ook moet de filename bij Username komen, kan iemand mij hulp aanbieden?
 
PHP hulp

PHP hulp

21/12/2024 15:46:00
 
Jens erd

Jens erd

15/01/2012 12:58:58
Quote Anchor link
Plaats eens een voorbeeld van een bestand.
 
Jurrien P

Jurrien P

15/01/2012 13:07:59
Quote Anchor link
Kingunit.ini
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hashPW=68157737
password=xxxxxxxx
Score=50970
Admin=5
Skin=147
Wins=354
Runups=274
C1=6
C2=6
IRC=1
Muted=0
Donor=1
Color=-1828716544
Channel=4
ChannelID=39481319
PrimeID=0
Primepoint=0
Cash=1938
Hat=2
Ticket=0


Daar heb ik er dus 18.000 van, en dat moet ik deze tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE IF NOT EXISTS `PlayerInfo` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Username` varchar(24) NOT NULL,
  `hashPW` varchar(50) NOT NULL,
  `Password` varchar(50) NOT NULL,
  `Score` int(11) NOT NULL DEFAULT '0',
  `Skin` int(11) NOT NULL,
  `Wins` int(11) NOT NULL,
  `Runups` int(11) NOT NULL,
  `C1` int(11) NOT NULL,
  `C2` int(11) NOT NULL,
  `IRC` int(11) NOT NULL,
  `Locked` int(11) NOT NULL,
  `Muted` int(11) NOT NULL,
  `Channel` int(11) NOT NULL,
  `ChannelID` int(11) NOT NULL,
  `Donor` int(11) NOT NULL,
  `Color` int(11) NOT NULL,
  `Primepoint` point NOT NULL,
  `PrimeID` int(11) NOT NULL,
  `Cash` int(11) NOT NULL,
  `Hat` int(11) NOT NULL,
  `Ticket` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Gewijzigd op 15/01/2012 13:14:14 door Jurrien P
 
Roel -

Roel -

15/01/2012 13:57:00
Quote Anchor link
Heb je al een while() gemaakt die alle bestanden door zou kunnen lopen?
Als je dat voor elkaar hebt, kun je voor elke regel in je .ini bestanden een kolom vullen en dat uiteindelijk als record invoegen in je database.
 
Jurrien P

Jurrien P

15/01/2012 14:01:33
Quote Anchor link
Ik heb eerlijk gezegd helemaal geen idee waar ik moet beginnen.
 
Pim -

Pim -

15/01/2012 14:04:31
Quote Anchor link
Hihi, dit is best wel grappig...
 
Cake Masher

Cake Masher

15/01/2012 14:24:35
Quote Anchor link
Daar zou je de functie glob voor kunnen gebruiken, hiermee haal je alle bestanden, of alleen alle .ini bestanden uit een map en kan je ze stuk voor stuk af handelen.
 
Noppes Homeland

Noppes Homeland

15/01/2012 17:05:29
Quote Anchor link
Roel van de Water op 15/01/2012 13:57:00:
Heb je al een while() gemaakt die alle bestanden door zou kunnen lopen?
Als je dat voor elkaar hebt, kun je voor elke regel in je .ini bestanden een kolom vullen en dat uiteindelijk als record invoegen in je database.


1. je hebt in principe geen while nodig
-> foreach(glob('*.ini') as $file)
2. het is ook niet nodig om de ini file regel voor regel uit te lezen
-> http://wwww.php.net/parse_ini_file

Redelijkwijs heb je van de php start tag tot de php end tag z'n 24 regels in je php script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
ini_set('display_errors',1);
error_reporting(E_STRICT | E_ALL);
set_time_limit(0);
foreach (glob('*.ini') as $file) {
    $record = parse_ini_file($file);
    $fileinfo = pathinfo($file);
    $record['username'] = $fileinfo['filename'];
    $aValues = array();
    foreach($record as $field => $value) {
        $aValues[] = "'". mysql_real_escape_string($value) ."'";
    }
    
    $sql = "INSERT INTO PlayerInfo
                ("
.(explode(',',array_keys($record))).")
            VALUES
                ("
.(explode(',',$aValues)).")";
    if (($result = mysql_query($sql)) === false) {
        echo 'PlayerInfo: '.$record['username'].' is niet toegeveogd';
    }

    else {
        echo 'PlayerInfo: '.$record['username'].' is toegeveogd';
    }     
}

?>

Opmerking: dit is niet getest!

Op username dient nog een unique key geplaatst te worden
Gewijzigd op 15/01/2012 17:13:19 door Noppes Homeland
 
Jurrien P

Jurrien P

15/01/2012 18:14:57
Quote Anchor link
Bedankt voor de inzet Noppes, maar wat bedoel je percies met 'unique key'?
 
Noppes Homeland

Noppes Homeland

15/01/2012 18:34:50
Quote Anchor link
Je kan uiteraard ook in je SQL Bijbeltje opzoek gaan naar het antwoord.

En dan is het ook aan te raden om MyIsam als engine links te laten liggen en InnoDB te gebruiken. Dat is het beste wat mysql te bieden heeft om enigsinds de data integriteit te waarborgen.
 
Jurrien P

Jurrien P

15/01/2012 18:39:12
Quote Anchor link
Oke, nogmaals bedankt. Als ik het script uitvoer krijg ik:

Notice: Array to string conversion on line 24
Daarna word de query niet uitgevoerd, misschien klinkt het gek, maar ik snap op dit moment weinig van de code dus het is voor mij moeilijk om het repareren.
 
- Mark -

- Mark -

15/01/2012 18:54:13
Quote Anchor link
Explode moet implode zijn.
 
Jurrien P

Jurrien P

15/01/2012 19:09:02
Quote Anchor link
Error weg, alleen hij word nog niet toegevoegd, even kijken wat ik precies fout doe.
 
- Mark -

- Mark -

15/01/2012 19:28:05
Quote Anchor link
Je hebt neem ik aan het gedeelte toegevoegd dat de verbinding maakt met je database?
 
Bram Boos

Bram Boos

15/01/2012 19:29:00
Quote Anchor link
var_dump anders de query eens...
 
Jurrien P

Jurrien P

15/01/2012 19:43:59
Quote Anchor link
- Mark - op 15/01/2012 19:28:05:
Je hebt neem ik aan het gedeelte toegevoegd dat de verbinding maakt met je database?


Ja, de connectie heb ik natuurlijk gemaakt.

Als ik vardump doe op $sql:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO PlayerInfo (hashPW,password,Score,Admin,Wins,Runups,C1,C2,IRC,Locked,Muted,Channel,ChannelID,Donor,Skin,username) VALUES ('74252610','199824','0','0','0','0','1','1','0','0','0','-1','-1','0','124','Kingunit')"
Gewijzigd op 15/01/2012 19:45:27 door Jurrien P
 
- SanThe -

- SanThe -

15/01/2012 19:45:40
Quote Anchor link
In de file: password=xxxxxxxx
In de database: `Password` varchar(50) NOT NULL,

Hoofdletter/Kleine letter probleem.
 
Jurrien P

Jurrien P

15/01/2012 19:49:14
Quote Anchor link
Heb het gezien, alles opgelost het werkt nu. Heel erg bedankt allemaal, echt - dit scheelt weer 18.000 userfiles openen. :)
 



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.