Avatar billede jacobs1 Nybegynder
18. november 2007 - 12:45 Der er 15 kommentarer og
1 løsning

Push data fra db ind i Array.

Hej eksperter.

Jeg har et lille problem, med at få data fra min database ind i et Array.
Når jeg skriver sådan her virker det ikke 'name' => $rowAll['Q1'].

Det mærkelige er bare at hvis jeg bruger en string i stedet for så virker det. fx sådan her 'name' => "test";

$employees = array();

$queryALL = mysql_query("SELECT * FROM Questions where Id = 0") or die (mysql_error());
while($rowAll = mysql_fetch_array($queryALL)) {

  $employees [] = array(
  'name' => $rowAll['Q1'],
  'age' => $rowAll['Q2'],
  'salary' => $rowAll['Q3']
  );
}
Avatar billede nielle Nybegynder
18. november 2007 - 13:50 #1
1) Er du sikker på at der er en række som svare til id = 0?

2) Hvis det alligevel kun er en række du skal udtrække burde dette kunne gøre det:

$queryALL = mysql_query("SELECT * FROM Questions where Id = 0") or die (mysql_error());
$rowAll = mysql_fetch_assoc($queryALL);
$employees = array(
    'name' => $rowAll['Q1'],
    'age' => $rowAll['Q2'],
    'salary' => $rowAll['Q3']
);
Avatar billede jacobs1 Nybegynder
18. november 2007 - 14:26 #2
Mange tak for hjælpen, nu henter den i hverfald noget ind fra databasen. Nu er mit problem bare at den kun henter første bogstav???

Har du en ide til hvad problemet kan være jeg kopiere nin kode ind herunder. Dataerne jeg henter ind i arrayet bruger jeg til at lave et xml dokument med.


php fil:

<?php

$idQuiz = 1;//$_POST['userName'];

$db=mysql_connect("localhost", "brugernavn", "kode");
mysql_select_db("db", $db);

$employees = array();

$queryALL = mysql_query("SELECT * FROM Questions where Id = 1") or die (mysql_error());
$rowAll = mysql_fetch_assoc($queryALL);
$employees = array(
    'name' => $rowAll['Q1'],
    'age' => $rowAll['Q2'],
    'salary' => $rowAll['Q3']
);


 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "employees" );
  $doc->appendChild( $r );
 
  foreach( $employees as $employee )
  {
  $b = $doc->createElement( "employee" );
 
  $name = $doc->createElement( "name" );
  $name->appendChild(
  $doc->createTextNode( $employee['name'] )
  );
  $b->appendChild( $name );
 
  $age = $doc->createElement( "age" );
  $age->appendChild(
  $doc->createTextNode( $employee['age'] )
  );
  $b->appendChild( $age );
 
  $salary = $doc->createElement( "salary" );
  $salary->appendChild(
  $doc->createTextNode( $employee['salary'] )
  );
  $b->appendChild( $salary );
 
  $r->appendChild( $b );
  }
 
  //echo $doc->saveXML();
  $doc->save("doc.xml");
echo  $employees[0];
?>


***************OUTPUT *****************************


<?xml version="1.0"?>
<employees>
  <employee>
    <name>S</name>
    <age>S</age>
    <salary>S</salary>
  </employee>
  <employee>
    <name>S</name>
    <age>S</age>
    <salary>S</salary>
  </employee>
  <employee>
    <name>S</name>
    <age>S</age>
    <salary>S</salary>
  </employee>
</employees>

**************************

databasen ideholder dataerne

$rowAll['Q1'] = Sporgsmål 1
$rowAll['Q2'] = Sporgsmål 2
$rowAll['Q3'] = Sporgsmål 3

