Avatar billede lsskaarup Nybegynder
18. februar 2010 - 16:38 Der er 8 kommentarer og
1 løsning

mysql_fetch_array fejler

Jeg kan nok ikke se skoven for bare træer, men hvorfor fejler nedenstående kode.

$opr = "SELECT stamdataID, ansvarlig, forv_start, forv_slut, procent FROM projektmedlemmer WHERE tilbudID='".$_GET['copyid']."'";
    $oprres = mysql_query($opr) or die(mysql_error());
    while ($opr_out = mysql_fetch_array($oprres)) {
      $plsql = "INSERT INTO projektmedlemmer (stamdataID, tilbudID, ansvarlig, forv_start, forv_slut, procent) ".
                "VALUES ('".$opr_out['stamdataID']."', '".$tilbudsid."', '".$opr_out['ansvarlig']."', '".$opr_out['forv_start']."', '".$opr_out['forv_slut']."', '".$opr_out['procent']."')";
    mysql_query($plsql) or die(mysql_error());
        mysql_free_result($oprres);
    }

Formålet er at jeg skal kopiere x antal rækker og insætte dem i samme tabel igen. Eneste forskel er et tilbudsnummer jeg får andet steds fra.

Men når jeg kører kode, får jeg følgende fejl

Warning: mysql_fetch_array(): 7 is not a valid MySQL result resource in d:\www\test\entreprise_tilbud_copy_process.php on line 111

Burde jeg ikke kunne loope igennem mit SELECT output, for enkelt vis at indsætte dem?
Avatar billede virtual1ty Nybegynder
18. februar 2010 - 16:57 #1
Jeg ved ikke om det er derfor, men prøv at fjerne din single quotes i nedenstående:

$_GET['copyid']

Så det bliver til:

$_GET[copyid]
Avatar billede michael_stim Ekspert
18. februar 2010 - 17:14 #2
Der skal absolut IKKE fjernes nogle quotes. Det er dårlig, grim og forkert kodning.
Avatar billede michael_stim Ekspert
18. februar 2010 - 17:18 #3
I stedet for at eksekvere din SQL (mysql_query($plsql) or die(mysql_error());), så prøv at udskriv den, for at se om din data kommer ud som den skal.
Avatar billede michael_stim Ekspert
18. februar 2010 - 17:21 #4
Men er det ikke en idé at køre en UPDATE på sådan en?
Avatar billede dmdisco Nybegynder
18. februar 2010 - 17:33 #5
problemet er som michael siger at du sikkert ikke får sat den get variabel
tjek om det er problemet først

og nu vi er bed det vil jeg nok forslå dig at bruge bare en lille smule forsvar imod sql injection angreb såsom
intval($_GET['copyid']) da det sikkert er et tal (fordelen ved denne er at den altid vil returnere et tal da den returnere 0 ved fejl altså eks. når variablen slet ikke er sat) og/eller mysql_real_escape_string($_GET['copyid'])

så det bliver noget ala

$opr = "SELECT stamdataID, ansvarlig, forv_start, forv_slut, procent FROM projektmedlemmer WHERE tilbudID='".mysql_real_escape_string(intval($_GET['copyid']))."'";

men som michael siger kan det nok klares bedre med en UPDATE eller en INSERT INTO ON DUPLICATE UPDATE
Avatar billede showsource Seniormester
18. februar 2010 - 17:51 #6
Jahh, måske en anden tabel opbygning ?

Anyway, inde i din while, slutter du af med:
mysql_free_result($oprres);

Prøv at lægge den uden for din while
Avatar billede lsskaarup Nybegynder
19. februar 2010 - 09:11 #7
Lige for at give en mere uddybende forklaring til problemstillingen.

Det er et internt salgs-/ ordre system, hvor man kan oprette en overordnet sag, der får et løbenr. En sag kan så havde uendeligt antal tilbud tilknyttet, disse får hvad deres eget tilbudsnummer. Et tilbud kan så igen havde et uendeligt antal projektmedlemmer tilknytet.

Løbenr og tilbudsnummer ligger i samme tabel, og der er en tabel til projektmedlemmer.

Der skal så være mulighed for at lave en kopi af et bestemt tilbud. Derfor kan jeg heller ikke lave en UPDATE, da det jo ikke drejer sig om samme tilbudsid, men et nyt. På overfladen ser de bare helt ens ud. Grunden til denne løsning, er at projektlederne så slipper for at indtaste de samme oplysninger flere gange.

Tabeldesignet kunne nok være bedre, men kan af forskellige forretningskritiske årsager ikke ændres. Dette indebærer bl.a. at det allerede er i drift andet steds i virksomheden, samt ikke mindst at vores BI heller ikke kan fuckes op.

Hvis jeg laver en echo af mine queries, får jeg SELECT fint ud, samt den første INSERT. Begge indeholder de korrekt værdier.

Men uanset om der findes flere projektmedlemmer eller ej, så ser jeg fejlen efter den første INSERT.

Men jeg vil lige prøve Jeres forskellige forslag, og se om der ikker noget som virker.
Avatar billede lsskaarup Nybegynder
19. februar 2010 - 11:33 #8
Showsource -> Lig et svar, det hjalp at lægge det uden for while. Det er jo et eller andet sted også logisk nok, at jeg ikke skal tømme udtrækket før jeg er helt færdig med det.
Avatar billede showsource Seniormester
19. februar 2010 - 21:06 #9
Svar
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