Avatar billede brinck10 Nybegynder
23. juni 2008 - 14:51 Der er 12 kommentarer og
1 løsning

Udskrivning af XML med PHP fra database

Hej Eksperter.

Jeg har nedenstående kode, som jeg simpelthen ikke kan få til at virke. Derfor håber jeg i kan give mig svaret.

Det er meningen at scriptet skal hente nogle værdier fra en database, hvorefter PHP så skal udskrive dem som XML. Problemet er at den ikke kommer ind i while loop nummer to, og jeg har ærlig talt ingen idé, hvorfor scriptet gør sådan.

<?
$xml=array();
$xml[]="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml[]="<content>\n";

$query=mysql_query("SELECT postnumber FROM fblog_settings WHERE menu_id='".$id."'")or die("MYSQL");;
$f1=mysql_fetch_assoc($query);

if($type==1){
    $query2=mysql_query("SELECT *,date_format(created, '%d/%m/%y') AS date FROM fblog_pages WHERE menu_id='".$id."' ORDER BY created DESC LIMIT 0,". $f1["postnumber"])or die("mysql_error()");

    while($f2=mysql_fetch_assoc($query)){
        $postedin=$f2["postedin"];
        $postedin=explode(":",$postedin);

        foreach($postedin as $p){
            $p="<a href=\"asfunction:function,parameter\"><p class=\"bread_yell\">".$p."</p></a>";
        }

        $postedin=implode("<p class=\"bread_gray\">, </p>",$postedin);

        $xml[]="<post>\n";
        $xml[]="<heading>".$f2["appearname"]."</heading>\n";

        $xml[]="<underline><![CDATA[<p class=\"bread_gray\">Posted by ".$f2["byline"]." ".$f2["date"]." in</p> ".$postedin."]]></underline>\n";

        $xml[]="<text>".$f2["post"]."</text>\n";
        //$xml[]="<endoptions>".."</endoptions>\n";
        $xml[]="</post>\n";
    }
}

$xml[]="</content>\n";
echo utf8_encode(join("",$xml));
?>

Nogen der kan hjælpe?

//Frederik Jensen
Avatar billede soerenlyn Nybegynder
23. juni 2008 - 14:55 #1
Hvorfor har du en LIMIT 0 på det du henter fra databasen? Det betyder at du vil hente 0 værdier ud? Det vil altid være tomt, og dermed vil den aldrig gå ind i while-løkken..
Avatar billede jakobdo Ekspert
23. juni 2008 - 15:01 #2
Og hvor kommer dette fra: if($type==1){ ??
$type ser da ikke ud til at komme nogen steder fra ?
og hvad med $id ?

Har du noget kode over det du viser her ?

Eller har du bare en server med globals slået til ?
Så du kalder det med: script.php?type=1&id=100
Avatar billede brinck10 Nybegynder
23. juni 2008 - 15:03 #3
Det har jeg ikke, jeg har fra 0 til $f1["postnumber"] som i denne for stand er 10.. Dvs. forespørgslen lyder:

"SELECT *,date_format(created, '%d/%m/%y') AS date FROM fblog_pages WHERE menu_id='".$id."' ORDER BY created DESC LIMIT 0,3"

Prøvede helt at slette limit, og det gav samme resultat!
Avatar billede brinck10 Nybegynder
23. juni 2008 - 15:05 #4
Undskyld, det var min fejl Jakobdo. Har følgende kode stående over.

if(isset($_GET["type"]) && isset($_GET["id"])){
    $type=$_GET["type"];
    $id=$_GET["id"];
}else{
    die();
}
Avatar billede soerenlyn Nybegynder
23. juni 2008 - 15:06 #5
Okay.. Uden limit får du alle rækker der findes, hvis du skriver LIMIT 3 får du da tre øverste..

Som jakobdo spurgte, hvor kommer variablene fra?
Avatar billede jakobdo Ekspert
23. juni 2008 - 15:19 #6
Hvad med her i en debug fase, at smide lidt info ud.
echo 'TYPE : ' . $type . '<br />';
echo 'ID : ' . $id . '<br />';

echo 'Vi er nået så og så langt<br />';

echo 'Nu er vi nået hertil<br />';

Så kan du følge lidt med i hvor i din kode du går galt.
Avatar billede brinck10 Nybegynder
23. juni 2008 - 15:45 #7
Jo da :-)

Scriptet kører på www.sjfoto.dk/MyFlashBlog/getPage.php?type=1&id=1

Den kan kun tage parameterene med tallet 1.

Koden som den ser ud nu:

<?
if(isset($_GET["type"]) && isset($_GET["id"])){
    $type=$_GET["type"];
    $id=$_GET["id"];
}else{
    die();
}
echo "Her er typerne:<br>";
echo "TYPE: ".$type."<br>";
echo "ID: ".$id."<br>";

$xml=array();
$xml[]="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml[]="<content>\n";
$query=mysql_query("SELECT postnumber FROM fblog_settings WHERE menu_id='".$id."'")or die("MYSQL");;
$f1=mysql_fetch_assoc($query);
if($type==1){
    echo "Nu er vi inde i 'if'-sætningen<br>";
    $query2=mysql_query("SELECT *,date_format(created, '%d/%m/%y') AS date FROM fblog_pages WHERE menu_id='".$id."' ORDER BY created DESC")or die("mysql_error()");
    echo "Stadig inde i 'if'-sætningen lige FØR while sætningen. Ingen af vores forespørgsler er fejlet, da de ikke er 'die'-ed<br>";
    while($f2=mysql_fetch_assoc($query)){
        echo "Nu er vi inde i while sætningen...<br>";
        $postedin=$f2["postedin"];
        echo "Variablen postedin indeholder: ".$postedin."<br>";
        $postedin=explode(":",$postedin);
        foreach($postedin as $p){
            $p="<a href=\"asfunction:function,parameter\"><p class=\"bread_yell\">".$p."</p></a>";
            echo $p;
        }
        $postedin=implode("<p class=\"bread_gray\">, </p>",$postedin);
        $xml[]="<post>\n";
        $xml[]="<heading>".$f2["appearname"]."</heading>\n";
        $xml[]="<underline><![CDATA[<p class=\"bread_gray\">Posted by ".$f2["byline"]." ".$f2["date"]." in</p> ".$postedin."]]></underline>\n";
        $xml[]="<text>".$f2["post"]."</text>\n";
        //$xml[]="<endoptions>".."</endoptions>\n";
        $xml[]="</post>\n";
        echo "Nu skal while sætningen til at slutte, og den burde gentage sig, hvis der er flere udtræk fra databasen<br>";
    }
    echo "Og nu er løkken slut, og vi printer dette ude af den<br>";
}
echo "Nu skriver vi end-tagget i XML'en, og scriptet er færdigt..";
$xml[]="</content>\n";
echo utf8_encode(join("",$xml));
?>
Avatar billede brinck10 Nybegynder
23. juni 2008 - 15:47 #8
Forkert link.

Det rigtige:  www.sjfoto.dk/MyFlashBlog/xml/getPage.php?type=1&id=1

Undskyld spam
Avatar billede jakobdo Ekspert
23. juni 2008 - 15:55 #9
Prøv at test dine sql'er i PHPMYADMIN.

SELECT postnumber FROM fblog_settings WHERE menu_id=1

SELECT *,date_format(created, '%d/%m/%y') AS date FROM fblog_pages WHERE menu_id=1 ORDER BY created DESC

Giver det korrekt output ?
Avatar billede jakobdo Ekspert
23. juni 2008 - 15:59 #10
Og tror du ikke din plan har været at bruge dette et sted:

$f1=mysql_fetch_assoc($query);

Som jeg ser det, så bruger ud ikke $f1 nogen steder. (ihf ikke efter du har rettet i din kode) :o)
Avatar billede brinck10 Nybegynder
23. juni 2008 - 16:16 #11
:O.. Kunne give mig skaldet nu. Fandt fejlen, der skulle stå $query2, i stedet for $query...

Mange tak for hjælpen :-) Hader sådan nogle "dummefejl"..

Smid svar, og i får point ;)
Avatar billede jakobdo Ekspert
23. juni 2008 - 17:45 #12
Svar
Avatar billede jakobdo Ekspert
24. juni 2008 - 08:15 #13
Takker for point.
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