Håber det giver mening. :) og på forhånd tak!
Avatar billede nielle Nybegynder
18. november 2007 - 14:37 #3
Umiddelbart vilole jeg mene at foreach-løkken skal helt væk. Der er jo kun en post.
Avatar billede jacobs1 Nybegynder
18. november 2007 - 15:06 #4
Nu har jeg fjernet for løkken. Men nu skriver den slet ikke noget ned i xml filen? meget mærkeligt. Allersidst i kode udskriver jeg echo $rowAll['Q1']; Den skriver rigig nok Spørgsmål 1 ud fra databasen.

Laver den xml filen før scriptet for hentet dataerne fra databasen færdigt??

$employees = array();

$queryALL = mysql_query("SELECT * FROM Questions where Id = 1") or die (mysql_error());
$rowAll = mysql_fetch_assoc($queryALL);
$employees = array(
    'name' => $rowAll['Q1'],
    'age' => $rowAll['Q2'],
    'salary' => $rowAll['Q3']
);


 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "employees" );
  $doc->appendChild( $r );
 

  $b = $doc->createElement( "employee" );
 
  $name = $doc->createElement( "name" );
  $name->appendChild(
  $doc->createTextNode( $employee['name'] )
  );
  $b->appendChild( $name );
 
  $age = $doc->createElement( "age" );
  $age->appendChild(
  $doc->createTextNode( $employee['age'] )
  );
  $b->appendChild( $age );
 
  $salary = $doc->createElement( "salary" );
  $salary->appendChild(
  $doc->createTextNode( $employee['salary'] )
  );
  $b->appendChild( $salary );
 
  $r->appendChild( $b );


  $doc->save("test.xml");
echo  $rowAll['Q1'];

?>

----------OUTPUT---------------
<?xml version="1.0"?>
<employees>
  <employee>
    <name></name>
    <age></age>
    <salary></salary>
  </employee>
</employees>
Avatar billede nielle Nybegynder
18. november 2007 - 15:16 #5
Du skal bestemme dig til om dit array skal hedde $employee eller $employees.
Avatar billede jacobs1 Nybegynder
18. november 2007 - 15:31 #6
Hej igen.

Nu har jeg prøvet alt, kandu se hvor fejler er? jeg har omdøbt noter og arrayet men lige meget hjælper det..

$emp = array();

$queryALL = mysql_query("SELECT * FROM Questions where Id = 1") or die (mysql_error());
$rowAll = mysql_fetch_assoc($queryALL);
$emp = array(
    'name' => $rowAll['Q1'],
    'age' => $rowAll['Q2'],
    'salary' => $rowAll['Q3']
);


 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "employees" );
  $doc->appendChild( $r );
 

  $b = $doc->createElement( "test" );
 
  $name = $doc->createElement( "name" );
  $name->appendChild(
  $doc->createTextNode( $emp['name'] )
  );
  $b->appendChild( $name );
 
  $age = $doc->createElement( "age" );
  $age->appendChild(
  $doc->createTextNode( $emp['age'] )
  );
  $b->appendChild( $age );
 
  $salary = $doc->createElement( "salary" );
  $salary->appendChild(
  $doc->createTextNode( $emp['salary'] )
  );
  $b->appendChild( $salary );
 
  $r->appendChild( $b );


  $doc->save("test.xml");
echo  $emp['name'];


?>
Avatar billede nielle Nybegynder
18. november 2007 - 15:41 #7
Kan desværre ikke umiddelbart gennemskue fejlen. Hvad giver den af output?

Spørgmål: Hvorfor går du egentlig via et array? Hvorfor ikke populere XML-strukturen direkte via $rowAll?
Avatar billede jacobs1 Nybegynder
18. november 2007 - 16:07 #8
Nu hopper jeg lige et par trin tilbage i spørgsmålet her. Script er et jeg har fundet på nettet, som jeg så har prøvet at omskrive. Meningen med scriptet er endeligt at det skal lave et xml dokument med som ser sådan her ud.

