Avatar billede tinem Novice
15. oktober 2006 - 16:49 Der er 18 kommentarer og
1 løsning

Hjælp til dato fra en amerikansk side importeret som .dat fi

Jeg brug for hjælp til at komme videre med en øvelse som jeg har lavet fra denne bog http://googlemapsbook.com/.

I nedenstående er koderne for hvordan .dat filerne bliver importeret til databasen og det virker ONLINE. Nu er jeg ved at teste det OFFLINE og har problemer med datoen. De fleste data bliver importeret, men p.gra. denne fejl http://www.tinemuller.dk/div/datofejl.gif mangler der nogle.

------------------------------------------------------
<title>OFFLINE - chapter 5 Googlemapsbook</title><?php

set_time_limit(0); // this could take a while

//OFFLINE
// Connect to the database
$link = mysql_connect("localhost", "root")
or die(mysql_error());
mysql_selectdb("tinemullerdk",$link) or die (mysql_error());


// Open the Physical Location Coordinates file
$handle = @fopen("../Data/RA.dat","r");
if ($handle) {
while (!feof($handle)) {
  $buffer = fgets($handle, 4096);
  $row = explode("|",$buffer);
  if ($row[3] > 0) {
  // Modify things before we insert them
  $row[12] = date("Y-m-d",strtotime($row[12]));
  $row[13] = date("Y-m-d",strtotime($row[13]));
  $row[23] = addslashes($row[23]);
  $row[24] = addslashes($row[24]);
  $row[30] = addslashes($row[30]);

  // Formulate our query
  $query = "INSERT INTO fcc_structure (unique_si, date_constr,
    date_removed, struc_address, struc_city, struc_state, struc_height,
    struc_elevation, struc_ohag, struc_ohamsl, struc_type)
    VALUES ({$row[4]}, '{$row[12]}', '{$row[13]}', '{$row[23]}',
    '{$row[24]}', '{$row[25]}', '{$row[26]}', '{$row[27]}', '{$row[28]}',
    '{$row[29]}', '{$row[30]}')";

  // Execute our query
  $result = @mysql_query($query);
  if (!$result) echo("ERROR: Duplicate structure info #{$row[4]} <br>\n");
  }
}
fclose($handle);
}

echo "Done Structures. <br>\n";

// Open the Ownership Data file
$handle = @fopen("../Data/EN.dat","r");
if ($handle) {
while (!feof($handle)) {
  $buffer = fgets($handle, 4096);
  $row = explode("|",$buffer);
  if ($row[3] > 0) {
  $row[7] = addslashes($row[7]);
  $row[14] = addslashes($row[14]);
  $row[16] = addslashes($row[16]);
  $query = "INSERT INTO fcc_owner (unique_si_own, owner_name,
    owner_address, owner_city, owner_state, owner_zip) VALUES ({$row[4]},
    '{$row[7]}', '{$row[14]}','{$row[16]}', '{$row[17]}', '{$row[18]}')";
  $result = @mysql_query($query);
  if (!$result) {
    // Newer information later in the file: UPDATE instead
    $query = "UPDATE fcc_owner SET owner_name='{$row[7]}',
    owner_address='{$row[14]}', owner_city='{$row[16]}',
    owner_state='{$row[17]}', owner_zip='{$row[18]}'
    WHERE unique_si_own={$row[4]}";
    $result = @mysql_query($query);
    if (!$result)
    echo "Failure to import ownership for struc. #{$row[4]}<br>\n";
    else
    echo "Updated ownership for struc. #{$row[4]} <br>\n";
  }
  }
}
fclose($handle);
}

echo "Done Ownership. <br>\n";

