[php] EVAL() Prob*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer een csv in te lezen in een array

maar het gaat mis bij dit stukje code

code:
1
2
3
//$buildEval = "$" . $csvarray[$teller] . "[" . ($row - 1) . "] = \"" . $data $teller] . "\";";
//eval($buildEval);
eval("$" . $csvarray[$teller] . "[" . ($row - 1) . "] = \"". $data[$teller] . "\";");



Dit is de voledige source

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
    ini_set("memory_limit", "32M");
    $csvbestand = "import.csv";
    $row=0;
    $csvfile = fopen($csvbestand,"r");
    while($data=fgetcsv($csvfile,1000,";"))
    {
        if($row==0)
        {
            $numberofrows = count($data);
            $csvarray = array();
            for($teller=0;$teller<$numberofrows;$teller++)
            {
                $csvarray[$teller] = $data[$teller];
                eval("$" . $data[$teller] . " = array();");
            }
            $row = 1;
        }
        else
        {

            $numberofrows = count ($data);
            $row++;
            for($teller=0;$teller<$numberofrows;$teller++)
            {
                //$buildEval = "$" . $csvarray[$teller] . "[" . ($row - 1) . "] = \"" . $data[$teller] . "\";";
                //eval($buildEval);
                eval("$" . $csvarray[$teller] . "[" . ($row - 1) . "] = \"". $data[$teller] . "\";");
                
            }
        }
    }

fclose ($csvfile);
?>


de foutmelding die PHP genereerd is

Parse error: parse error in /dkg-olt/csv-import/index.php(28) : eval()'d code on line 1

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

volgens mij hoeft/mag er bij een ge-evalueerde expressie geen puntkomma achter de expressie te staan. Probeer anders je expressie eens te echo-en om te kijken of 'ie wel goed is.
meestal probeer ik eval echter zo veel mogelijk te vermijden...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

[php] in de titel gefrutseld

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
"Het gebruik van eval is nooit nodig en is een slechte programmeergewoonte omdat je veiligheidsrisico's vergroot en je het overzicht over de code kwijt raakt."
Een quote'je uit een schoolboekje, doe er mee wat je wilt.

Wat wil je precies bereiken want dat heb je nog niet verteld. Je bent wat met array, en nieuwe array's aan het rommelen maar het echte doel ontgaat me een beetje.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik wil een csv doormiddel van het array in een mysql database importeren

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Verwijderd schreef op 24 July 2003 @ 23:37:
ik wil een csv doormiddel van het array in een mysql database importeren
Formuleer eens wat uitgebreider wat je precies wilt? Dan kun je waarschijnlijk daar al zo een werkwijze uit afleiden.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
het CSV bestand wordt uitgelezen, de eerste row bevat de kolom namen
de 2e row alle data
door dit in een array te zetten en doormiddel van een teller wil ik alle data uit een csv betand laten inserten in mysql.

de teller zorgt er voor dat 1 voor 1 alle data wordt geimporteerd in mysql

ik wil dus een CSV bestand automatisch importeren inplaats van alle wijzigingen steeds met de hand te moeten doorvoeren

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 24 July 2003 @ 23:53:
het CSV bestand wordt uitgelezen, de eerste row bevat de kolom namen
de 2e row alle data
door dit in een array te zetten en doormiddel van een teller wil ik alle data uit een csv betand laten inserten in mysql.

de teller zorgt er voor dat 1 voor 1 alle data wordt geimporteerd in mysql

ik wil dus een CSV bestand automatisch importeren inplaats van alle wijzigingen steeds met de hand te moeten doorvoeren
waarom zet je het niet in een array dan:

code:
1
myArray[$rownaam] = $data;


met een foreach kan je dan later weer door je array heenlopen om je sql te bouwen

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Verwijderd schreef op 24 July 2003 @ 23:53:
het CSV bestand wordt uitgelezen, de eerste row bevat de kolom namen
de 2e row alle data
door dit in een array te zetten en doormiddel van een teller wil ik alle data uit een csv betand laten inserten in mysql.

de teller zorgt er voor dat 1 voor 1 alle data wordt geimporteerd in mysql

ik wil dus een CSV bestand automatisch importeren inplaats van alle wijzigingen steeds met de hand te moeten doorvoeren
Kijk, dat lijkt er al wat meer op. Het grootste deel van je code reflecteert deze intentie niet; waarom is die code er dan?

Ik zou zeggen, gooi de hele inhoud van je while-lus om te beginnen eens weg, en plaats het inlezen van de kolomnamen (wat dus op "row 0" staat) boven de while-lus. Je wilt dat één keer doen en binnen de while-lus heb je er niets mee temaken.

Wat wil je per regel precies doen? Je zegt iets met SQL, maar ik zie nog geen SQL code in je programma. Wil je eerst een array maken die de ingelezen waarden aan een key koppelt die overeenkomt met de kolomnamen zoals je ze eerst uitgelezen hebt? Zoek je dus een functie zoals array_combine?

Ik denk trouwens dat je dat hele tellen van regels wel weg kunt laten, tenzij je het regelnummer echt ergens voor nodig voor hebt.

[ Voor 6% gewijzigd door Soultaker op 25-07-2003 00:01 ]


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
PHP:
1
2
3
4
5
6
<?php

$newrow = $row - 1;
${$csvarray[$teller]}[$newrow] = $data[$teller];

?>


Maak dat er eens van...

[ Voor 9% gewijzigd door zeroxcool op 25-07-2003 00:10 ]

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
ZeRoXcOoL schreef op 25 July 2003 @ 00:10:
PHP:
1
2
3
4
<?php
$newrow = $row - 1;
${$csvarray[$teller]}[$newrow] = $data[$teller];
?>

Maak dat er eens van...
Dat elimineert de eval-call al en dat is al een grote verbetering, maar dan gebruik je toch nog steeds variabele variabelen en die zijn bijna net zo "vies" als gebruik van eval (dynamische code).

Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
Klopt. Variabele variabele namen zijn heel makkelijk op te lossen door middel van arrays, dan bespaar je je meteen de moeite ervan. Maar goed, dat is natuurlijk DKG, niet voor ons ;)...

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
ZeRoXcOoL schreef op 25 July 2003 @ 01:07:
Klopt. Variabele variabele namen zijn heel makkelijk op te lossen door middel van arrays, dan bespaar je je meteen de moeite ervan. Maar goed, dat is natuurlijk DKG, niet voor ons ;)...
Helemaal mee eens. :Y)

Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
kijk eens naar LOAD DATA

Pas de replâtrage, la structure est pourrie.

Pagina: 1