Avatar billede hmortensen Nybegynder
14. juli 2003 - 18:36 Der er 15 kommentarer og
1 løsning

Fra text fil til mysql

Jeg har noget brugere i en textfil som skal ligges over i en mysql db.

txtfil format:
-------
nick
"auth" "" "access" "flags"

nick
"auth" "" "access" "flags"
-------

CREATE TABLE `users` (
  `nick` varchar(32) NOT NULL default '',
  `auth` int(32) NOT NULL default '0',
  `access` varchar(32) NOT NULL default '',
  `flags` varchar(32) NOT NULL default ''
) TYPE=MyISAM;

Nogle der kan lave det ?
Avatar billede sostack Nybegynder
14. juli 2003 - 19:07 #1
Prøv:

<?php
//forbind til databasen her //

$filnavn = "./navnet_på_tekstfilen.txt";
$fp = fopen($filnavn, "r");
WHILE(!FEOF($fp))
{
$linie = fgets($fp);
if(!ereg(" ", $linie) && $linie != "")
{
$insert_query = "INSERT INTO users (nick, auth, access, flags) VALUES ('$linie', '";
} else {
$data = explode(" ", $linie);
$insert_query .= $data[0] . "', '" . $data[1] . "', '" . $data[2] . "')";
}
mysql_query($insert_query) OR DIE(mysql_error());
}
fclose($fp);
?>

//sostack
Avatar billede hmortensen Nybegynder
14. juli 2003 - 19:19 #2
Får følgende fejl, og kan ik se hvor den er:

You have an error in your SQL syntax near ''' at line 1
Avatar billede hmortensen Nybegynder
14. juli 2003 - 19:25 #3
Hvis IF kriteriet ikke bliver overholdt, når den da ikke INSERT INTO på noget tidspunkt, eller er jeg gal på den ?
Avatar billede sostack Nybegynder
14. juli 2003 - 19:30 #4
Med et par rettelser:

<?php
//forbind til databasen her //
$usernr = 0;
$filnavn = "./navnet_på_tekstfilen.txt";
$fp = fopen($filnavn, "r");
WHILE(!FEOF($fp))
{
$linie = fgets($fp);
if(!ereg(" ", $linie))
{
$insert_query[$usernr] = "INSERT INTO users (nick, auth, access, flags) VALUES ('$linie', '";
} elseif($linie == "")
{
    $usernr++;
} else {
$data = explode(" ", $linie);
$insert_query[$usernr] .= $data[0] . "', '" . $data[1] . "', '" . $data[2] . "')";
}
}
fclose($fp);
for($i = 0; $i < count($insert_query); $i++)
{
    mysql_query($insert_query[$i]) OR DIE(mysql_error());
}
?>

//sostack
Avatar billede sostack Nybegynder
14. juli 2003 - 19:32 #5
Tror det er de tomme linier der driller, men check det lige på dit system.

//sostack
Avatar billede hmortensen Nybegynder
14. juli 2003 - 19:35 #6
Stadig samme fejl.

Den her linie ved da ikke hvor den skal sætte det ind henne:
$insert_query[$usernr] .= $data[0] . "', '" . $data[1] . "', '" . $data[2] . "')";

Ellers forstår jeg bare hat af det du har skrevet.
Avatar billede sostack Nybegynder
14. juli 2003 - 19:41 #7
PRøv lige:

<?php
//forbind til databasen her //
$usernr = 0;
$filnavn = "./navnet_på_tekstfilen.txt";
$fp = fopen($filnavn, "r");
WHILE(!FEOF($fp))
{
$linie = fgets($fp);
if(!ereg(" ", $linie))
{
$insert_query[$usernr] = "INSERT INTO users (nick, auth, access, flags) VALUES ('$linie', '";
} elseif($linie == "")
{
    $usernr++;
} else {
$data = explode(" ", $linie);
$insert_query[$usernr] .= $data[0] . "', '" . $data[1] . "', '" . $data[2] . "')";
}
}
fclose($fp);
for($i = 0; $i < count($insert_query); $i++)
{
    //mysql_query($insert_query[$i]) OR DIE(mysql_error());
    echo $insert_query[$i] . "<br />\n";
}
?>

og vis resultatet her.

//sostack
Avatar billede hmortensen Nybegynder
14. juli 2003 - 19:43 #8
INSERT INTO users (nick, auth, access, flags) VALUES ('', '
Avatar billede hmortensen Nybegynder
14. juli 2003 - 19:57 #9
Har fundet noget af fejlen.
Der var en fejl i txt filen.

Nu 'virker' den næsten, men den tar kun den sidste entry, og den tar kun "nick" og "flags" med.
Avatar billede sostack Nybegynder
14. juli 2003 - 20:02 #10
Så må der stærkere midler til:
hvordan ser tekstfilen ud nu?

//sostack
Avatar billede hmortensen Nybegynder
14. juli 2003 - 20:07 #11
Jens
"1641735" "" "abcdefiju" "ce"

Kaj
"2740133" "" "abcdefiju" "ce"

Anders
"1123213" "" "abcdefiju" "ce"

Viggo
"2387229" "" "abcdefghijklmnopqrstuv" "ce"
Avatar billede sostack Nybegynder
14. juli 2003 - 20:09 #12
Så skulle den være der:

<?php
//forbind til databasen her //
$usernr = 0;
$filnavn = "./navnet_på_tekstfilen.txt";
$fp = fopen($filnavn, "r+");
WHILE($linie = fgets($fp))
{

if(!ereg(" ", $linie))
{
$insert_query[$usernr] = "INSERT INTO users (nick, auth, access, flags) VALUES ('$linie', ";
} elseif($linie == "")
{
   
} else {
$linie = ereg_replace("  ", " ", ereg_replace("\"", "", $linie));
$data = explode(" ", $linie);
$insert_query[$usernr] .= $data[0] . ", '" . $data[1] . "', '" . $data[2] . "')";
$usernr++;
}
}
fclose($fp);
for($i = 0; $i < count($insert_query); $i++)
{
mysql_query($insert_query[$i]) OR DIE(mysql_error());
//echo $insert_query[$i] . "<br />\n";
}
?>

//sostack
Avatar billede hmortensen Nybegynder
14. juli 2003 - 20:14 #13
Så er den næsten perfekt.

Der er lige en lille bitte ting.
Der forkommer nicks med 'spaces' i, og der stopper den...
Avatar billede sostack Nybegynder
14. juli 2003 - 20:23 #14
Prøv:

<?php
//forbind til databasen her //
$usernr = 0;
$filnavn = "./navnet_på_tekstfilen.txt";
$fp = fopen($filnavn, "r+");
WHILE($linie = fgets($fp))
{

if(!ereg("\"", $linie))
{
$insert_query[$usernr] = "INSERT INTO users (nick, auth, access, flags) VALUES ('$linie', ";
} elseif($linie == "")
{
   
} else {
$linie = ereg_replace("  ", " ", ereg_replace("\"", "", $linie));
$data = explode(" ", $linie);
$insert_query[$usernr] .= $data[0] . ", '" . $data[1] . "', '" . $data[2] . "')";
$usernr++;
}
}
fclose($fp);
for($i = 0; $i < count($insert_query); $i++)
{
mysql_query($insert_query[$i]) OR DIE(mysql_error());
//echo $insert_query[$i] . "<br />\n";
}
?>

//sostack
Avatar billede hmortensen Nybegynder
14. juli 2003 - 20:53 #15
Sådan !

Nu er den som den skal være

Mange tak skal du ha
Avatar billede sostack Nybegynder
14. juli 2003 - 20:59 #16
velbekomme!

//sostack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester