Avatar billede n_j_b Nybegynder
08. december 2009 - 19:46 Der er 10 kommentarer og
1 løsning

PHP - foreach-spørgsmål..

Jeg er ny indenfor foreach funktionen i PHP. Kan nogen svare mig på hvordan man skriver koden i foreach-delen. Jeg kan ikke få det til at fungere.

//Her har jeg lige loopet fra mysql
$titel=$rows['titel'];
$navn=$rows['navn'];

foreach($titel as $row=>$titel)
{
$titel=$titel;
$navn=[$navn][$row];
}

$involv = "INSERT INTO table(titel, navn)
VALUES('$titel', '$navn')";

mysql_query($involv);
08. december 2009 - 21:33 #1
Maaske skulle du proeve at forklare hvad du vil opnaa og give lidt flere oplysninger om hvad du har.

Det ser ud til at du har en tabel hvor du ved hjaelp af en mysql query henter nogle vaerdier af title og navn og de vaerdier vil du indsaette i en anden tabel.  Er det korrekt forstaaet?

Saa giv os lige den kode hvor du formulerer queryen til den foerste tabel og henter vaerdierne ind, saa er vi nok lidt taettere paa at kunne svare paa dit spoergsmaal.
Avatar billede n_j_b Nybegynder
08. december 2009 - 22:38 #2
Du har forstået det rigtigt. Her er lidt mere forklaring!

Jeg har en tabel med værdier, der skal flyttes over i en anden tabel. Jeg har flere rækker der skal flyttes samtidigt - derfor bruger jeg <i>foreach</i>.

$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result));
{
$titel=$rows['titel'];
$navn=$rows['navn'];
}
// Invalid argument supplied for foreach() får jeg at vide her.
foreach($titel as $row=>$titel)
{
$titel = $titel;
$navn = $navn [$row];
}

$insert = "INSERT INTO $tbl_name(titel, navn)
VALUES('$titel', '$navn')";

mysql_query($insert);

Jeg håber det er nok info og tak for hjælpen..
09. december 2009 - 07:12 #3
Ved du hvad, jeg kommer til at se (det skulle jeg naturligvis have set efter med det samme) at du har en raekke spoergsmaal du ikke har afsluttet.  Folk har givet dig svar og tilsyneladende brugbare kommentarer, men du har hverken givet points eller forklaret hvad der var galt med svarene.  Jeg har ikke lyst til nu at investere tid og energi paa at finde en loesning paa ovenstaaende med faren for at jeg ogsaa bliver haengende.  Luk foerst de andre spoergsmaal, saa skal jeg proeve at svare paa dette her.
Avatar billede n_j_b Nybegynder
09. december 2009 - 09:27 #4
Jeg beklager. Jeg er ikke så vandt til siden.
Jeg har nu tildelt svarene til mine andre indlæg point. Jeg lover, at jeg nok skal holde øje med det i fremtiden... SORRY!
09. december 2009 - 14:56 #5
Jeg er i gang med at kikke paa det.  Der er to ting hvor jeg ikke kan faa logikken til at gaa op.  Kunne du fortaelle mig mere?

(1)  Du har et select query og et insert query.  For begge queries staar tabellen's navn i variabelen $tbl_name.  Er det bare "pseudokode" for illustration eller vil du indsaette oplysningerne i samme tabel som den hvorfra du trak dem ud?

(2)  Din query SELECT * FROM $tbl_name WHERE id='$id' synes at ville levere et enkelt resultat, det vil sige hvis id er primary key i tabellen, men din efterfoelgende kode, og dine forklaringer, tyder paa at du forventer adskillige resultater som du saa via en foreach loekke vil indsaette i en tabel.  Hvor kommer vaerdien i $id fra?  er id ikke primary key i tabellen saaledes at der er eller kan vaere adskillige records med samme id?

Men......  Du har en raekke aabne spoergsmaal der alle, undtagen de tre sidste, er adskillige maaneder gamle, med 1240 udestaaende punkter.  Jeg forstod paa dit tidligere indlaeg at du var i gang med at lukke dem.  Jeg sad og ventede at det skulle ske, derfor min sene reaktion.  Maaske kan vi nu arbejde parallelt, du lukker spoergsmaal og jeg arbejder videre med spoergsmaalet (naar jeg har faaet din reaktion til ovenstaaende.)

"Just in case.." hvis du er i tvivl om at lukke spoergsmaal saa staar det beskrevet i FAQ hvorfra jeg citerer det foelgende:

"Hvordan lukker man sit spørgsmål?

Et spørgsmål er lukket når der er lagt et svar, som er blevet accepteret af vedkommende som oprettede spørgsmålet. Hvis du har et spørgsmål hvor ingen af svarene kunne bruges, kan du selv lægge et svar og acceptere dette.

Husk at hvis du selv fandt en løsning, så skriv den endelig som svar da andre kan have glæde af den i fremtiden! Samtidig viser du de brugere, som har brugt tid på dit spørgsmål, at du selv fandt en mere velegnet løsning."
Avatar billede n_j_b Nybegynder
10. december 2009 - 11:15 #6
Jeg har løbende lukket mine uafsluttede indlæg...

I forhold til min SELECT og INSERT query, så er variablen $tbl_name kun ens i kodeudsnittet herinde. Det er faktisk to forskellige tabeller. Og $id er i virkeligheden et genereret ordreID der viser hvilke rækker deer hænger sammen.

Jeg havde forenklet kodeudsnittet for, at gøre det mere overskueligt - troede jeg...

Jeg har brugt samme foreach-metode til at få værdier sat ind i den tabel jeg ovenfor henter værdier fra. Men dem satte jeg ind fra en submit-form. Ovenstående skal ske automatisk.

Ideen er, at jeg havde nogen værdier som blev sat ind i en midlertidig-tabel (den jeg SELECT'er fra). Når de værdier er blevet bekræftet, så bliver de kopieret til en permanent-tabel (den jeg INSERT'er i). her er problemet så, at værdierne skal kopieres fra flere rækker på samme tid.
10. december 2009 - 20:39 #7
Det er en skam at du ikke gav mig det raa kodeafsnit.  Nu maa jeg gaette lidt.  Jeg haaber jeg har gaettet rigtigt hvad det er du vil.

Altsaa, du har en midliertidig database tabel med vaerdier for id, titel, og navn, og der kan vaere adskillige ens id vaerdier.  Jeg lavede for test en tabel jeg kaldte njb1 med de foelgende vaerdier:

id  titel  navn
 
a titel1 navn1
a titel2 navn2
a titel3 navn3
a titel4 navn4
a titel5 navn5
b titel6 navn6
b titel7 navn7
b titel8 navn8
b titel9 navn9
b titel10 navn10

Saa vil du soege for titel og navn vaerdier for en bestemt id og de vaerdier vil du foerst alle sammen traekke ud af tabellen og derefter alle sammen saette ind i en anden tabel (som jeg har kaldt njb2.)

I mit system virker den foelgende kode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title></title>
</head>

<body>
<?
$id = 'b';
$titel;
$navn;
$i = 0;
$link = mysql_connect ('christianjorgensen.be.mysql', 'christianjoygen', 'dnyBKKbe') or die(mysql_erorr());
mysql_select_db('christianjoygen') or die('Could not select database');
$sql = "SELECT * FROM njb1 WHERE id = '$id'";
$result = mysql_query($sql) or die(mysql_error());
while($rows = mysql_fetch_array($result))
{
  $titel[] = $rows['titel'];
  $navn[] = $rows['navn'];
  $i++;
}
for($j = 0; $j < count($titel); $j++)
{
  $insert = "INSERT INTO njb2(titel, navn) VALUES('$titel[$j]', '$navn[$j]')";
  mysql_query($insert) or die(mysql_error());
}
mysql_close($link); 
?> 
</body>
</html>

Naar jeg koerer den kode kommer de foelgende vaerdier i tabel njb2:

titel  navn

titel6 navn6
titel7 navn7
titel8 navn8
titel9 navn9
titel10 navn10

Blandt grundene til at din kode ikke virker har jeg fundet de foelgende:

(1)  Din foerste while saetning goer du til et statement adskilt fra hvad der staar mellem { og } fordi du ender saetningen med ";"

(2)  For at bevare de adskillige vaerdier du udtraekker af databasen skal $titel og $navn vaere arrays.  Det skulle have vaeret %titel[]=$rows['titel'] og saa videre.

(3)  Jeg kan ikke se nogen maade at bruge en foreach konstruktion naar du skal bruge vaerdier der sidder i to forskellige arrays.  Det er heller ikke noedvendig, en almindelig for loekke er tilstraekkelig.

(4)  Fordi du opretter $titel og $navn som lokale variable i den foerste while loekke saa er de ikke tilgaengelig i senere loekker.

(Hvis du bruger min kode skal du naturligvis skifte mine database-detaljer med dine egne.)

Jeg gaar ud fra at det svarer paa dit spoergsmaal.  Hvis jeg har misforstaaet dig saa forklar videre (men giv mig saa den aktuelle kode.)

Og saa siger du at du har loebende lukket dine uafsluttede indlaeg.  Ja, du har lukket et par, men jeg forstaar ikke hvorfor du ikke lukker de andre og faar dine udestaaende points frigjort.  Spoergsmaalene "Kan ikke vises i Mozilla: fra 29/4, "PHP - Soeg efter dele af et ord!" fra 28/5, og "Upload billeder paa hjemmeside.PHP." fra 12/8 kan naeppe stadig vaere aktuelle.
Avatar billede n_j_b Nybegynder
10. december 2009 - 22:10 #8
Det er bare TOP NOTCH... Det virker perfekt. Mange tak for hjælpen!!

Jeg arbejder videre på at få lukket mine indlæg!
Avatar billede n_j_b Nybegynder
11. december 2009 - 17:46 #9
Jeg har lige et tillægsspørgsmål til dit svar. Jeg har nu prøvet dit eksempel af nogen gange og det virker fint. Men af en eller anden grund bliver værdierne sat ind dobbelt.

De bliver ikke sat ind dobbelt med det samme. først bliver de sat ind en gang når jeg kører filen med ovenstående kode. Når jeg så senere fra mit administrationsmodul på min hjemmeside ser værdierne der er blevet sat ind i mysql med koden, så kan jeg se at værdierne bliver sat ind endnu engang.

Hvis jeg i mellemtiden efter værdierne er blevet sat ind første gang, fjerner filen med ovenstående kode fra serveren, så bliver de ikke sat ind dobbelt...

Har du måske en forklaring til det hvad dette kunne skyldes..
11. december 2009 - 22:20 #10
Det vil vaere umuligt at svare paa hvad der kan skyldes at vaerdierne indsaettes en gang mere uden at have adgang til resten af din kode.  Det burde du egenligt stille som et nyt spoergsmaal og saaledes faa mulighed for svar fra alle Eksperten's medlemmer.  Der kunne jo vaere nogen med bedre ideer end mig.  For eksempel et spoergsmaal som:

"Jeg har nedenstaaende kode hvor [og saa skrive hvad det er du vil, generere en midlertidig tabel, fra hvor?] og saa indsaette vaerdierne i en permanent tabel.  Men det viser sig at vaerdierne bliver indsat to gange.  Kan nogen hjaelpe.."

og saa indsaette hele koden.
Avatar billede n_j_b Nybegynder
11. december 2009 - 23:49 #11
Det gør jeg så!

Indtil videre, tak for hjælpen!
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
Kurser inden for grundlæggende programmering

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