Avatar billede noodrem Nybegynder
16. marts 2004 - 15:00 Der er 23 kommentarer og
5 løsninger

Problemer med script

Hej

Jeg har følg script:

<?

mysql_connect("localhost", "root");
mysql_select_db("slumkum");

$result_query = mysql_query("select * from nyheder") or die(mysql_error());
$number = mysql_num_rows($result_query);

if($number < 1) {
    echo "Der er ikke tilføjet nogle nyheder.";
} else {
    $id = $row['id'];
    $navn = $row['navn'];
    $mail = $row['mail'];
    $overskrift = nl2br($row['overskrift']);
    $nyhed = nl2br($row['nyhed']);
    $rediger = $row['rediger'];
    $result_rediger = mysql_query("select rediger from nyheder where id='$id'") or die(mysql_error());
    $number_rediger = mysql_num_rows($result_rediger);
   
    while($row = mysql_fetch_array($result_query)) {
        echo "<div class='nyheder'>"; // Nyheder (gennemgående)
        echo "<div class='nyheder_info'>"; // Nyhedsinfo
        echo "<div class='info_forfatter'>skrevet af <a href='mailto:$mail'>$navn</a></div>"; // Forfatter   
        echo "<div class='dato'>$dato</div></div> <p />"; // dato
        echo "<div class='nyhed_overskrift'>$overskrift</div> <p />"; // Overskrift
        echo "$nyhed"; // Nyhed
        if($number_rediger > 0) {
            echo "<div class='nyheder_info'>Redigeret af: <div class='nyhed_overskrift'>$rediger</div></div>";
        } else {
            echo "";
        }
        if(isset($_SESSION['user'])) {
            echo "<p /><div class='nyheder_info'><a href='.../index2.php?side=rediger&id=$id'>Rediger</a>    <a href='.../index2.php?side=slet&id=$id'>Slet</a></div>";
        } else {
            echo "";
        }
        echo "</div>"; // Slutter nyheder (gennemgående)
  }
}

?>



Mit problem med scriptet er at, når jeg viser det i en browser, udskriver den ikke de variabler der står i echo taggene. Hvad gør jeg forkert?
Avatar billede erikjacobsen Ekspert
16. marts 2004 - 15:07 #1
Du skal vel lige putte noget i $row inden du bruger den
Avatar billede noodrem Nybegynder
16. marts 2004 - 15:14 #2
hvordan?
Avatar billede erikjacobsen Ekspert
16. marts 2004 - 15:17 #3
Jeg kan desværre ikke gennemskue hvad du laver, og hvad du skal med de to select-sætninger du har.
Det virker noget rodet og ugennemtænkt, men jeg ved selvfølgelig ikke hvad du
egentlig har i tabellen.

Man plejer at få en række med

  $row=mysql_fetch_array(....);
Avatar billede noodrem Nybegynder
16. marts 2004 - 15:19 #4
har ikke kodet i php mere end ca. en måned, så du kan tro det ikke er ugennemtænkt... Jeg har skam brugt flere timer på at lave ovenstående script :)
Avatar billede skau Nybegynder
16. marts 2004 - 15:38 #5
Du skal sætte tekststrengene sammen med . feks sådan her

echo "<div class='dato'>".$dato."</div></div> <p />"; // dato
Avatar billede skau Nybegynder
16. marts 2004 - 15:39 #6
Søledes du referer til dine variabler udenfor ""
Avatar billede skau Nybegynder
16. marts 2004 - 15:41 #7
Jeg har prøvet at gøre det lidt freestyle (uden at køre koden.

<?

mysql_connect("localhost", "root");
mysql_select_db("slumkum");

$result_query = mysql_query("select * from nyheder") or die(mysql_error());
$number = mysql_num_rows($result_query);

if($number < 1) {
    echo "Der er ikke tilføjet nogle nyheder.";
} else {
    $id = $row['id'];
    $navn = $row['navn'];
    $mail = $row['mail'];
    $overskrift = nl2br($row['overskrift']);
    $nyhed = nl2br($row['nyhed']);
    $rediger = $row['rediger'];
    $result_rediger = mysql_query("select rediger from nyheder where id='$id'") or die(mysql_error());
    $number_rediger = mysql_num_rows($result_rediger);
   
    while($row = mysql_fetch_array($result_query)) {
        echo "<div class='nyheder'>"; // Nyheder (gennemgående)
        echo "<div class='nyheder_info'>"; // Nyhedsinfo
        echo "<div class='info_forfatter'>skrevet af <a href='mailto:".$mail."'>$navn</a></div>"; // Forfatter   
        echo "<div class='dato'>".$dato."</div></div> <p />"; // dato
        echo "<div class='nyhed_overskrift'>".$overskrift."</div> <p />"; // Overskrift
        echo $nyhed; // Nyhed
        if($number_rediger > 0) {
            echo "<div class='nyheder_info'>Redigeret af: <div class='nyhed_overskrift'>".$rediger."</div></div>";
        } else {
            echo "";
        }
        if(isset($_SESSION['user'])) {
            echo "<p /><div class='nyheder_info'><a href='.../index2.php?side=rediger&id=".$id."'>Rediger</a>    <a href='.../index2.php?side=slet&id=".$id."'>Slet</a></div>";
        } else {
            echo "";
        }
        echo "</div>"; // Slutter nyheder (gennemgående)
  }
}

?>
Avatar billede erikjacobsen Ekspert
16. marts 2004 - 15:43 #8
Skau: det spørgeren skriver virker fint nok, blot der kommer noget i $row ved den første select.
Jeg kan blot ikke gennemskue hvad der prøves på med den anden select.
Avatar billede noodrem Nybegynder
16. marts 2004 - 15:47 #9
Wolla nu har jeg fundet fejlen :)

variablerne skal selvfølgelig ned i while løkken.

Det jeg laver, er et system til at vise nyheder, tilføjet af brugere på min side. Derfor skal hver nyhed have nogle specielle variabler/data knyttet til sig, og variablerne, skal derfor gælde for hver enkel nyhed, som den jo finder ved at køre gennem while løkken.
Avatar billede skau Nybegynder
16. marts 2004 - 15:49 #10
Så må det vel være linie hvor der skal stå:
$row=mysql_fetch_array($result_query);
Avatar billede noodrem Nybegynder
16. marts 2004 - 15:51 #11
så scriptet sakl altså se således ud:

<?

mysql_connect("localhost", "root");
mysql_select_db("slumkum");

$result_query = mysql_query("select * from nyheder") or die(mysql_error());
$number = mysql_num_rows($result_query);

if($number < 1) {
    echo "Der er ikke tilføjet nogle nyheder.";
} else {       
    while($row = mysql_fetch_array($result_query)) {
        $id = $row['id'];
        $navn = $row['navn'];
        $mail = $row['mail'];
        $overskrift = nl2br($row['overskrift']);
        $nyhed = nl2br($row['nyhed']);
        $rediger = $row['rediger'];
        $result_rediger = mysql_query("select rediger from nyheder where id='$id'")or die(mysql_error());
        $number_rediger = mysql_num_rows($result_rediger);       

        echo "<div class='nyheder'>"; // Nyheder (gennemgående)
        echo "<div class='nyheder_info'>"; // Nyhedsinfo
        echo "<div class='info_forfatter'>skrevet af <a href='mailto:$mail'>$navn</a></div>"; // Forfatter   
        echo "<div class='dato'>$dato</div></div> <p />"; // dato
        echo "<div class='nyhed_overskrift'>$overskrift</div> <p />"; // Overskrift
        echo "$nyhed"; // Nyhed
        if($number_rediger > 0) {
            echo "<div class='nyheder_info'>Redigeret af: <div class='nyhed_overskrift'>$rediger</div></div>";
        } else {
            echo "";
        }
        if(isset($_SESSION['user'])) {
            echo "<p /><div class='nyheder_info'><a href='.../index2.php?side=rediger&id=$id'>Rediger</a>    <a href='.../index2.php?side=slet&id=$id'>Slet</a></div>";
        } else {
            echo "";
        }
        echo "</div>"; // Slutter nyheder (gennemgående)
  }
}

?>
Avatar billede skau Nybegynder
16. marts 2004 - 15:57 #12
hmmmm - ja det ser ok ud - men skal du ikke stadig have variabler udenfor "" ?
Avatar billede noodrem Nybegynder
16. marts 2004 - 15:57 #13
men nu har jeg et andet problem. Selvom der ikke er sat noget ind i kolonnen 'rediger', tager den det som om der er indsat noget.

I følg script:

if($number_rediger > 0) {
            echo "<div class='nyheder_info'>Redigeret af: <div class='nyhed_overskrift'>$rediger</div></div>";
        } else {
            echo "";
        }


Vælger den nemlig den øverste mulighed, somom at der skulle være sat noget ind i rediger. ( det finder jeg ud af med dette script: $result_rediger = mysql_query("select rediger from nyheder where id='$id'")or die(mysql_error());
        $number_rediger = mysql_num_rows($result_rediger); )

Hvordan kan det være`?
Avatar billede skau Nybegynder
16. marts 2004 - 16:15 #14
Står der 0 eller NULL i feltet rediger i tabellen nyheder hvis der ikke er indsat noget ?
Avatar billede skau Nybegynder
16. marts 2004 - 16:16 #15
Glem det spørgsmål ;o) - har ikke noget med sagen at gøre
Avatar billede skau Nybegynder
16. marts 2004 - 16:21 #16
Du vil vel altid få returneret lige så mange rækker fra nyheder som matcher $id, og så er det ligemeget hvad feltet rediger indeholder.

Derfor vil $number_rediger faktisk være lige så mange som $id matcher i nyheds taabellen.
Avatar billede skau Nybegynder
16. marts 2004 - 16:23 #17
og hvis $id er din primær nøgle vil $number_rediger altid være 1 ;o)

Hvis du nu lagde rediger ud i en anden tabel med en fremmednøgle til $id i nyhedstabellen og lavede din select der - burde det virke
Avatar billede noodrem Nybegynder
16. marts 2004 - 16:31 #18
ja men den sakl jo vælge rediger, med samme id, som den nyhed den er igang med. Der skal jo tilføjes en unik rediger til hver nyhed!
Avatar billede skau Nybegynder
16. marts 2004 - 16:44 #19
jepper derfor skal du også have en fremmednøgle....

Forestil dig en tabel ved siden af der ha et felt nyhedsid (der peger på feltet id i din nyhedstabel) alle redigeringer logges så i den nye tabel og du vil nu få mange entries per nyhed istedet for en entry pr nyhed.
Avatar billede noodrem Nybegynder
16. marts 2004 - 17:23 #20
du må lige forklare mig hvordan man laver det. Kunne det ikke være ligeså smart at skrive:

mysql_query("select * from nyheder where id = '$id'") or die(mysql_error());
$rediger = $row['rediger'];

Og så finde ud af om $rediger indeholder noget data ( hvordan er det nu man gør det )?
Avatar billede sukos Juniormester
16. marts 2004 - 17:26 #21
$hent = mysql_query("select * from nyheder where id = '$id'") or die(mysql_error());
$row = mysql_fetch_array($hent);
echo $row['id'];
echo $row['navn'];
echo $row['email'];
Avatar billede sukos Juniormester
16. marts 2004 - 17:27 #22
if(!empty($row['rediger'])) {
echo "ok";
}
Avatar billede noodrem Nybegynder
16. marts 2004 - 17:40 #23
jeps der var den :)  taks
Avatar billede noodrem Nybegynder
16. marts 2004 - 17:56 #24
Nu har jeg et andet problem. I det script jeg har ovenover, kommer der et linjeskift, mellem der hvor der står skrvete af $navn, og $dato, så værdien af $dato kommer altså til at stå en linje længere nede end skrevet af $navn, og meningen er at de skal stå på samme linje. Som i kan se er der ingen <br> eller <p> så det burde ikke ske. Mit stylesheet ser således ud, hvis det ellers kan betyde noget:


/*** Nyheder ***/

  .nyheder {
    border:1px solid black;
    margin-right:5px;
    margin-left:5px;
    margin-bottom:5px;
    margin-top:5px;
  }
  .nyheder_info {
    background-color:#999999;
    padding-left:5px;
    padding-right:5px;
    padding-top:3px;
    padding-bottom:3px;
    width:100%;
  }
.nyheder_info_dark {
    background-color:#666666;
    padding-left:5px;
    padding-right:5px;
    padding-top:3px;
    padding-bottom:3px;
    width:100%;
  }
  .info_forfatter {
    text-align:left;
    padding-left:3px;
  }
  .dato {
    text-align:right;
    padding-right:3px;
  }
  .nyhed_overskrift {
    font-weight:bold;
    padding-left:5px;
    padding-right:5px;
  }
  .red {
    color:red;
  }
  .nyhed {
    padding-left:5px;
    padding-right:5px;
}
Avatar billede Slettet bruger
17. marts 2004 - 00:52 #25
Prøv at sætte .dato til float: right;

Forklaring: navn og dato er ei hver sin <div>, og da div er et block-element, vil det blive vist som  et nyt afsnit, hvis man ikke selv specificerer noget nærmere.
Avatar billede noodrem Nybegynder
17. marts 2004 - 13:20 #26
hvad er forskellen på float: og text-align: ?
Avatar billede Slettet bruger
17. marts 2004 - 14:27 #27
Float bestemmer hvordan et element skal placeres i forhold til andre elementer.

Text-align bestemmer hvordan indhold i et element bliver placeret.

Prøv at lave et lille dokument, med indhold i denne stil, så kan du se forskellen i praksis (Tip: Det er måske en ide at gøre browservinduet mindre. for at se effekten.)

<div style="float:right;width:30px;">Dette er et ret smalt afsnit, som er float: right. Der er ikke sat text-align på dette element.</div>

<div>Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text.</div>

<div style="float:right;text-align:right;width:30px;">Dette er et ret smalt afsnit, som er float: right. Der er også sat text-align: right på dette element.</div>

<div>Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text.</div>

<div style="text-align:right;width:30px;">Dette er et ret smalt afsnit, som er text-align: right. Der er ikke sat float på dette element.</div>

<div>Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text. Dette er den normale text.</div>
Avatar billede noodrem Nybegynder
22. marts 2004 - 19:20 #28
Det samme problem opstår stadigvæk :S
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