Avatar billede mal_dk Nybegynder
01. marts 2007 - 20:24 Der er 37 kommentarer og
1 løsning

Script til upload af mysql-data

Vil lige spørge om hjælp:
Jeg har en text-fil med backup-data til Mysql. Indlæses teksten i en forespørgsel i PHPMyAdmin virker det hele fint.
Men jeg vil gerne gøre det uafhængigt af PHPMyAdmin (eller mere brugervenligt) og søger derfor et script, der via en "gennemse" knap, indlæser text-filen med backupdata, og på den måde updaterer MySQL.
Avatar billede jakobdo Ekspert
01. marts 2007 - 21:43 #1
Du burde som sådan kunne indlæse filens indhold via file_get_contents()
Og noget i stil med:

$sql_string = file_get_contents($_FILES['upload']['tmp_name'])
//Forbind til mysql
mysql_query($sql_string);
Avatar billede jjdk Nybegynder
01. marts 2007 - 22:13 #2
Jeg har prøvet med følgende kode (Mysql.php har forbindelsesdataene):

<?php
require 'mysql.php';
$sql_string = file_get_contents($_FILES['upload']['tmp_name']);
mysql_query($sql_string);
?>

Men der sker ingenting - bare en tom side.
Avatar billede mal_dk Nybegynder
01. marts 2007 - 22:25 #3
Jeg har får også en tom side: Har prøvet med denne kode:

<?php
require 'mysql.php';
mysql_connect("mysql04.talkactive.net","????","????") or die (mysql_error());
mysql_select_db("?????") or die (mysql_error());
$sql_string = file_get_contents($_FILES['upload']['tmp_name']);
mysql_query($sql_string);
?>
Avatar billede jakobdo Ekspert
02. marts 2007 - 09:15 #4
Prøv denne kode:

<?php
if(isset($_POST['upload']))
{
    mysql_connect("mysql04.talkactive.net","????","????") or die (mysql_error());
    mysql_select_db("?????") or die (mysql_error());
    $sql_string = file_get_contents($_FILES['upload']['tmp_name']);
    mysql_query($sql_string);
}
?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="multipart/form-data">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>
Avatar billede mal_dk Nybegynder
02. marts 2007 - 09:51 #5
Det ser umiddelbart bedre ud nu, idet jeg kan uploade filen. Men det ser ikke ud til, at der sker nogen ændringer i MySQl. Jeg har tjekket via PHPMyAdmin.
Når jeg har valgt filen og trykker på Upload-knappen, går der få millisekunder, og siden er herefter opdateret.
Filen jeg prøver at indlæse, er et større MySQL-dump på 100 kb., som genopretter tabeller og poster.
Nogen gode forslag???
Avatar billede jakobdo Ekspert
02. marts 2007 - 19:27 #6
Du skal nok lige rette:
mysql_query($sql_string);
til:
mysql_query($sql_string) or die(mysql_error())
Avatar billede mal_dk Nybegynder
02. marts 2007 - 19:50 #7
Det gør ingen forskel. Stadig ingen opdateringer.
Jeg har altså en tekstfil, som jeg har kaldt "DB-dump.sql". Den indeholder backup-data fra MySQl. Eksempelvis:

DROP TABLE IF EXISTS kalender; CREATE TABLE kalender (
  id int(11) NOT NULL auto_increment,
  month varchar(250),
  year int(11),
  date varchar(250),
  tilk varchar(255) NOT NULL,
  aftale_id varchar(255) NOT NULL,
  PRIMARY KEY (id)
);
INSERT INTO kalender VALUES ( '215', '5', '2007', '31', '12:00', 'IyPsyGAQO5Olld6C00Na');
osv.
Avatar billede jakobdo Ekspert
02. marts 2007 - 19:56 #8
Og der kommer heller ikke nogen fejl?
Avatar billede mal_dk Nybegynder
02. marts 2007 - 20:13 #9
Nej - ingen fejlmeddelelser.
Avatar billede mal_dk Nybegynder
02. marts 2007 - 20:21 #10
Koden ser sådan her ud:

<?php
if(isset($_POST['upload']))
{
mysql_connect("****","*****","*****") or die (mysql_error());
mysql_select_db("*****") or die (mysql_error());

$sql_string = file_get_contents($_FILES['upload']['tmp_name']);
mysql_query($sql_string) or die(mysql_error());
}
?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="multipart/form-data">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>
Avatar billede jakobdo Ekspert
02. marts 2007 - 20:43 #11
Prøv at ret:
mysql_query($sql_string) or die(mysql_error());
til:
mysql_query("'" . $sql_string . "'") or die(mysql_error());
Avatar billede mal_dk Nybegynder
02. marts 2007 - 21:09 #12
Det gør desværre ingen forskel.
Bare lige for at understrege det, så fungerer det fint i PHPMyAdmin. Altså hvor jeg kopierer hele indholdet af filen ind i en "forespørgsels vindue" og vælger "Udfør".
Avatar billede jakobdo Ekspert
02. marts 2007 - 22:20 #13
Ja, de må lave et eller andet!
Jeg må lige undersøge tingene nærmere.
Avatar billede jjdk Nybegynder
02. marts 2007 - 22:31 #14
Jakobdo - tak for din ihærdighed. :-))
Avatar billede jjdk Nybegynder
02. marts 2007 - 22:34 #15
jjdk er farmand og mal_dk er sønnik. Men det er altså "jjdk", der spørger her. Mal_dk blev oprettet i går på "jjdk's" PC. Det har drillet med auto-brugernavne. Undskyld forvirringen.
Avatar billede jakobdo Ekspert
03. marts 2007 - 15:48 #16
Her skulle den være der:

<?php
//http://www.eksperten.dk/spm/765598

if(isset($_POST['upload']))
{
    require('connect.php');
    $sql_string = file_get_contents($_FILES['file']['tmp_name']);
   
    //REMOVE COMMENTS
    $sql_string = preg_replace('/--\\s(.*)\\r\\n/m', '', $sql_string);
   
    //CODE FROM http://www.php.net/mysql_query -> me at harveyball dot com - 11-Sep-2004 01:13
    $tok = strtok($sql_string, ";");
  while($tok)
    {
        mysql_query("$tok") or die(mysql_error());
        $tok = strtok(";");
    }
}
?>
<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>
Avatar billede jjdk Nybegynder
03. marts 2007 - 17:00 #17
Så lykkedes det.
Når jeg har uploadet Sql-filen, får jeg følgende svar:
"Query was empty"
Kan det ændres, så der står "Opdateringen lykkedes".
Ellers tusind tak for hjælpen. Sender du et svar.
Avatar billede jakobdo Ekspert
03. marts 2007 - 17:11 #18
"Query was empty" er det noget i har tilføjet?
For det kan jo være mysql_error() der giver beskeden?
Avatar billede jjdk Nybegynder
03. marts 2007 - 17:20 #19
Nej - koden er skrevet som ovenfor:

<?php
//http://www.eksperten.dk/spm/765598
if(isset($_POST['upload']))
{
require('mysql.php');
    $sql_string = file_get_contents($_FILES['file']['tmp_name']);
    //REMOVE COMMENTS
    $sql_string = preg_replace('/--\\s(.*)\\r\\n/m', '', $sql_string);
    //CODE FROM http://www.php.net/mysql_query -> me at harveyball dot com - 11-Sep-2004 01:13
    $tok = strtok($sql_string, ";");
  while($tok)
    {
        mysql_query("$tok") or die(mysql_error());
        $tok = strtok(";");
    }
}
?>
<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>
Avatar billede jakobdo Ekspert
03. marts 2007 - 17:28 #20
Og hvordan ser jeres SQL fil ud?
Måske der er en streng som er tom, og derfor melder den: Query was empty

Du kan evt. inden mysql_query() kaldes, lave:

if(!empty($tok))
{
mysql_query("$tok") or die(mysql_error());
}
Avatar billede jjdk Nybegynder
03. marts 2007 - 17:54 #21
Når vi "inserter" i tabellerne, er der ingen tomme poster, men et eller flere felter i en post kan være uden indhold.
Avatar billede jakobdo Ekspert
03. marts 2007 - 18:00 #22
Ok!
Et eller andet må der jo være galt, den gjorde det ikke på den fil jeg testede med.
Avatar billede jjdk Nybegynder
03. marts 2007 - 18:03 #23
Jeg anvender fortsat koden ovenfor, men nu driller det. Når jeg har uploadet SQL-filen og vil prøve igen, får jeg ingen input-form, men en fejl. Skal der ske en eller anden form for nul-stilling.
Avatar billede jjdk Nybegynder
03. marts 2007 - 18:20 #24
Vi må hellere afslutte - jeg er meget glad for dine input:
Jeg prøvede det sidste med "if(!empty...", men jeg får fortsat samme fejl. Min kode ser sådan her ud, men er usikker på om det nye er placeret korrekt. Sender du et svar:

<?php
//http://www.eksperten.dk/spm/765598
if(isset($_POST['upload']))
{
require('mysql.php');
    $sql_string = file_get_contents($_FILES['file']['tmp_name']);
    //REMOVE COMMENTS
    $sql_string = preg_replace('/--\\s(.*)\\r\\n/m', '', $sql_string);
    //CODE FROM http://www.php.net/mysql_query -> me at harveyball dot com - 11-Sep-2004 01:13
    $tok = strtok($sql_string, ";");
  while($tok)
    {
      if(!empty($tok))
        {
        mysql_query("$tok") or die(mysql_error());
}
        $tok = strtok(";");
    }
}
?>
<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>
Avatar billede jakobdo Ekspert
03. marts 2007 - 18:46 #25
Prøv lige følgende kode:

<?php
//http://www.eksperten.dk/spm/765598
if(isset($_POST['upload']))
{
    require('mysql.php');
    $sql_string = file_get_contents($_FILES['file']['tmp_name']);
   
    //REMOVE COMMENTS
    $sql_string = preg_replace('/--\\s(.*)\\r\\n/m', '', $sql_string);
   
    //CODE FROM http://www.php.net/mysql_query -> me at harveyball dot com - 11-Sep-2004 01:13
    $tok = strtok($sql_string, ";");
  while($tok)
    {
        echo "SQL: " . $tok . '<hr />';
        if(!empty($tok))
        {
            mysql_query("$tok") or die(mysql_error());
        }
        $tok = strtok(";");
    }
}
?>
<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>

Og du skal så kigge efter om der er en SQL: hvor der intet står bagefter.
Avatar billede jjdk Nybegynder
03. marts 2007 - 19:01 #26
Så får jeg listet samtlige linjer.
2. Sidste linje = SQL:
Sidste linje = Query was empty

Jeg kan godt se, at sidste linje i sql-filen indeholder nogle spaces.
Avatar billede jakobdo Ekspert
03. marts 2007 - 19:12 #27
Det vil sige du har en tom linie i din SQL fil.
Prøv at se nederste i filen og se den sidste linie.
Avatar billede jjdk Nybegynder
03. marts 2007 - 19:36 #28
Sidste linje er tom - bortset fra 3 x mellerum.
Jeg har andre tomme linjer, men der er ingen mellemrum. (de giver ingen fejl).
Så jeg må kigge nærmere i mit backup-script, som laver sql-filen og de 3 mellemrum til sidst.
Avatar billede jjdk Nybegynder
03. marts 2007 - 20:01 #29
Eller kan man lave en if-statement, hvor der kun indlæses linjer, med indhold ud over space.
Avatar billede jakobdo Ekspert
03. marts 2007 - 20:21 #30
Prøv denne kode:

<?php
//http://www.eksperten.dk/spm/765598
if(isset($_POST['upload']))
{
    require('mysql.php');
    $sql_string = file_get_contents($_FILES['file']['tmp_name']);
 
    //REMOVE COMMENTS
    $sql_string = preg_replace('/--\\s(.*)\\r\\n/m', '', $sql_string);
 
    //CODE FROM http://www.php.net/mysql_query -> me at harveyball dot com - 11-Sep-2004 01:13
    $tok = trim(strtok($sql_string, ";"));
  while($tok)
    {
        echo "SQL: " . $tok . '<hr />';
        if(!empty($tok))
        {
            mysql_query("$tok") or die(mysql_error());
        }
        $tok = trim(strtok(";"));
    }
}
?>
<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
MYSQL FIL: <input type="file" name="file"><br />
<input type="submit" name="upload" value="Upload SQL">
</form>
Avatar billede jjdk Nybegynder
03. marts 2007 - 20:22 #31
Nu har jeg fjernet de 3 mellemrum i den sidste linje, som altså er helt tom nu.
Men jeg får fejlen alligevel - så det er ikke mellemrummene, der gør det.
Bare lidt underligt, da der er mange andre tomme linjer i sql-filen. De giver ikke fejl, men kun den sidste linje.
Avatar billede jakobdo Ekspert
03. marts 2007 - 20:40 #32
kan du ikke smide de sidste linier af jeres sql fil herind?

Husk at fjern evt. "hemmelige" ting i teksten.
Avatar billede jjdk Nybegynder
03. marts 2007 - 20:43 #33
Ok - så har jeg prøvet den sidste kode, og nu kører det korrekt.
Tusind tusind tak for din hjælp.
Nu må du hellere sende svaret.
Avatar billede jjdk Nybegynder
03. marts 2007 - 20:45 #34
den sidste del af filen, ser i øvrigt sådan her ud:

# --------------------------------------------------------
#
# Struktur for tabel 'kalender_user'
#

DROP TABLE IF EXISTS kalender_user; CREATE TABLE kalender_user (
  id int(11) NOT NULL auto_increment,
  b varchar(255),
  p varchar(255),
  lvl int(1),
  menu_1 int(1) DEFAULT '0' NOT NULL,
  menu_2 int(1) DEFAULT '0' NOT NULL,
  menu_3 int(1) DEFAULT '0' NOT NULL,
  menu_4 int(1) DEFAULT '0' NOT NULL,
  menu_5 int(1) DEFAULT '0' NOT NULL,
  menu_6 int(1) DEFAULT '0' NOT NULL,
  menu_7 int(1) DEFAULT '0' NOT NULL,
  PRIMARY KEY (id)
);

#
# Indhold af tabel 'kalender_user'
#

INSERT INTO kalender_user VALUES ( '1', 'udlejer', '***', '1', '1', '1', '1', '0', '1', '0', '1');
INSERT INTO kalender_user VALUES ( '2', 'tilsyn', '***', '2', '0', '1', '0', '0', '0', '0', '1');
INSERT INTO kalender_user VALUES ( '3', 'kas', '**', '3', '1', '1', '1', '0', '1', '0', '1');
INSERT INTO kalender_user VALUES ( '4', 'udvalg', '***', '4', '0', '0', '1', '0', '0', '0', '0');
INSERT INTO kalender_user VALUES ( '5', 'jjdk', '***', '5', '1', '1', '1', '1', '1', '1', '1');
Avatar billede jjdk Nybegynder
03. marts 2007 - 20:45 #35
men sidste linje vises ikke ovenfor. Den er er tom, men indeholder 3 spaces.
Avatar billede jakobdo Ekspert
03. marts 2007 - 21:12 #36
Så det vil sige det virker nu?
Hvis ja, så får du et svar her.
Avatar billede mal_dk Nybegynder
03. marts 2007 - 21:30 #37
Du får lige pointene fra sønniks konto, da jeg var logget på med hans ved en fejl.
Avatar billede jakobdo Ekspert
03. marts 2007 - 21:54 #38
Jeg takker for point.
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