Avatar billede Calle5463 Forsker
23. marts 2012 - 09:08 Der er 20 kommentarer og
1 løsning

Appende data til et array

Jeg læser to tabeller (nr er unikt i begge tabeller - indtil videre):


$id=$POST['id'];
$info=array[];

select * from kunde where nr=$id
while($row=mysql_fetch_assoc($result))
{ $info[]=array("Navn"=>$row['kNavn'],
                "Adresse1"=>$row['kAdresse1'])}


Nu skal jeg have appendet sagsdata til kunden, hvis der er en sag:


select * from sag where nr=$id
while($row=mysql_fetch_assoc($result))
{ ??? $info[]=array("Adresse1"=>$row['sAdresse1']) ??? }


- har forsøgt med noget "push" og "merge" men fik det ikke til at virke.
Avatar billede michael_stim Ekspert
23. marts 2012 - 10:35 #1
Kan du ikke bare hente alting på en gang?

SELECT k.kNavn, k.kAdresse1, s.sAdresse1 FROM kunde k, sag s WHERE k.nr = ". $id ." AND k.nr=s.nr

Eller har jeg misforstået?
Avatar billede inteeeL Nybegynder
23. marts 2012 - 10:42 #2
Du kan også (i fremtiden) løse dette ved at indeksere dine array-elementer ved dets enkelte unikke nummer. På den måde kan du hente det enkelte element, da du kender key'en. Det kunne se sådan her ud:

<?php

$id=$POST['id'];
$info=array[];

$result = mysql_query("select * from kunde where nr=$id");
while($row=mysql_fetch_assoc($result)) {
    $info[$row['nr']]= array( "Navn"=>$row['kNavn'], "Adresse1"=>$row['kAdresse1'])   
}

//Appending af sagsdata til kunden, hvis der er en sag

$result = mysql_query("select * from sag where nr=$id");
while($row=mysql_fetch_assoc($result)) {
    $info[$row['nr']]['Adresse1'] = $row['sAdresse1'];
}

?>


Men ja, du kan hente det hele på en gang - enten med michael_stims forslag eller med JOIN.
Avatar billede Calle5463 Forsker
23. marts 2012 - 10:44 #3
- virker kun hvis der ER en record i "sag" eller ? ;-)
Avatar billede inteeeL Nybegynder
23. marts 2012 - 11:07 #4
Jamen hvis der ikke er en record i en sag, skal der vel ikke appenderes en ny adresse til arrayet? Eller hvad? :-)
Avatar billede Calle5463 Forsker
23. marts 2012 - 11:16 #5
#4: Jo - felterne er bare blanke, men at de er blanke ændre (vel) ikke på hvordan de appendes til en kunde i arrayet? Det er ikke det at finde de to records i tabellerne eller finde ud af at der kun er data i kunde-tabellen der er min udfordring.
Avatar billede inteeeL Nybegynder
23. marts 2012 - 11:26 #6
Jeg skal vist lige forstå det rigtigt. Du henter først informationerne om den enkelte kunde fra tabellen kunde - her dannes det første element i arrayet $info.

Derefter henter du data fra en sag, der omhandler kunden. Her har du åbenbart en anden adresse, som du gerne vil have sat i arrayet; her skal Adresse1 ændres til $row['sAdresse1'].

Er ovenstående forstået rigtigt? Og hvad er det så du spørg om efterfølgende?
Avatar billede Calle5463 Forsker
23. marts 2012 - 11:39 #7
#6 Ikke helt - jeg skulle måske have brugt et par andre feltnavne som eksempel

Der er to tilfælde:
- en kunde i "kunde", ingen tilhørende sag i "sag"
- en kunde i "kunde", en tilhørende sag i "sag"

kunde: nr, navn, adresse
sag: nr (samme som kunde-nr), opgave

Ønskede data i arrayet: nr, navn, adresse, opgave

- håber det hjalp
Avatar billede inteeeL Nybegynder
23. marts 2012 - 12:33 #8
Når på den måde, så er jeg med (tror jeg). :-)
Prøv følgende:

<?php

$id = $POST['id'];
$info = array();

$result = mysql_query("select * from kunde where nr=$id");
while($row = mysql_fetch_assoc($result)) {
    $info[$row['nr']]= array( 'Navn' => $row['kNavn'], 'Adresse1' => $row['kAdresse1']);   
}

//Appending af sagsdata til kunden, hvis der er en sag

$result = mysql_query("select * from sag where nr=$id");
if( mysql_num_rows( $result) > 0) {
    while($row=mysql_fetch_assoc($result)) {
        $info[$row['nr']]['opgave'] = $row['opgave'];
    }
}

?>
Avatar billede olebole Juniormester
23. marts 2012 - 13:14 #9
<ole>

@Calle5463: Vær opmærksom på, at din løsning står åben for 'ubehagelige typer'. Du risikerer at miste dine data, eller at dine kundeinformationer falder i uønskede hænder. Kik på denne guide prepared statements, som beskriver en langt sikrere tilgang  =)

/mvh
</bole>
Avatar billede Calle5463 Forsker
23. marts 2012 - 14:09 #10
#9, olebole: Jeg har det på to-do listen - tak :-)
Avatar billede inteeeL Nybegynder
23. marts 2012 - 14:12 #11
Var svaret i #8 løsningen?
Avatar billede Calle5463 Forsker
23. marts 2012 - 15:00 #12
#11

- hyn ka' ikk' rigtig li' kommaet. Har jeg styr på alle paranteser m.m.?

<?PHP
include "db_conn.php";
$id = 99999999;    // for test
$info=array();

$sql_navn = "SELECT * FROM Kunde WHERE kNr='$id'";
$result = mysql_query($sql_navn);
while($row=mysql_fetch_assoc($result))
{ $info[$row['$id']]=array('kNavn'=>$row['kNavn'],
                          'kAdresse1'=>$row['kAdresse1'],
                          'kAdresse2'=>$row['kAdresse2'],
                          'kPostnr'=>$row['kPostnr'],
                          'kBy'=>$row['kBy'],
                          'kFirma'=>$row['kFirma'],
                          'kCVR'=>$row['kCVR'],
                          'kTlf'=>$row['kTlf'],
                          'kEmail'=>$row['kEmail'],
                          'kWeb'=>$row['kWeb'],
                          'kKommentar'=>$row['kKommentar']);
}

$sql_navn = "SELECT * FROM Sag WHERE sNr='$id'";
$result = mysql_query($sql_navn);
if(mysql_num_rows($result) > 0)
{ while($row=mysql_fetch_assoc($result))
  { $info[$row['$id']]['eAdresse1'] = $row['sAdresse1'], // kan ikke lide kommaet
                      ['ePostnr'] = $row['sPostnr'],
                      ['eBy'] = $row['sBy'],
                      ['dNavn'] = $row['sFaktNavn'],
                      ['dAdresse1'] = $row['sFaktAdresse1'],
                      ['dPostnr'] = $row['sFaktPostnr'],
                      ['dBy'] = $row['sFaktBy'],
                      ['dFirma'] = $row['sFaktFirma'],
                      ['dCVR'] =  $row['sFaktCVR'],
                      ['dTlf'] =  $row['sFaktTlf'],
                      ['dEmail'] = $row['sFaktEmail'],
                      ['dWeb'] = $row['sFaktWeb'],
                      ['dKommentar'] = $row['sFaktKommentar'];
  }
}
echo $info;

?>
Avatar billede olebole Juniormester
23. marts 2012 - 15:19 #13
                      ['dKommentar'] = $row['sFaktKommentar']; // <-- det semikolon ...
  }

- skal flyttes ...

                      ['dKommentar'] = $row['sFaktKommentar']
  }; // <-- dertil

Men du må da få en eller flere fejl. Hvorfor ser vi ikke dem?
Avatar billede olebole Juniormester
23. marts 2012 - 15:26 #14
Sorry, my bad. Det er ikke let at finde rundt i din kode. Prøv dette:

<?php
include "db_conn.php";
$id = 99999999;    // for test
$info=array();

$sql_navn = "SELECT * FROM Kunde WHERE kNr='$id'";
$result = mysql_query($sql_navn);
while($row=mysql_fetch_assoc($result)) {
    $info[$row['$id']]=array(
        'kNavn'=>$row['kNavn'],
        'kAdresse1'=>$row['kAdresse1'],
        'kAdresse2'=>$row['kAdresse2'],
        'kPostnr'=>$row['kPostnr'],
        'kBy'=>$row['kBy'],
        'kFirma'=>$row['kFirma'],
        'kCVR'=>$row['kCVR'],
        'kTlf'=>$row['kTlf'],
        'kEmail'=>$row['kEmail'],
        'kWeb'=>$row['kWeb'],
        'kKommentar'=>$row['kKommentar']
    );
}

$sql_navn = "SELECT * FROM Sag WHERE sNr='$id'";
$result = mysql_query($sql_navn);
if(mysql_num_rows($result) > 0) {
    while($row=mysql_fetch_assoc($result)) {
        $info[$row['$id']]['eAdresse1'] = $row['sAdresse1'];
        $info[$row['$id']]['ePostnr'] = $row['sPostnr'];
        $info[$row['$id']]['eBy'] = $row['sBy'];
        $info[$row['$id']]['dNavn'] = $row['sFaktNavn'];
        $info[$row['$id']]['dAdresse1'] = $row['sFaktAdresse1'];
        $info[$row['$id']]['dPostnr'] = $row['sFaktPostnr'];
        $info[$row['$id']]['dBy'] = $row['sFaktBy'];
        $info[$row['$id']]['dFirma'] = $row['sFaktFirma'];
        $info[$row['$id']]['dCVR'] =  $row['sFaktCVR'];
        $info[$row['$id']]['dTlf'] =  $row['sFaktTlf'];
        $info[$row['$id']]['dEmail'] = $row['sFaktEmail'];
        $info[$row['$id']]['dWeb'] = $row['sFaktWeb'];
        $info[$row['$id']]['dKommentar'] = $row['sFaktKommentar'];
    }
}
echo $info;
?>

Men generelt ser det ikke ud til at være en særlig effektiv løsning
Avatar billede Calle5463 Forsker
23. marts 2012 - 15:29 #15
(hvordan laver i de der smarte rammer)

#13

Parse error: syntax error, unexpected ',' in /customers/6/3/5/.../httpd.www/.../request_kundedata.php on line 28


//linie 23
$sql_navn = "SELECT * FROM Sag WHERE sNr='$id'";
$result = mysql_query($sql_navn);
if(mysql_num_rows($result) > 0)
{ while($row=mysql_fetch_assoc($result))
  { $info[$row['$id']]['eAdresse1'] = $row['sAdresse1'],    //linie 28
                      ['ePostnr'] = $row['sPostnr'],
                      ['eBy'] = $row['sBy'],
                      ['dNavn'] = $row['sFaktNavn'],
                      ['dAdresse1'] = $row['sFaktAdresse1'],
                      ['dPostnr'] = $row['sFaktPostnr'],
                      ['dBy'] = $row['sFaktBy'],
                      ['dFirma'] = $row['sFaktFirma'],
                      ['dCVR'] =  $row['sFaktCVR'],
                      ['dTlf'] =  $row['sFaktTlf'],
                      ['dEmail'] = $row['sFaktEmail'],
                      ['dWeb'] = $row['sFaktWeb'],
                      ['dKommentar'] = $row['sFaktKommentar']
  };
}
Avatar billede olebole Juniormester
23. marts 2012 - 15:28 #16
- og så skal du nok skifte echo $info; ud med var_dump($info);
Avatar billede olebole Juniormester
23. marts 2012 - 15:40 #17
Prøv koden i #14. Boksene laver jeg med denne editor.
Avatar billede Calle5463 Forsker
23. marts 2012 - 15:41 #18
Og resultat er:
{"":{"kNavn":"Test Kunde","kAdresse1":"Testvej 980001","kAdresse2":"","kPostnr":"9801","kBy":"Testby","kFirma":"Firmatest ApS","kCVR":"99999999","kTlf":"99999999","kEmail":"998001@99980001.dk","kWeb":"998001.dk","kKommentar":"Dette er en test","eAdresse1":"Tossevej 17","ePostnr":"1212","eBy":"Rumleby","dNavn":"Regnar Bogholder","dAdresse1":"Bogholderivej 2","dPostnr":"4711","dBy":"Regndrup","dFirma":"Nolleriet a\/s","dCVR":"98765432","dTlf":"54545454","dEmail":"tal@rige.dk",
"dWeb":"ingen.dk","dKommentar":"Bare den sker noget!"}}


#15: Brugte denne men var_dump'en virkede også: echo json_encode($info);

inteeel: smid et svar, du får pointene - olebole har vist rigeligt i forvejen :-)
Avatar billede olebole Juniormester
23. marts 2012 - 15:55 #19
#18: Ja, jeg har masser - og derfor har jeg ikke samlet point gennem det seneste årstid  =)
Avatar billede Calle5463 Forsker
23. marts 2012 - 16:34 #20
#14 olebole: jeg synes heller ikke det ser særlig smart ud = det fylder mere end tre linier. Men jeg har ingen ideer til at effektivisere det - jeg er bedst til copy-paste. Lige nu skal jeg bare have det til at virke i det næste led af mit prgram.
Avatar billede inteeeL Nybegynder
23. marts 2012 - 21:27 #21
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