<?xml version="1.0"?>
<data>
  <test>
    <sp>S</sp>
    <sv1>S</sv1>
    <sv2>S</sv2>
  </test>
  <test>
    <sp>S</sp>
    <sv1>S</sv1>
    <sv2>S</sv2>
  </test>
  <test>
    <sp>S</sp>
    <sv1>S</sv1>
    <sv2>S</sv2>
  </test>
</data>

jeg kan godt få xml filen til at se sådan herud, Men som du kan se skriver den kun S ud i værdierne i stedet for at skrive hele database udtrækket. som i dette tilfælle hedder Spørgsmål 1, Spørgsmål 2 og spørgsmål 3.

Koden som jeg bruger til at lave xml'en ser sådan her ud. og derfor bruger jeg et Array, men hvis det er lettere ikke at bruger et array. ville det også være perfekt.

$employees = array();

$queryALL = mysql_query("SELECT * FROM Questions where Id = 1") or die (mysql_error());
$rowAll = mysql_fetch_assoc($queryALL);
$employees = array(
    'v_sp' => $rowAll['Q1'],
    'v_sv1' => $rowAll['Q2'],
    'v_sv2' => $rowAll['Q3']
);


$employees = array(
    'v_sp' => $rowAll['Q4'],
    'v_sv1' => $rowAll['Q5'],
    'v_sv2' => $rowAll['Q6']
);


 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "data" );
  $doc->appendChild( $r );
 
  foreach( $employees as $employee )
  {
  $b = $doc->createElement( "test" );
 
  $name = $doc->createElement( "sp" );
  $name->appendChild(
  $doc->createTextNode( $employee['v_sp'] )
  );
  $b->appendChild( $name );
 
  $age = $doc->createElement( "sv1" );
  $age->appendChild(
  $doc->createTextNode( $employee['v_sv1'] )
  );
  $b->appendChild( $age );
 
  $salary = $doc->createElement( "sv2" );
  $salary->appendChild(
  $doc->createTextNode( $employee['v_sv2'] )
  );
  $b->appendChild( $salary );
 
  $r->appendChild( $b );
  }
 
  //echo $doc->saveXML();
  $doc->save("datany.xml");
echo  "ss";

?>
Avatar billede nielle Nybegynder
18. november 2007 - 16:12 #9
Nu er du så tilbage i den kode hvor at du opretter arrayer som $employees og forsøger at hente værdierne ud som $employee.
Avatar billede jacobs1 Nybegynder
18. november 2007 - 16:15 #10
Det skal lige siges at hvis jeg skriver sådan her virker det.

  $name = $doc->createElement( "sp" );
  $name->appendChild(
  $doc->createTextNode( "xxxxx" ) <----------- Altså med en hard code string her
Avatar billede jacobs1 Nybegynder
18. november 2007 - 16:29 #11
Det har noget med udtrækket fra databasen..
Avatar billede nielle Nybegynder
18. november 2007 - 16:43 #12
Givetvis, men su skal lige rette det jeg skriver i 18/11-2007 16:12:51...
Avatar billede jacobs1 Nybegynder
18. november 2007 - 22:00 #13
Hvis jeg fjerner ø i cellen i databasen virker scriptet.
ved du hvorfor man ikke må skrive øæå i databasen? jeg har valgt latin1_danish_ci i cellen Collation.
Avatar billede nielle Nybegynder
19. november 2007 - 17:36 #14
Du må godt have ø i databasen. Du må normalt ikke have ø i din XML. Normalt er XMP pr. default encodet som UTF-8 og så skal de danske bogstaver være encodet derefter. Alternativt kan du ændre encodingen i din XML-fil, men dette er egentligt ikke rigtigt anbefalelsesværdigt.
Avatar billede jacobs1 Nybegynder
20. november 2007 - 19:37 #15
super, mange tak for hjælpen. læg et svar så du kan få dine point.
Avatar billede nielle Nybegynder
20. november 2007 - 19:44 #16
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