Avatar billede krydset Nybegynder
07. januar 2004 - 18:18 Der er 35 kommentarer og
1 løsning

holde php og html adskilt

Er det muligt i det her script at holde html og php næsten adskilt på en måde noget ala det jeg har lavet.


/*
    Here starts the code
*/

    //includes the file there is opening a connection to a databse
include('dbconnect.php');
    //Selects the tabels produkter in the MySql Database
$res = mysql_query("SELECT * FROM produkter") or die(mysql_query());
    //runs the $res trough a while statement
while ($row = mysql_fetch_array($res)) {
    $text    =    "<a href='index.php?id=$row[produkt_id]'>$row[produkt_navn]</a><br>";
    $text    .=    "$row[produkt_beskrivelse]<br>";
    $text    .=    "$row[pris] ,-";
    $text    .=    "<br />";
}



/*
    Here stops the code
*/
?>
<html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
   
    <body bgcolor="#EAEAEA">
    <table>
        <tr>
            <td><?php echo "$text<br />"; ?></td>
        </tr>
    </table>
    </body>
</html>
Mvh Krydset
Avatar billede tefcke Nybegynder
07. januar 2004 - 18:24 #1
Ja, selvfølig er der da det. Alt det kræver er at man lige gennemtænker hvad det er man vil lave før man laver det. Det er jo en klassisk fejl at bare kode derudaf, uden egentlig at have gennemtænkt hvordan man bedst kommer frem til det man stræber efter.

Dog vil denne while løkke, konstant overskrive $text, og resultatet vil blive et enkelt link, selv om der måske var flerer link i databasen:
while ($row = mysql_fetch_array($res)) {
    $text    =    "<a href='index.php?id=$row[produkt_id]'>$row[produkt_navn]</a><br>";
    $text    .=    "$row[produkt_beskrivelse]<br>";
    $text    .=    "$row[pris] ,-";
    $text    .=    "<br />";
}
Avatar billede krydset Nybegynder
07. januar 2004 - 18:27 #2
Ja det ved jeg godt den gør men ved du en måde at gøre det på.

det du har posted er jo det samme som mit :-O
Avatar billede tefcke Nybegynder
07. januar 2004 - 18:30 #3
// For at undgå en warning sættes $text til en tom streng
$text = '';
while ($row = mysql_fetch_array($res)) {
    $text    .=    "<a href='index.php?id=$row[produkt_id]'>$row[produkt_navn]</a><br>";
    $text    .=    "$row[produkt_beskrivelse]<br>";
    $text    .=    "$row[pris] ,-";
    $text    .=    "<br />";
}
Avatar billede fangel Nybegynder
07. januar 2004 - 18:30 #4
krydset -> selvfølgelig kan man det - som tefcke siger - man skal bare gennemtænke ens projekt så man ved hvilke ting der skal kunne ændres - og vudere hvordan det bedst laves - fx via inkluderede filer...

jeg holder meget af netop det med at inkludere filer alt efter indholdet i siden - et koncept der meget nemmere lader sig gøre hvis holder HTML og PHP så adskildt som muligt...

Morten
Avatar billede tefcke Nybegynder
07. januar 2004 - 18:32 #5
præcis, modularitet er altid en god ide!
Avatar billede krydset Nybegynder
07. januar 2004 - 18:33 #6
Jeg har tænkt og tænkt og tænkt men kan ikke komme på en ide til hvordan jeg skal få udskrevet eller posterne i db´en uden at kører html table ind i while løkken

Det deb gør nu er kun at den udskriver den sidte post i db ´en. Men hvordan får man den til at udskrive alle posterne på den her måde??
Avatar billede krydset Nybegynder
07. januar 2004 - 18:36 #7
sorry troede det var det samme tefck skrev igen prøver lige det han skriver ;)
Avatar billede tefcke Nybegynder
07. januar 2004 - 18:38 #8
Det skulle den nok gøre med den lille kodestump jeg smed ligefør, dog smider den alle links ind i samme datacelle af din tabel, men der skal ikke det store til at ændre det, så den smider linksne ind i hver sin datacelle.
Avatar billede krydset Nybegynder
07. januar 2004 - 18:39 #9
Jeg tror jeg skal stoppe kodningen i dag, Men jeg takker for hjælpen det fungede osse ;)

(skal sqi os ha briller tror jeg ;) )
Avatar billede krydset Nybegynder
07. januar 2004 - 18:40 #10
Nej det finder jeg selv ud af bare du smider et svar så du kan få point
Avatar billede Slettet bruger
07. januar 2004 - 18:41 #11
Grundreglen om at adskille program og html betyder ikke, at man kan undgå kode helt i sit output. Jeg vil mene, at det ville være smartere at hente de oplysninger og beskeder der skal udskrives ind i variable (men uden htmlkode i variablene), og derefter have en eller flere løkker i din html til at styre udskrift.
Avatar billede tefcke Nybegynder
07. januar 2004 - 18:43 #12
Du må lige sige til hvis du skal bruge hjælp til at stille det op med linksne i dataceller eller noget lign.
Avatar billede krydset Nybegynder
07. januar 2004 - 18:44 #13
sandbox giver du et eks. ?
Avatar billede Slettet bruger
07. januar 2004 - 18:44 #14
Øjeblik, så laver jeg lige et eksempel fra dit.
Avatar billede krydset Nybegynder
07. januar 2004 - 18:45 #15
Det skal jeg nok.
Avatar billede krydset Nybegynder
07. januar 2004 - 18:45 #16
oki
Avatar billede Slettet bruger
07. januar 2004 - 18:56 #17
Nu er indrykningen måske lidt smadret, men her er koden. Bemærk lige, at jeg har ikke testet den, så der er muligvis en tastefejl eller to.


/*
    Here starts the code
*/

    //includes the file there is opening a connection to a databse
include('dbconnect.php');
    //Selects the tabels produkter in the MySql Database
$res = mysql_query("SELECT * FROM produkter") or die(mysql_query());
    //runs the $res trough a while statement
while ($row[] = mysql_fetch_array($res));


/*
    Here stops the code
*/
?>
<html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
 
    <body bgcolor="#EAEAEA">
    <table>
<?php
foreach($row as $produkt){
?>
        <tr>
            <td>
              <a href='index.php?id=<?php echo $produkt['produkt_id']:?>'>
                <?php echo $produkt['produkt_navn'];?>
              </a>
            </td>
            <td>
              <?php echo $produkt['produkt_beskrivelse'];?>
            </td>
            <td>
              <?php echo $produkt['pris'];?>
            </td>
        </tr>
<?php
}
?>
    </table>
    </body>
</html>
Avatar billede krydset Nybegynder
07. januar 2004 - 19:04 #18
while ($row[] = mysql_fetch_array($res));

hvad gør $row[]?
Avatar billede krydset Nybegynder
07. januar 2004 - 19:21 #19
okay bu har jeg prøvet det ser osse ud til at være en ok metode men jeg har lige et spm

her er det jeg har brugt

    <table>
    <?php
    foreach ($row as $produkt) {
    ?>
        <tr>
            <td><?php echo "Varer id $produkt[produkt_id]"; ?></td>
        </tr>
       
        <tr>
            <td><?php echo "$produkt[produkt_navn]"; ?></td>
        </tr>
       
        <tr>
            <td><?php echo "Beskrivelse:<br> $produkt[produkt_beskrivelse]"; ?></td>
        <tr>
       
        <tr>
            <td><?php echo "$produkt[pris]"; ?></td>
        <tr>
       
    <?php
    }
    ?>
    </table>


Det udkriver det flot men med en enkelt fejl som jeg ikke kan finde ud af at fjerne her er udskrift


Varer id 1
Webshop
Beskrivelse:
En sej shop der kan tilpasses alle steder

899

Varer id 2
mail script
Beskrivelse:
Dette er det ultimative mail script

299

Varer id 

Beskrivelse:


Som i kan se udkriver det en "tom" varer id og beskrivelse selvom der kun er 2 poster i databasen hvorfor det??

Ps du skal nok få lift point sandbox, jeg var lidt hurtig til at lukke :-O
Avatar billede tefcke Nybegynder
07. januar 2004 - 19:22 #20
krydset >> $row[] = ... ; betyder at man putter det som står på højre side af = ind på pladsen efter det sidste array index. Svarer lidt til array_push().

sandbox >> Der er dog nogen fejl rundt omkring.
$row[] er ikke erklæret, det vil give en warning med error_reporting = E_ALL
tilføj:
$row = array();

Hvis database forspørgelsen ikke returnerer noget, vil der også komme en warning i det der forsøges et kald til mysql_fetch_array() (i while), samt vil html tabellen som blive genereret ikke være korrekt, da der bare vil stå:
<table>
</table>
Der mangler et tjek på om $res er false!
Avatar billede tefcke Nybegynder
07. januar 2004 - 19:32 #21
Man kan jo også ordne alt det sandbox laver i "html-delen" før:
/*
    Here starts the code
*/

    //includes the file there is opening a connection to a databse
include('dbconnect.php');
    //Selects the tabels produkter in the MySql Database
$res = mysql_query("SELECT * FROM produkter") or die(mysql_query());
    //runs the $res trough a while statement
$text = '';
if ( $res != false ) { // Der eksisterer mindst et link i databasen
    while ($row = mysql_fetch_array($res)) {
        $text .= "
      <tr>
            <td>Varer id {$produkt[produkt_id]}</td>
        </tr>

        <tr>
            <td>{$produkt[produkt_navn]}</td>
        </tr>

        <tr>
            <td>Beskrivelse:<br> {$produkt[produkt_beskrivelse]}</td>
        <tr>

        <tr>
            <td>{$produkt[pris]}</td>
        <tr>";
    }
} else { // Ingen link i databasen
    $text .= "
        <tr>
            <td>Der er ikke oprettet nogen link endnu!<td>
        </tr>";
}

/*
    Here stops the code
*/
?>
<html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body bgcolor="#EAEAEA">
    <table>
        <?php echo $text; ?>
    </table>
    </body>
</html>
Avatar billede tefcke Nybegynder
07. januar 2004 - 19:33 #22
Så skal $produkt nok bare hedde $row ;o)
Avatar billede krydset Nybegynder
07. januar 2004 - 19:33 #23
den er rettet $row = array();
hvordan laver man et tjek på $res det har jeg aldrig brugt før?
Hvad med problemet jeg har beskrevet i indlæg 07/01-2004 19:21:38
Avatar billede krydset Nybegynder
07. januar 2004 - 19:35 #24
Så er det jo jeg får blandet det alt for meget og det vil jeg ikke hvis det kan undgås ;)
Avatar billede tefcke Nybegynder
07. januar 2004 - 19:43 #25
Ok, hvis det er sådan du mener med at blande, så gør som sandbox skriver (også sådan jeg selv gør det) ;o)

Her er et sådan som jeg ville gøre det:
<?
/*
    Here starts the code
*/

    //includes the file there is opening a connection to a databse
include('dbconnect.php');
    //Selects the tabels produkter in the MySql Database
$res = mysql_query("SELECT * FROM produkter") or die(mysql_query());
    //runs the $res trough a while statement
$row = array();
while ($row[] = mysql_fetch_array($res));


/*
    Here stops the code
*/
?>
<html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body bgcolor="#EAEAEA">
    <table>
<?php
if ( sizeof($row) == 0 ) { // Der var intet data i databasen
?>
        <tr>
            <td>Der er ikke oprettet nogen link endnu!</td>
        <tr>
<?php
} else { // Der findes data i databasen
    foreach($row as $produkt){
?>
        <tr>
            <td>
              <a href='index.php?id=<?php echo $produkt['produkt_id']:?>'>
                <?php echo $produkt['produkt_navn'];?>
              </a>
            </td>
            <td>
              <?php echo $produkt['produkt_beskrivelse'];?>
            </td>
            <td>
              <?php echo $produkt['pris'];?>
            </td>
        </tr>
<?php
    } // end forelse
} // end else
?>
    </table>
    </body>
</html>

Har taget sandbox forslag og ændret det!
Avatar billede krydset Nybegynder
07. januar 2004 - 20:05 #26
Der er altså en fejl et eller andet sted jeg ikke kan komme af med der er kun 2 poster i db men når jeg bruger det her

        <tr>
            <td>
              <a href='index.php?id=<?php echo $produkt['produkt_id'];?>'>
                <?php echo $produkt['produkt_navn'];?>
              </a>
            </td>
            <td>
              <?php echo $produkt['produkt_beskrivelse'];?>
            </td>
            <td>
              <?php echo "$produkt[pris],-";?>
            </td>
Udskriver den en ,- mere en der er poster i db hvordan kan det være?
Avatar billede krydset Nybegynder
07. januar 2004 - 20:27 #27
Og den funger heller ikke rigtig??
Avatar billede krydset Nybegynder
07. januar 2004 - 20:30 #28
echo sizeof($row}; returner 1 når db er tom Why that
Avatar billede fangel Nybegynder
07. januar 2004 - 20:40 #29
prøv at lav en

while(($row[] = mysql_fetch_assoc($query)) != NULL);

eller sådan noget i den stil...

Morten
Avatar billede krydset Nybegynder
07. januar 2004 - 20:48 #30
Jeg brugte bare num_rows i stedet og så i if linie if($antal == 0) {//der er ingen links i db
Avatar billede krydset Nybegynder
07. januar 2004 - 20:50 #31
Men noget jeg syns der er underligt er at selvom der kun er 1 post i db så udskriver den såen her

Produkt navn:
Webshop
Sej webshop
899


Produkt navn:

Der kan du ser produkt navn bliver spyttet ud 2 gange men der er kun 1 post i db. Hvad er fejlen til det jeg bruger det script nu:

-------------------------------------------------------------------------------


<?PHP
/*
*    +-----------------------------------------------------------------------------+
*        Projekt Name Show products
*    +-----------------------------------------------------------------------------+
*        Copyright Notes Copyrights 2003 pc-dk.dk
*    +-----------------------------------------------------------------------------+
*      Disclaimer Notice(s)                                                         
*      DONT USE THIS SCRIPT UNLESS YOU HAVE MY PERMISSIONS ON PARER     
*      WITH MY PERSONAL SIGNATURE ANY QUESTIONS FOR THAT
*      SEND ME A MAIL: TLARSEN@PC-DK.DK                                                                   
*      IF YOU WANT TO USE THIS SCRIPT THEN MAIL ME AND PAY FOR IT
*    +-----------------------------------------------------------------------------+
*        Author(s): Thomas Larsen / Dk-Medieburner E-Mail: Tlarsen@pc-dk.dk
*    +-----------------------------------------------------------------------------+
*/

    error_reporting(E_ALL); //For debuggin only, prints all error!   
                            //remove the # to debug

/**
*    Module comments (Brief shorly what this piece of code do)
    This script is logging a user in.
*/



/*
    Here starts the code
*/

    //includes the file there is opening a connection to a databse
include('dbconnect.php');
    //Selects the tabels produkter in the MySql Database
$res = mysql_query("SELECT * FROM produkter") or die(mysql_query());
    //to avoid a warning i am setting $row to an emty array here-->
$row = array();
    //runs the $res trough a while statement
while ($row[] = mysql_fetch_array($res));
$antal = mysql_num_rows($res);

/*
    Here stops the code
*/
?>


<html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body bgcolor="#EAEAEA">
    <table>
<?php
if ( $antal == 0 ) { // There was nothing in the DB
?>
        <tr>
            <td>Der er ikke oprettet nogen link endnu!</td>
        <tr>
<?php
} else { // There was something in the db
    foreach($row as $produkt){
?>
        <tr>
            <td>Produkt navn:</td>
        </tr>
       
        <tr>
            <td><a href="index.php?id=<?php echo $produkt['produkt_id']; ?>"><?php echo $produkt['produkt_navn']; ?></a></td>
      </tr>
     
        <tr>
            <td><?php echo $produkt['produkt_beskrivelse'];?></td>
        </tr>
       
        <tr>
            <td><?php echo "$produkt[pris]";?></td>
        </tr>
       
        <tr>
            <td><br /></td>
        </tr>
<?php
    } // end forelse
} // end else

//LITTLE DEBUG INFO

echo "Antal poster i db $antal";
?>
    </table>
    </body>
</html>
Avatar billede tefcke Nybegynder
07. januar 2004 - 21:05 #32
"echo sizeof($row); returner 1 når db er tom Why that"
Så er tabellen nok ikke helt så tom som du tror!
Jeg er rimlig sikker på der ligger en tom post i tabellen!
Avatar billede krydset Nybegynder
07. januar 2004 - 21:12 #33
Nej der gør ikke men det er løst som i det andet spm du osse er med i hvor jeg opretter troede ikke i gad skrive her mere men nu er alt løst og det er godt ;)
Avatar billede Slettet bruger
07. januar 2004 - 21:13 #34
Det er ikke nødvendigt at bruge $row=array(); først. Det er nemlig kun en fejl, hvis man forsøger at hente noget fra et udefineret array. Det er ikke en fejl at begynde med at lave et array ved at tildele det en værdi.

Denne kode giver ikke det mindste muk:

<?php
error_reporting(E_ALL);
$row[]="HEJ";
?>
Avatar billede krydset Nybegynder
07. januar 2004 - 21:17 #35
oki det ved jeg ikke noget om, det var en af de andre der skrev det !.

Ville du have nogen point som tak for hjælpen
Avatar billede Slettet bruger
07. januar 2004 - 21:35 #36
Skidt med det - jeg kan jo bare holde nallerne fra tastaturet, i spørgsmål, hvor der allerede er uddelt 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