// Open the Physical Locations file
$handle = @fopen("../Data/CO.dat","r");
if ($handle) {
while (!feof($handle)) {
  $buffer = fgets($handle, 4096);
  $row = explode("|",$buffer);
  if ($row[3] > 0) {
  if ($row[9] == "S") $sign = -1; else $sign = 1;
  $dec_lat = $sign*($row[6]+$row[7]/60+$row[8]/3600);
  if ($row[14] == "W") $sign = -1; else $sign = 1;
  $dec_long = $sign*($row[11]+$row[12]/60+$row[13]/3600);
  $query = "INSERT INTO fcc_location (unique_si_loc, lat_deg, lat_min,
    lat_sec, lat_dir, latitude, long_deg, long_min, long_sec,
    long_dir, longitude) VALUES ({$row[4]},'{$row[6]}', '{$row[7]}',
    '{$row[8]}', '{$row[9]}', '$dec_lat','{$row[11]}', '{$row[12]}',
    '{$row[13]}', '{$row[14]}', '$dec_long')";
  $result = @mysql_query($query);
  if (!$result) {
    // Newer information later in the file: UPDATE instead
    $query = "UPDATE fcc_location SET lat_deg='{$row[6]}',
    lat_min='{$row[7]}', lat_deg='{$row[8]}', lat_dir='{$row[9]}',
    latitude='$dec_lat', long_deg='{$row[11]}', long_min='{$row[12]}',
    long_sec='{$row[13]}', long_dir='{$row[14]}', longitude='$dec_long'
    WHERE unique_si_loc='{$row[4]}'";
    $result = @mysql_query($query);
    if (!$result)
    echo "Failure to import location for struc. #{$row[4]} <br>\n";
    else
    echo "Updated location for struc. #{$row[4]} <br>\n";
  }
  }
}
fclose($handle);
}

echo "Done Locations. <br>\n";

?>
------------------------------------------------------


Jeg har prøvet at ændre "Y-m-d" til "d-m-Y" i linje 20 og 21, men det hjælper ikke. Kan du hjælpe med problemet?
Avatar billede jakobdo Ekspert
16. oktober 2006 - 09:35 #1
Fejlen siger du kalder funktion strtotime() med ingen data.
F.eks. strtotime(); og ikke som forventet: strtotime('10-10-2006');
Avatar billede tinem Novice
16. oktober 2006 - 09:53 #2
Tak for svaret, men vil du være venlig at uddybe det noget mere, da jeg først er ved at lære PHP. Hvad skal rettes for at det virker OFFLINE? Jeg tror at det har noget med mit computerur at gøre, passer det? Altså dansk klokkeslet og dato. Ellers også har det måske noget at gøre med Windows og Unix?

