GeirGrusom Skrevet 15. april 2013 Del Skrevet 15. april 2013 Det er 4 personer som arbeider med en prosjekt oppgave. Vi brukte Git men den fungerte dårlig så nå kjører vi uten det. Ekstremt dårlig idé. Det fungerte ikke dårlig; dere forstod ikke verktøyet dere brukte. Lenke til kommentar
corsa91 Skrevet 15. april 2013 Forfatter Del Skrevet 15. april 2013 Nei vi tør å redigere men backup serveren var nede så hvis noe gikk til helvete lå vi dårlig ann. Heldigvis så er det fiksa nå. Lenke til kommentar
corsa91 Skrevet 16. april 2013 Forfatter Del Skrevet 16. april 2013 (endret) Hei igjen LØST Endret 29. april 2013 av corsa91 Lenke til kommentar
Crowly Skrevet 16. april 2013 Del Skrevet 16. april 2013 (endret) Switchen din ser veldig rar ut, du bør lese deg opp på syntaksen. Vil tro den skal være noe i nærheten av dette foreach ($exploded as $key=>$singles) { switch ($key) //putt de enkelte bestanddeler på riktig sted { case 0: $pairs ['Fornavn'][] = $singles; break; case 1: $pairs ['Etternavn'][] = $singles; break; case 2: $pairs ['Brukernavn'][] = $singles; break; // osv } } Edit: Switchen ser ut til å være helt unødvendig. $exploded = explode("\t",$linje); $query = sprintf("INSERT INTO %s VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", $tabell, mysql_real_escape_string($exploded[0]), mysql_real_escape_string($exploded[1]), mysql_real_escape_string($exploded[2]), mysql_real_escape_string($exploded[3]), mysql_real_escape_string($exploded[4]), mysql_real_escape_string($exploded[5]), mysql_real_escape_string($exploded[6]), mysql_real_escape_string($exploded[7]), mysql_real_escape_string($exploded[8]) ); mysql_query($query,$conn); Og dere bør gå over til mysqli eller PDO. This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. Edit2: Skal du lese inn en fil i databasen så er LOAD DATE INFILE en mye raskere metode enn å la php behandle en og en linje. Endret 16. april 2013 av Crowly Lenke til kommentar
quantum Skrevet 16. april 2013 Del Skrevet 16. april 2013 Hei igjen ... Det jeg ikke skjønner er hvorfor alt blir lagt inn i samme array Kanskje det er noen i php-gruppa som vet? Lenke til kommentar
corsa91 Skrevet 16. april 2013 Forfatter Del Skrevet 16. april 2013 Fikk litt hjelp av en gruppa og det var hun som sa at jeg burde bruke case istedet for if og else Lenke til kommentar
corsa91 Skrevet 16. april 2013 Forfatter Del Skrevet 16. april 2013 (endret) Removed Endret 29. april 2013 av corsa91 Lenke til kommentar
hjahre Skrevet 16. april 2013 Del Skrevet 16. april 2013 (endret) Skjønner ikke helt hvorfor du mellomlagrer fila som du gjør. Tror det hadde vært mye enklere for deg å lagre linje for linje eller gjøre som Crowly skrev. Jeg har en litt annen løsning, men er ingen ekspert på PHP, så det finnes sikkert bedre måter å gjøre det på. <?php $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $tabell ='bruker'; //navnet på tabellen du skal fylles med data $source = 'user/student.txt'; //kildefilen som inneholder data $pairs = array( //her legger vi etter hvert de dataene "Fornavn", "Etternavn", "Brukernavn", "Epost", "Telefonnr", "Adresse", "Postnr", "Fodselsnr", "Passord" ); $lines = array(); if (!($liste = @ file("$source"))) //hent inn data die ("FEIL: Finner ikke kildefilen."); echo 'Bearbeider data...<br />'; foreach ($liste as $linje) { $exploded = explode("\t",$linje); //del hver linje opp i sine enkeltbestanddeler for($i = 0; $i < count($pairs) && $i < count($exploded); $i++) { sprintf("%s: %s\n", $pairs[$i], $exploded[$i]); $lines[$pairs[$i]] = $exploded[$i]; } } echo 'Gjør klar til å mate databasen...<br />'; if (!($conn = @ mysql_connect($host,$user,$pass))) //koble til database-host die ("FEIL: Kan ikke koble til host."); if (! @ mysql_select_db($db,$conn)) die ("FEIL: Finner ikke database. $db er ikke en gyldig database på denne hosten."); echo 'Skriver til basen...<br />'; $j = 0; $ok = true; for ($i = 0; $i < $lines; $i++) //skriv til databasen { for($k = 0; $k < count($lines[$i]); $k++) { $ok = $ok && (strlen($lines[$i][$k]) > 0); } if(!$ok) continue; $query = sprintf("INSERT INTO %s VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", $tabell, mysql_real_escape_string($lines['Fornavn']), mysql_real_escape_string($lines['Etternavn']), mysql_real_escape_string($lines['Brukernavn']), mysql_real_escape_string($lines['Epost']), mysql_real_escape_string($lines['Telefonnr']), mysql_real_escape_string($lines['Adresse']), mysql_real_escape_string($lines['Postnr']), mysql_real_escape_string($lines['Fodselsnr']), mysql_real_escape_string($lines['Passord']) ); mysql_query($query,$conn); $j++; // Num inserted rows } echo "Ferdig! $j rader satt inn."; ?> EDIT: Fikset indentering Endret 16. april 2013 av hjahre Lenke til kommentar
quantum Skrevet 16. april 2013 Del Skrevet 16. april 2013 Fikk litt hjelp av en gruppa og det var hun som sa at jeg burde bruke case istedet for if og else Jaja, ikke alle kan få med seg alt ... Lenke til kommentar
Crowly Skrevet 16. april 2013 Del Skrevet 16. april 2013 (endret) Switchen er litt spesiell siden den viser hva som blir skrevet ut. Den viser ikke hva som blir skrevet ut. Både case delen og echo er feil. Når du skriver $pairs ['Fornavn'][] = $singles; så lagrer du verdien av $singles i en ny forekomst i $pairs['Fornavn'] array'en. Og så gjentar du det i echo'en. Så hvis det i det hele tatt fungerer, så lagrer du dobbelt. Jeg vil at det som står tekstfilen skal overføres til databasen i den rekkefølgen. Tror jeg forklarte litt dårlig. Nei, det kom klart nok frem. Men måten du løser det på er utrolig tungvindt. Det kan gjøres så enkelt som dette (mulig du må spesifisere full path til student.txt slik at databasen vet nøyaktig hvor den skal lese i fra, mysql må også ha leserettigheter til fila. Kjører man på linux så kan apparmour sette sperrer for dette) $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $source = 'user/student.txt'; $sql="LOAD DATA INFILE '" . $source . "' INTO TABLE bruker FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' (Fornavn,Etternavn,Brukernavn,Epost,Tlf,Adresse,Postnr,Fodselsnr,Pass)"; if ($conn = @ mysql_connect($host,$user,$pass)) { if (mysql_select_db($db,$conn)) { if (mysql_query($sql,$conn)) echo $source.' er lest inn i databasen'; else echo 'Feil med innlesing av '.$source; } else echo 'Finner ikke databasen'; } else echo 'Feil med tilkobling til databasen'; Hvis du/dere absolutt vil lese inn via php og så skrive til databasen, så kan det gjøres slik $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $source = 'user/student.txt'; if ($file=file($source)) { if ($conn = @ mysql_connect($host,$user,$pass)) { if (mysql_select_db($db,$conn)) { unset($file[0]); // fjern overskrifts rad, kommenter ut denne hvis det ikke er noen overskrifts rad foreach ($file as $key=>$line) { $exploded=explode("\t",$line); if (count($exploded)==9) { // sjekk at alle felt er med // kontroller at felt navnene for tabellen bruker er korrekte $query = sprintf("INSERT INTO bruker (Fornavn,Etternavn,Brukernavn,Epost,Tlf,Adresse,Postnr,Fodselsnr,Pass) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", // kan være lurt å legge på en substring, slik at du er sikker på at man ikke prøver å lese inn for lange tekst verdier mysql_real_escape_string($exploded[0]), mysql_real_escape_string($exploded[1]), mysql_real_escape_string($exploded[2]), mysql_real_escape_string($exploded[3]), mysql_real_escape_string($exploded[4]), mysql_real_escape_string($exploded[5]), mysql_real_escape_string($exploded[6]), mysql_real_escape_string($exploded[7]), mysql_real_escape_string($exploded[8]) ); if (mysql_query($query,$conn)) echo 'Lagret ' . $line . '<br/>'; // vellykket lagring else echo 'Feil med lagring av line nr ' . ($key+1) . ': ' . $line . '<br/>'.mysql_error().'<br/>'; // noe gikk galt } } } else echo 'Finner ikke databasen'; } else echo 'Feil med tilkobling til databasen'; } else echo 'Feil med innlesing av fil'; Edit: Endret på måten å fjerne overskrifts raden på fra if ($key==0) continue; inne i foreach'en til unset($file[0]) utenfor. Endret 17. april 2013 av Crowly 1 Lenke til kommentar
corsa91 Skrevet 16. april 2013 Forfatter Del Skrevet 16. april 2013 Hei Jeg har prøvd begge eksemplene: På første måten så får jeg opp: Feil med innlesing av user/student.txt PHP måten får jeg ingen ting opp. Alt er helt hvit bare. Den viser ikke hva som blir skrevet ut. Både case delen og echo er feil. Når du skriver $pairs ['Fornavn'][] = $singles; så lagrer du verdien av $singles i en ny forekomst i $pairs['Fornavn'] array'en. Og så gjentar du det i echo'en. Så hvis det i det hele tatt fungerer, så lagrer du dobbelt. Nei, det kom klart nok frem. Men måten du løser det på er utrolig tungvindt. Det kan gjøres så enkelt som dette (mulig du må spesifisere full path til student.txt slik at databasen vet nøyaktig hvor den skal lese i fra, mysql må også ha leserettigheter til fila. Kjører man på linux så kan apparmour sette sperrer for dette) $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $source = 'user/student.txt'; $sql="LOAD DATA INFILE '" . $source . "' INTO TABLE bruker FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' (Fornavn,Etternavn,Brukernavn,Epost,Tlf,Adresse,Postnr,Fodselsnr,Pass)"; if ($conn = @ mysql_connect($host,$user,$pass)) { if (mysql_select_db($db,$conn)) { if (mysql_query($sql,$conn)) echo $source.' er lest inn i databasen'; else echo 'Feil med innlesing av '.$source; } else echo 'Finner ikke databasen'; } else echo 'Feil med tilkobling til databasen'; Hvis du/dere absolutt vil lese inn via php og så skrive til databasen, så kan det gjøres slik $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $source = 'user/student.txt'; if ($file=file($source)) { if ($conn = @ mysql_connect($host,$user,$pass)) { if (mysql_select_db($db,$conn)) { foreach ($file as $key=>$line) { $exploded=explode("\t",$line); if (count($exploded)==8) { // sjekk at alle felt er med $query = sprintf("INSERT INTO bruker VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", mysql_real_escape_string($exploded[0]), mysql_real_escape_string($exploded[1]), mysql_real_escape_string($exploded[2]), mysql_real_escape_string($exploded[3]), mysql_real_escape_string($exploded[4]), mysql_real_escape_string($exploded[5]), mysql_real_escape_string($exploded[6]), mysql_real_escape_string($exploded[7]), mysql_real_escape_string($exploded[8]) ); if (mysql_query($query,$conn)) echo 'Lagret ' . $line . '<br/>'; // vellykket lagring else echo 'Feil med lagring av line nr ' . ($key+1) . ': ' . $line . '<br/>'; // noe gikk galt } } } else echo 'Finner ikke databasen'; } else echo 'Feil med tilkobling til databasen'; } else echo 'Feil med innlesing av fil'; Jeg får opp en lang liste med feilmeldinger:Bearbeider data... Gjør klar til Ã¥ mate databasen... Skriver til basen... Notice: Undefined offset: 0 in C:\Program Files (x86)\xampp\htdocs\test\leggeflerebrukere.php on line 39 Notice: Undefined offset: 1 in C:\Program Files (x86)\xampp\htdocs\test\leggeflerebrukere.php on line 39 Notice: Undefined offset: 2 in C:\Program Files (x86)\xampp\htdocs\test\leggeflerebrukere.php on line 39 Notice: Undefined offset: 3 in C:\Program Files (x86)\xampp\htdocs\test\leggeflerebrukere.php on line 39 Skjønner ikke helt hvorfor du mellomlagrer fila som du gjør. Tror det hadde vært mye enklere for deg å lagre linje for linje eller gjøre som Crowly skrev. Jeg har en litt annen løsning, men er ingen ekspert på PHP, så det finnes sikkert bedre måter å gjøre det på. <?php $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $tabell ='bruker'; //navnet på tabellen du skal fylles med data $source = 'user/student.txt'; //kildefilen som inneholder data $pairs = array( //her legger vi etter hvert de dataene "Fornavn", "Etternavn", "Brukernavn", "Epost", "Telefonnr", "Adresse", "Postnr", "Fodselsnr", "Passord" ); $lines = array(); if (!($liste = @ file("$source"))) //hent inn data die ("FEIL: Finner ikke kildefilen."); echo 'Bearbeider data...<br />'; foreach ($liste as $linje) { $exploded = explode("\t",$linje); //del hver linje opp i sine enkeltbestanddeler for($i = 0; $i < count($pairs) && $i < count($exploded); $i++) { sprintf("%s: %s\n", $pairs[$i], $exploded[$i]); $lines[$pairs[$i]] = $exploded[$i]; } } echo 'Gjør klar til å mate databasen...<br />'; if (!($conn = @ mysql_connect($host,$user,$pass))) //koble til database-host die ("FEIL: Kan ikke koble til host."); if (! @ mysql_select_db($db,$conn)) die ("FEIL: Finner ikke database. $db er ikke en gyldig database på denne hosten."); echo 'Skriver til basen...<br />'; $j = 0; $ok = true; for ($i = 0; $i < $lines; $i++) //skriv til databasen { for($k = 0; $k < count($lines[$i]); $k++) { $ok = $ok && (strlen($lines[$i][$k]) > 0); } if(!$ok) continue; $query = sprintf("INSERT INTO %s VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", $tabell, mysql_real_escape_string($lines['Fornavn']), mysql_real_escape_string($lines['Etternavn']), mysql_real_escape_string($lines['Brukernavn']), mysql_real_escape_string($lines['Epost']), mysql_real_escape_string($lines['Telefonnr']), mysql_real_escape_string($lines['Adresse']), mysql_real_escape_string($lines['Postnr']), mysql_real_escape_string($lines['Fodselsnr']), mysql_real_escape_string($lines['Passord']) ); mysql_query($query,$conn); $j++; // Num inserted rows } echo "Ferdig! $j rader satt inn."; ?> EDIT: Fikset indentering Lenke til kommentar
hjahre Skrevet 16. april 2013 Del Skrevet 16. april 2013 Ser det var noen feil i det jeg skrev (kan godt hende det fortsatt er det). Forhåpentligvis funker den. <?php $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $tabell ='bruker'; //navnet på tabellen du skal fylles med data $source = 'user/student.txt'; //kildefilen som inneholder data $pairs = array( //her legger vi etter hvert de dataene "Fornavn", "Etternavn", "Brukernavn", "Epost", "Telefonnr", "Adresse", "Postnr", "Fodselsnr", "Passord" ); $lines = array(); if (!($liste = @ file("$source"))) //hent inn data die ("FEIL: Finner ikke kildefilen."); echo 'Bearbeider data...<br />'; foreach ($liste as $linje) { $exploded = explode("\t",$linje); //del hver linje opp i sine enkeltbestanddeler $line = array(); for($i = 0; $i < count($pairs) && $i < count($exploded); $i++) { sprintf("%s: %s\n", $pairs[$i], $exploded[$i]); $line[$pairs[$i]] = $exploded[$i]; } $lines[] = $line; } echo 'Gjør klar til å mate databasen...<br />'; if (!($conn = @ mysql_connect($host,$user,$pass))) //koble til database-host die ("FEIL: Kan ikke koble til host."); if (! @ mysql_select_db($db,$conn)) die ("FEIL: Finner ikke database. $db er ikke en gyldig database på denne hosten."); echo 'Skriver til basen...<br />'; $j = 0; $ok = true; for ($i = 0; $i < $lines; $i++) //skriv til databasen { $line = $lines[$i]; for($k = 0; $k < count($line); $k++) { $ok = $ok && (strlen($line[$pairs[$k]) > 0); } if(!$ok) continue; $query = sprintf("INSERT INTO %s VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", $tabell, mysql_real_escape_string($line['Fornavn']), mysql_real_escape_string($line['Etternavn']), mysql_real_escape_string($line['Brukernavn']), mysql_real_escape_string($line['Epost']), mysql_real_escape_string($line['Telefonnr']), mysql_real_escape_string($line['Adresse']), mysql_real_escape_string($line['Postnr']), mysql_real_escape_string($line['Fodselsnr']), mysql_real_escape_string($line['Passord']) ); mysql_query($query,$conn); $j++; // Num inserted rows } echo "Ferdig! $j rader satt inn."; ?> Ser forøvrig ut til at grunnen til at du ikke får Crowlys versjon til å funke er fordi han sjekker om count er en for lite. Han sjekker om count() == 8 når det burde være count() == 9 Lenke til kommentar
corsa91 Skrevet 16. april 2013 Forfatter Del Skrevet 16. april 2013 (endret) hjahre får forsatt feil:$ok = $ok && (strlen($line[$pairs[$k]) > 0); Crowlys sin fungerer men får ut: Feil med lagring av line nr 1: Fornavn Etternavn Brukernavn Epost Tlf Adresse Postnr Fodselsnr Pass Endret 16. april 2013 av corsa91 Lenke til kommentar
quantum Skrevet 17. april 2013 Del Skrevet 17. april 2013 Er det kjøring av sql'en som feiler? Er alle feltene i tabellen karakterbaserte? Hvorfor kan du ikke se feilmeldinger med mysql_error()? Lenke til kommentar
Crowly Skrevet 17. april 2013 Del Skrevet 17. april 2013 (endret) Har rettet opp feilen med count() og endret litt på sql'en. Når du bruker insert så må/bør du spesifisere hvilke felt du skal legge dataene i, og rekkefølgen mp med stemme overens med rekkefølgen i VALUES. Du kan droppe feltene hvis du skal sette inn data i alle feltene i tabellen. Eks en tabell med 3 felter, tall1, tall2 og tall3 Ok INSERT INTO tall_tab (tall2,tall3) VALUES(50,60) // tall1 blir NULL eller default verdi INSERT INTO tall_tab (tall1,tall2,tall3) VALUES(40,50,60) INSERT INTO tall_tab VALUES(40,50,60) Ikke ok INSERT INTO tall_tab VALUES(50,60) // tall3 er ikke spesifisert INSERT INTO tall_tab (tall1,tall2) VALUES(40,50,60) // oppgir flere verdier enn felt Hvis linje 1 i fila er en overskrifts rad så bør den hoppes over. Se redigert kode lengre opp. På første måten så får jeg opp: Feil med innlesing av user/student.txt Mysql finner ikke, eller har ikke lese rettigheter til fila. Prøv å oppgi full path og dobbeltsjekk rettighetene. Er det en windows eller linux maskin dette kjøres på? Som tidligere nevnt på linux kan apparmor nekte mysql lese rettigheter. Da må man legge til lese rettigheter i fila /etc/apparmor.d/usr.sbin.mysqld. Hvis fila skal leses i fra f.eks. /home/crowly/www/student: /home/crowly/www/student/** r, gir lese rettigheter til den mappen med undermapper. Database brukeren må også ha FILE rettigheter Endret 17. april 2013 av Crowly Lenke til kommentar
quantum Skrevet 17. april 2013 Del Skrevet 17. april 2013 Øhhhh, er det mysql som skal lese denne fila da? Det er eier av php-prosessen som må ha tilgang ... Lenke til kommentar
corsa91 Skrevet 17. april 2013 Forfatter Del Skrevet 17. april 2013 Akuratt nå prøver jeg via xampp. Er det kjøring av sql'en som feiler? Er alle feltene i tabellen karakterbaserte? Hvorfor kan du ikke se feilmeldinger med mysql_error()? Jeg får ingen feilmeldinger opp på skjermen. Tror jeg går heller for den koden her: <?php $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $source = 'user/student.txt'; if ($file=file($source)) { if ($conn = @ mysql_connect($host,$user,$pass)) { if (mysql_select_db($db,$conn)) { foreach ($file as $key=>$line) { if ($key==0) continue; // hopp over overskrifts rad, kommenter ut denne hvis det ikke er noen overskrifts rad $exploded=explode("\t",$line); if (count($exploded)==9) { // sjekk at alle felt er med // kontroller at felt navnene for tabellen bruker er korrekte $query = sprintf("INSERT INTO bruker (Fornavn,Etternavn,Brukernavn,Epost,Tlf,Adresse,Postnr,Fodselsnr,Pass) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", // kan være lurt å legge på en substring, slik at du er sikker på at man ikke prøver å lese inn for lange tekst verdier mysql_real_escape_string($exploded[0]), mysql_real_escape_string($exploded[1]), mysql_real_escape_string($exploded[2]), mysql_real_escape_string($exploded[3]), mysql_real_escape_string($exploded[4]), mysql_real_escape_string($exploded[5]), mysql_real_escape_string($exploded[6]), mysql_real_escape_string($exploded[7]), mysql_real_escape_string($exploded[8]) ); if (mysql_query($query,$conn)) echo 'Lagret ' . $line . '<br/>'; // vellykket lagring else echo 'Feil med lagring av line nr ' . ($key+1) . ': ' . $line . '<br/>'.mysql_error().'<br/>'; // noe gikk galt } } } else echo 'Finner ikke databasen'; } else echo 'Feil med tilkobling til databasen'; } else echo 'Feil med innlesing av fil'; ?> Lenke til kommentar
quantum Skrevet 17. april 2013 Del Skrevet 17. april 2013 Jeg får ingen feilmeldinger opp på skjermen. Ja, det var liksom pointet, hvorfor ikke skrive dem ut så du ser dem? Lenke til kommentar
Crowly Skrevet 17. april 2013 Del Skrevet 17. april 2013 Endret på hvordan overskriftsraden fjernes i koden lengre opp. I stedet for at en if skal kjøres for hver linje og sjekke om linjen skal hoppes over, så fjerner jeg den utenfor løkken i stedet for. Lenke til kommentar
corsa91 Skrevet 17. april 2013 Forfatter Del Skrevet 17. april 2013 (endret) Testet nye koden og den legger fortsatt ikke inn i databasen Se bilde. For ingen feilmeldinger og heller ikke noe melding om at det har blitt lagt til. Sjekka databasen men den er fortsatt tom <?php $host = 'localhost'; //navnet på maskinen databasen din ligger på $user = 'root'; //ditt brukernavn på mySQL-basen $pass = ''; //ditt passord på mySQL-basen $db = 'ulv'; //navnet på mySQL-basen $source = 'user/student.txt'; if ($file=file($source)) { if ($conn = @ mysql_connect($host,$user,$pass)) { if (mysql_select_db($db,$conn)) { unset($file[0]); // fjern overskrifts rad, kommenter ut denne hvis det ikke er noen overskrifts rad foreach ($file as $key=>$line) { $exploded=explode("\t",$line); if (count($exploded)==9) { // sjekk at alle felt er med // kontroller at felt navnene for tabellen bruker er korrekte $query = sprintf("INSERT INTO bruker (Fornavn,Etternavn,Brukernavn,Epost,Tlf,Adresse,Postnr,Fodselsnr,Pass) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')", // kan være lurt å legge på en substring, slik at du er sikker på at man ikke prøver å lese inn for lange tekst verdier mysql_real_escape_string($exploded[0]), mysql_real_escape_string($exploded[1]), mysql_real_escape_string($exploded[2]), mysql_real_escape_string($exploded[3]), mysql_real_escape_string($exploded[4]), mysql_real_escape_string($exploded[5]), mysql_real_escape_string($exploded[6]), mysql_real_escape_string($exploded[7]), mysql_real_escape_string($exploded[8]) ); if (mysql_query($query,$conn)) echo 'Lagret ' . $line . '<br/>'; // vellykket lagring else echo 'Feil med lagring av line nr ' . ($key+1) . ': ' . $line . '<br/>'.mysql_error().'<br/>'; // noe gikk galt } } } else echo 'Finner ikke databasen'; } else echo 'Feil med tilkobling til databasen'; } else echo 'Feil med innlesing av fil'; ?> EDIT: Lagt til koden Endret 17. april 2013 av corsa91 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå