Avatar billede artico Novice
09. december 2006 - 23:57 Der er 16 kommentarer og
1 løsning

Løkken stopper ikke ?

Sidder og "biker" med en masseopdaterings funktion på min website, men den går amok og fylder flere hundrede tusinde data i DBén, hvad/hvor er der noget forkert her:

$synlig = 1;
$i = 0;
while(isset($_POST['foto_standard_navn_'.$i]))
{
$values="";
$values.="( '".$_POST['id']."',
            '".$_POST['foto_standard_navn_'.$i]."',
            '".$_GET['id']."',
            '".$_POST['foto_kategori'.$i]."',
            '".$_POST['foto_fil_navn_'.$i]."',
            '".$_POST['foto_fil_navn_s_'.$i]."',
            '".$synlig."',
            NOW()
            ),";


// den rigtige '".$value."',
$values=substr($values,0,-1); // to remove last comma
        $query="insert into foto (id,
                  foto_navn,
                  foto_gruppe,
                  foto_kategori,
                  foto_lille,
                  foto_stort,
                  synlig,
                        oprettet
                                  )  values $values";
$result=mysql_query($query) or die(mysql_error());
}
Avatar billede Slater Ekspert
10. december 2006 - 01:01 #1
Det lyder jo meget simpelt, men burde der ikke være en $i++ et eller andet sted?
Avatar billede artico Novice
10. december 2006 - 01:07 #2
Med ++ Så kommer der kun 1 post i DBén ? .. men hvor skal den være?
Avatar billede yHec Novice
10. december 2006 - 01:21 #3
en while kører jo indtil betingelsen ikke længere er opfyldt.

isset(isset($_POST['foto_standard_navn_'.$i])) kører jo uendeligt, idet du ikke opdaterer $i. Prøv med en for-løkke istedet.

Hvordan kan jeg ikke helt gennemskue - det er meget sent ligenu ;-)

/y
Avatar billede yHec Novice
10. december 2006 - 01:23 #4
måske noget med

for ($i=0, $i<$ettal, i++) {
while(isset($_POST['foto_standard_navn_'.$i])) {
/* din kode */
}
}

/y
Avatar billede yHec Novice
10. december 2006 - 01:24 #5
ikke
while (isset(etc....))
men
if(isset.....)

Undskyld

/y
Avatar billede Slater Ekspert
10. december 2006 - 02:56 #6
Så vidt jeg kan se er koden da fin nok - der skal bare stå $i++ lige før den sidste }
Avatar billede tdafoobar Nybegynder
10. december 2006 - 10:10 #7
*cough*

Prøv at outputte din final SQL string, det hjælper til at debugger. Derudover er det jo direkte stupidt at bruge POST data direkte i SQL, da det giver 1) syntax-fejl hvis du bruger specialtegn 2) mulighed for SQL injection.
Avatar billede artico Novice
10. december 2006 - 12:07 #8
tdafoobar » Ok, jeg lytter!
Har du et forslag til ikke at bruge POST data!

Jeg har brugt y´s forslag og det virker, men jeg vil da gerne gøre det bedre!
Avatar billede tdafoobar Nybegynder
10. december 2006 - 12:10 #9
Avatar billede intenz Novice
10. december 2006 - 12:11 #10
Forslaget er vel bare at du gemmer dem først, så har du også mulighed for at fjerne tegn brugerne ikke må skrive (' for eksempel)

$variabel = $_POST[variabel];
Avatar billede intenz Novice
10. december 2006 - 12:12 #11
Scriptet vil da også, alt andet lige, blive langsommmere (spørgsmålet er om det betyder så meget hvis det bare er et lille site.)
Men at hente data ud af _POST hver gang må da være mere krævende end bare at skulle gøre det en gang
Avatar billede tdafoobar Nybegynder
10. december 2006 - 12:14 #12
$variabel = $_POST[variabel];

EVIL WRONG !!!

$variabel = $_POST['variabel'];

quotes omkring string keys tak :-)
Avatar billede intenz Novice
10. december 2006 - 12:22 #13
Lagde godt mærke til det ;)
En gammel vane
Avatar billede artico Novice
10. december 2006 - 12:50 #14
Jeg er lidt forvirret ang. escape, hmm, skal der laves en funktion eller gør man det hevrgang ? og har i et forslag til at escape mit stykke kode?
Avatar billede intenz Novice
10. december 2006 - 14:34 #15
Avatar billede artico Novice
26. december 2006 - 16:18 #16
Ok, lukker.. send et svar..
Avatar billede artico Novice
13. juli 2007 - 10:30 #17
lukker
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