Det virker ONLINE på Azero som er mit webhotel, men her har de måske taget højde for den slags ting.
Avatar billede jakobdo Ekspert
16. oktober 2006 - 10:15 #3
Alle steder du bruger strtotime() kunne du starte med at debugge.
Prøv at udskriv input til funktionen inden du kalder strtotime()
Avatar billede tinem Novice
16. oktober 2006 - 10:31 #4
Hvordan gør man det? Jeg spørger jo om hjælp i dette forum, fordi jeg IKKE kan finde ud af det, da jeg er helt ny på dette område.:-(

Men vil da meget gerne lære hvordan man debugger osv. osv.
Avatar billede jakobdo Ekspert
16. oktober 2006 - 10:48 #5
At debugge er helt normalt fejlsøgning.
Det jeg mener er f.eks. inden et kald som:
$row[12] = date("Y-m-d",strtotime($row[12]));
Så laver du:
echo 'DEBUG $row[12] indeholder : ' . $row[12] . '<br />';

Så kan du følge med i om $row[12] indeholder hvad du forventer.
Avatar billede tinem Novice
16. oktober 2006 - 11:46 #6
Den viser nu følgende, som jo er forkert, fordi adressen står som DEBUG $row[12] indeholder : 01/23/1997:
Jeg prøvede så at indsætte samme koder oven over $row[13] og ændrede selvfølgelig til 13, men det virkede ikke. Det kan man åbenbart ikke?

--------------
DEBUG $row[12] indeholder :

Warning: strtotime() [function.strtotime]: Called with an empty time parameter. in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 22

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 22

Warning: strtotime() [function.strtotime]: Called with an empty time parameter. in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 24

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 24
ERROR: Duplicate structure info #96980
DEBUG $row[12] indeholder : 01/23/1997

Warning: strtotime() [function.strtotime]: Called with an empty time parameter. in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 24

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 24
ERROR: Duplicate structure info #96987
DEBUG $row[12] indeholder :

Warning: strtotime() [function.strtotime]: Called with an empty time parameter. in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 22

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 22

Warning: strtotime() [function.strtotime]: Called with an empty time parameter. in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 24

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\Documents and Settings\Tine\Dokumenter\php_sider\OFFLINEgooglemapsbook\chapter5\DataImport\TMP9qzvb782y0.php on line 24
ERROR: Duplicate structure info #96994
DEBUG $row[12] indeholder : 07/31/1995
------------------------
Avatar billede tinem Novice
16. oktober 2006 - 12:21 #7
Kan det ikke have noget at gøre med, hvordan datoen står i tabellen? F.eks. står der i tabellen "fcc_structure" som der er problemer med under standardværdi 0000-00-00
   
date_constr  date Ja  0000-00-00       
date_removed  date Ja  0000-00-00
Avatar billede jakobdo Ekspert
16. oktober 2006 - 15:13 #8
Jeg kan se koden her:
DEBUG $row[12] indeholder :
Den skriver at $row[12] er tom.
Hvis du kigger din tabel igennem har du så nogle tomme rækker/poster?

Man kunne lave et hack ala:

if(!empty($row[12]))
{
//Koden som skal behandle $row[12]
}
Avatar billede tinem Novice
17. oktober 2006 - 10:13 #9
Jeg er MEGET taknemlig for at du gider at prøve at hjælpe mig. Nu har jeg uploaded 2 filer http://www.tinemuller.dk/googlemapsbook/chapter5/testforoffline/testforoffline.rar, som måske vil gøre det nemmere for dig at teste. Jeg har KUN uploaded den ene tabel, hvor der er problemer med datoen.:-)
Avatar billede jakobdo Ekspert
17. oktober 2006 - 10:32 #10
Har du de korrekte .dat filer liggende de rigtige steder?
Og kunne jeg evt. få lov at se de filer nogle steder?
Avatar billede tinem Novice
17. oktober 2006 - 12:23 #11
Jeg prøvet at lægge RA.dat ind i selve folderen med index.php, men det hjalp ikke.

Jeg har uploaded RA.dat hertil http://www.tinemuller.dk/googlemapsbook/chapter5/testforoffline/RA.rar

Hvis du vil ha' fat i alle .dat filerne, som jeg gjorde, som der stod i opgaven, så kan de downloades herfra http://wireless.fcc.gov/uls/data/complete/r_tower.zip. De er frit tilgængelige for alle.
Avatar billede jakobdo Ekspert
17. oktober 2006 - 12:38 #12
Prøv at læg filerne i samme mappe som index.php
Og ret så fopen("../../ra.dat til: fopen("ra.dat","r");
Avatar billede tinem Novice
17. oktober 2006 - 14:00 #13
Du fik åbenbart IKKE læst min tidligere post, hvor jeg fortæller at dette er afprøvet.

Jeg er kommet problemet lidt nærmere, og det ER p.gra. at OFFLINE er det en windows installation og ONNLINE er det så sikkert Unix, fordi der forekommer problemet ikke. Prøv at læse denne side http://wordpress.org/support/topic/27219, hvor det er forklaret, hvorfor det forekommer, men jeg kan altså ikke finde ud af hvordan koderne på siden skal RETTES for at udbedre dette problem - og her har jeg så brug for din eller en andens hjælp.:-)
Man skulle da tro at dette var noget PHP brugere kender til, men der er ikke kommet svar fra andre end dig, og jeg er da glad for at du gider hjælpe.:-)
Avatar billede jakobdo Ekspert
17. oktober 2006 - 14:35 #14
Jeg har forsøgt at læse lidt på siden: http://phplens.com/phpeverywhere/adodb_date_library
Men forstår det ikke helt! :o(
Avatar billede tinem Novice
19. oktober 2006 - 18:26 #15
Jeg har lige opdaget, at selvom der ikke kom nogen fejlmeddelelser når jeg importerede ONLINE, så vises datoerne IKKE når de er lig med January 1, 1970
eller under denne dato, så her er altså også problemer med at vise disse datoer.:-(
http://www.tinemuller.dk/googlemapsbook/chapter5/ParsingCSVData/Date_Constructed_index.php

Jeg ved ikke hvorfor de godt vil importeres ONLINE, men ikke OFFLINE, men det er vel p.gra. forskellige systemer o.lign.
Avatar billede jakobdo Ekspert
19. oktober 2006 - 18:54 #16
Jeg giver fortabt! Beklager. :o(
Avatar billede tinem Novice
30. december 2006 - 10:01 #17
Skriv et svar og så vil jeg give dig point for din ulejlighed.
Avatar billede jakobdo Ekspert
30. december 2006 - 13:48 #18
Svar!
Avatar billede jakobdo Ekspert
30. december 2006 - 14:23 #19
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