Avatar billede nicocarlos Nybegynder
12. november 2005 - 14:15 Der er 54 kommentarer og
1 løsning

Gemme i mysql dele af linje

Hejsa jeg har følgende:

[BbZzz]shockerpimp (#403506) 25 380 m² $479 962

Den skal så gemme alt det id der står mellem (# og ) i en der hedder id og i samme række skal den gemme det tal der står mellem ) og m² i et felt der hedder storrelse og den sidste skal den gemme i vardi.

Bagefter kommer der en ny "spiller"

[BbZzz]shockerpimp2 (#403502) 19 380 m² $412 962

Så der skal laves en while eller noget andet så den går alle igennem håber der er en som kan hjælpe.
Avatar billede jakobdo Ekspert
12. november 2005 - 23:18 #1
Hvad med noget i denne stil:
$fil = "minfil.txt";
$indhold = file($fil);
foreach($indhold as $line)
{
if (preg_match('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s(.+)/', $line, $regs))
{
  $query = mysql_query("INSERT INTO tabel(id,storrelse,vardi) VALUES($match[1],'$match[2]','$match[3]'");
}
}
Avatar billede nicocarlos Nybegynder
13. november 2005 - 15:37 #2
Jeg har prøvet at få det til at virke, men problemet er nok at det ikke er en txt fil det er bare en variabel informationen står i
Avatar billede nicocarlos Nybegynder
13. november 2005 - 15:41 #3
jeg har også prøvet at lave en txt fil, der kommer ikke nogle fejl, men der bliver heller ikke sat noget ind i databasen.
Avatar billede nicocarlos Nybegynder
13. november 2005 - 15:48 #4
Smed lige en error på den mysql query og følgende error kommer.
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''',''' at line 1

Scriptet ser sådan her ud:
<?php
include ("connect.php");
    $fil = "minfil.txt";
    $indhold = file($fil);
    foreach($indhold as $line)
    {
    if (preg_match('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s(.+)/', $line, $regs))
    {
    $query = mysql_query("INSERT INTO house(id,storrelse,vardi) VALUES($match[1],'$match[2]','$match[3]'") or die(mysql_error());
    }
    }
?>
Avatar billede jakobdo Ekspert
13. november 2005 - 16:37 #5
Prøv at ret:
$query = mysql_query("INSERT INTO tabel(id,storrelse,vardi) VALUES($match[1],'$match[2]','$match[3]'");
til:
$query = mysql_query("INSERT INTO tabel('id','storrelse','vardi') VALUES($match[1],'$match[2]','$match[3]'");
Avatar billede nicocarlos Nybegynder
14. november 2005 - 12:13 #6
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''id','storrelse','vardi') VALUES(,'',''' at line 1
Avatar billede nicocarlos Nybegynder
14. november 2005 - 12:21 #7
query = mysql_query("INSERT INTO tabel('id','storrelse','vardi') VALUES($match[1],'$match[2]','$match[3]'") or die(mysql_error());

Ved ikke hvorfor der står ''id' i fejlen, når det ikke står på linjen.
Avatar billede jakobdo Ekspert
14. november 2005 - 12:25 #8
INSERT INTO tabel('id' <--- Det står altså lige der! :o)
Avatar billede nicocarlos Nybegynder
14. november 2005 - 12:34 #9
jamen der står id med '' foran der er kun 1 ' foran på linjen. Ved du hvad fejlen kan være?
Avatar billede nicocarlos Nybegynder
14. november 2005 - 12:48 #10
Når jeg har fundet ud af det og den inserter samme antal rækker som der er i den txt fil. MEN alle er lig med 0 så den tager ikke de rigtige værdier

Det her er den mysql string nu.
$inserting = "INSERT INTO tabel(id, storrelse, vardi) VALUES('$match[1]','$match[2]','$match[3]')";
    mysql_query($inserting) or die(mysql_error());
Avatar billede jakobdo Ekspert
14. november 2005 - 13:02 #11
Virker den?
ellers skal du lave et felt som har id = autoincrement.
Avatar billede nicocarlos Nybegynder
14. november 2005 - 13:08 #12
Jeg har følgende felter nu i mysql.

IDS som er autoincrement.
id som er INT(10)
storrelse som er INT(10)
vardi som er INT(10)

Den laver det forkert i og med den udfylder id=0, storrelse=0, vardi=0 i alle.
Avatar billede jakobdo Ekspert
14. november 2005 - 13:31 #13
Prøv at ret:
('$match[1]','$match[2]','$match[3]')
til:
('".$match[1]."','".$match[2]."','".$match[3]."')

Og er du ellers sikker på match[1] 2 og 3 idneholder noget?
Avatar billede nicocarlos Nybegynder
14. november 2005 - 13:50 #14
det hjalp ikke, jeg er ikke sikker på de indeholder noget da der ikke bliver vist noget, hvis jeg fx laver en print "$match[1]";

Hele mit script ser sådan her ud:
<?php
include ("connect.php");
    $fil = "minfil.txt";
    $indhold = file($fil);
    foreach($indhold as $line)
    {
    if (preg_match('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s(.+)/', $line, $regs))
    {
    $inserting = "INSERT INTO tabel(id, storrelse, vardi) VALUES('".$match[1]."','".$match[2]."','".$match[3]."')";
    mysql_query($inserting) or die(mysql_error());
    print "$match[1]";
    }
    }
?>
Avatar billede nicocarlos Nybegynder
16. november 2005 - 18:26 #15
Nogle der ved hvorfor?
Avatar billede jakobdo Ekspert
16. november 2005 - 18:40 #16
Fuck...
$match skal rettes til: $regs
Så linien:
$inserting = "INSERT INTO tabel(id, storrelse, vardi) VALUES('".$match[1]."','".$match[2]."','".$match[3]."')";
    mysql_query($inserting) or die(mysql_error());

Skal være:
$inserting = "INSERT INTO tabel(id, storrelse, vardi) VALUES('".$regs[1]."','".$regs[2]."','".$regs[3]."')";
    mysql_query($inserting) or die(mysql_error());

Beklager, for meget copy/paste!
Avatar billede nicocarlos Nybegynder
16. november 2005 - 19:30 #17
Okay det hjalp den sætter id rigtigt ind men der er stadig lidt problemer med de 2 andre:
I storrelse:
34 150 m² bliver der kun indsat 34 hvor det skulle være 34150
og i vardi bliver 0 indsat.
Avatar billede jakobdo Ekspert
16. november 2005 - 19:34 #18
Hvilke datatyper har du til: storrelse og vardi?
Avatar billede nicocarlos Nybegynder
16. november 2005 - 19:35 #19
int
Avatar billede jakobdo Ekspert
16. november 2005 - 19:38 #20
Strengen: 34 150 m² er ikke int.
Der skal du overveje varchar og prøv det samme til vardi.
Avatar billede nicocarlos Nybegynder
16. november 2005 - 19:38 #21
den skulle nemlig gerne kunne taget ud igen som et tal
Avatar billede nicocarlos Nybegynder
16. november 2005 - 19:39 #22
jamen jeg vil ikke have m² på  eller $ på vardi, kan man ikke tage dem fra før?
Avatar billede nicocarlos Nybegynder
16. november 2005 - 19:45 #23
Ahh okay den kommer heller ikke på den første streng, så det er okay , men $ kommer på vardi
Avatar billede jakobdo Ekspert
16. november 2005 - 19:47 #24
Prøv lige inden du smider det i db, at lave en test side, som indeholder:

<?php
    $fil = "minfil.txt";
    $indhold = file($fil);
    foreach($indhold as $line)
    {
    if (preg_match('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s(.+)/', $line, $regs))
    {
echo "<pre>";
print_r($regs);
echo "</pre>";
    }
    }
?>
Avatar billede jakobdo Ekspert
16. november 2005 - 19:48 #25
Så kan vi lige finde de korrekte numre i arrayet!
Avatar billede nicocarlos Nybegynder
16. november 2005 - 21:31 #26
Array
(
    [0] => (#394779) 34 150 m² $459 954
    [1] => 394779
    [2] => 34 150
    [3] => $459 954
)
Avatar billede nicocarlos Nybegynder
16. november 2005 - 21:32 #27
Sry skulle lige have noget at spise. det ville være fedt hvis den kunne samle de 34150 og fjerne og samle 459954, men ellers bare så fjerne det forreste tegn
Avatar billede jakobdo Ekspert
16. november 2005 - 21:36 #28
Vil der altid være et $ forrest?
Du kan evt bruge:
str_replace()

$val1 = $reg[1];
$val2 = str_replace(" ", "", $regs[2]);
$val3 = str_replace("$", "", $regs[3]);
Avatar billede nicocarlos Nybegynder
16. november 2005 - 21:37 #29
Jep der vil altid være et $ foran, skal man bruge en str_replace eller kan det laves uden når der er $ forrest?
Avatar billede jakobdo Ekspert
16. november 2005 - 21:41 #30
Det kan laves uden!
Så skal du bruge denne regexp:
'/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s\\$(.+)/'

Altså:
if (preg_match('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s\\$(.+)/', $line, $regs))
Avatar billede nicocarlos Nybegynder
16. november 2005 - 21:45 #31
Det virker . Tusind tak lig svar.
Avatar billede jakobdo Ekspert
16. november 2005 - 21:49 #32
Svar!
Avatar billede jakobdo Ekspert
16. november 2005 - 22:10 #33
Takker for point!
Avatar billede nicocarlos Nybegynder
16. november 2005 - 22:27 #34
takker for hjælpen :D
Avatar billede nicocarlos Nybegynder
16. november 2005 - 23:33 #35
Jacob kan man ikke gemme fra post?

$fil = $_POST['text'];   
    $andre = str_replace("\\r\\n", " ", $fil);
    print "$andre";
    $indhold = $andre;
    foreach($indhold as $line)

det virker nemlig ikke
Avatar billede jakobdo Ekspert
17. november 2005 - 08:19 #36
Hvad poster du?
En fil?
Eller "bare" ren data? (tekst)
Avatar billede nicocarlos Nybegynder
17. november 2005 - 20:38 #37
ren data tekst, du skal nok få nye points. Lige som før poster jeg på samme måde som det stod i txt dokumentet.
Avatar billede jakobdo Ekspert
17. november 2005 - 20:46 #38
Så du mener det er i et:
<textarea> ligesom når man laver en kommentar eller svar her på exp.dk?
Avatar billede nicocarlos Nybegynder
17. november 2005 - 20:51 #39
Yup
Avatar billede jakobdo Ekspert
17. november 2005 - 20:59 #40
Så skal du lave:
<textarea name="minTekst"></textarea>
putte det i en form, og poste det til din php kode.

I php koden laver du:

$fil = $_POST["minTekst"];
$indhold = explode("\n",$fil);

sidste linie skal måske være:
$indhold = explode("\r\n",$fil);
Avatar billede jakobdo Ekspert
17. november 2005 - 20:59 #41
Og så resten af koden fra før.
Avatar billede nicocarlos Nybegynder
17. november 2005 - 21:20 #42
Så går der noget galt har følgende script:

$fil = $_POST["text"];   
    $indhold = explode("\r\n",$fil);
    foreach($indhold as $line)
    {
    if (preg_match('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s\\$(.+)/', $line, $regs))

Og den inserter kun første række og så får den et tegn med fra anden og stopper:
[Bltz]ElGatoNegro (#394779) 34 150 m² $459 954
[

Den anden række er:
[CBH]Code Red (#415007) 21 215 m² $459 953
Avatar billede jakobdo Ekspert
17. november 2005 - 21:36 #43
Prøv at post 1 par linier af det du ønsker smide ind i et textarea og så poste ind i en database!
Avatar billede nicocarlos Nybegynder
17. november 2005 - 21:39 #44
[Bltz]ElGatoNegro (#394779) 34 150 m² $459 954
[CBH]Code Red (#415007) 21 215 m² $459 953

2 linjer der og de bliver sat ind og på vardi bliver der sat 459 954[ første del af linje 2 på.
Avatar billede jakobdo Ekspert
17. november 2005 - 21:50 #45
Noget i denne stil:

<?php
//http://exp.dk/spm/663902

$inserts = "";
if(!empty($_POST['inserts']))
{
    $content = $_POST['inserts'];
    if (preg_match_all('/\\(#(\\d+?)\\)\\s([\\d\\s]+?)\\sm²\\s\\$(.+)/', $content, $regs))
    {
        for($i=0; $i < count($regs[1]); $i++)
        {
            $val1 = $regs[1][$i];
            $val2 = str_replace(" ", "", $regs[2][$i]);
            $val3 = str_replace(" ", "", $regs[3][$i]);
            $inserting = "INSERT INTO tabel(id, storrelse, vardi) VALUES('".$val1."','".$val2."','".$val3."')";
        mysql_query($inserting) or die(mysql_error());
        }
    }
}

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n";
echo "<textarea name=\"inserts\" cols=\"100\" rows=\"10\">".$inserts."</textarea>\n";
echo "<input type=\"submit\" value=\"Insert to DB\">\n";
echo "</form>\n";

?>
Avatar billede nicocarlos Nybegynder
17. november 2005 - 21:55 #46
Så bliver der indsat følgende:

1 394779 34150 459954[C

altså den henter noget nede fra linje 2 og ødelægger det hele, jeg har brugt nøjagtigt det script du har skrevet.
Avatar billede jakobdo Ekspert
17. november 2005 - 22:10 #47
Det forstår jeg ikke!
Når jeg lavede testen, så det rigtigt ud!
Avatar billede jakobdo Ekspert
17. november 2005 - 22:10 #48
Så er det fordi det du sætter ind, ikke ser sådan her ud:
[Bltz]ElGatoNegro (#394779) 34 150 m² $459 954
[CBH]Code Red (#415007) 21 215 m² $459 953
Avatar billede nicocarlos Nybegynder
17. november 2005 - 22:18 #49
jeg kopiere bare det fra txt dokumentet:
http://www.alt-muligt.dk/minfil.txt

Det er sku lidt underligt.
Avatar billede nicocarlos Nybegynder
17. november 2005 - 22:23 #50
Nu bliver den gemt sådan her:
1 394779 34150 459954[CBH]CodeRed(#415007)21215m²$459953Assau
Avatar billede nicocarlos Nybegynder
17. november 2005 - 22:23 #51
utroligt det kan være så svært :/
Avatar billede nicocarlos Nybegynder
17. november 2005 - 22:25 #52
Det står som:
[Bltz]ElGatoNegro (#394779) 34 150 m² $459 954  // her er det ny linje mon det er problemet?
[CBH]Code Red (#415007) 21 215 m² $459 953
Avatar billede jakobdo Ekspert
18. november 2005 - 08:41 #53
Når jeg åbner din fil, så er ² blevet til ?
Avatar billede nicocarlos Nybegynder
18. november 2005 - 18:09 #54
der lyder underligt når jeg åbner den er den det samme ²
Avatar billede nicocarlos Nybegynder
18. november 2005 - 18:23 #55
Det virker med txt dokumentet men ikke med post jeg forstår det ikke :/
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