Avatar billede nicklasw Nybegynder
17. august 2006 - 19:58 Der er 7 kommentarer og
1 løsning

kan ikke udskrive

Hej.
Jeg har lavet det her forum, men efter et bestemt sted i koden kan den ikke udskrive noget, jeg ved ikke om den bare ikke eksekver koden eller om det kun er "echo" functionen der ikke virker.
det er lige efter while lykken. her er min kode:

<?
$fra = $_GET["fra"];
if ($fra == "")
{
  $fra = 0;
};
$counter = 0;
$limit = 7 * $fra;

include("include/connect.php");
$res = mysql_query("SELECT * FROM forum LIMIT $limit,7") or die(mysql_error());
while ($row = mysql_fetch_array($res) or die (mysql_error()))
{
  $title = $row["title"];
  $kl = $row["kl"];
  $navn = $row["navn"];
  $pretext = $row["text"];
  $antal = $row["id"];
  $text = nl2br($pretext);
  $html = "
  <table id=\"forum_table\">
      <tr>
          <td  id=\"forum_title\"><a>$title</a></td>
      </tr>
      <tr>
          <td id=\"forum_info\"><a>$navn</a><br /><a>$kl</a></td>
          <td id=\"forum_text\">$text</td>
      </tr>
      </table>
      <br />
  ";
  echo "$html";
}

$plus = $fra + 1;
$minus = $fra - 1;

$result = mysql_query("SELECT count(*) AS ialt FROM forum") or die(mysql_error());
$row = mysql_fetch_assoc($result);
$ialt = $row["ialt"];

echo "$limit";
echo "$ialt";

if($limit > 0){
  $html_tilbage = "<a href=\"vis.php?fra=$minus\">&lt;&lt; Tilbage</a>";
  echo "$html_tilbage";
}

if($ialt > $limit+7){
  $html_tilbage = "<a href=\"vis.php?fra=$plus\">Næste &gt;&gt;</a>";
  echo "$html_tilbage";
}
?>


håber i kan hjælpe mig....

M.V.H Nicklas
Avatar billede hmm10 Nybegynder
17. august 2006 - 20:19 #1
Den echo'er $html i din while? Kommer der en fejlmelding?
Avatar billede nicklasw Nybegynder
17. august 2006 - 20:42 #2
nej... den echo i min while lykke virker fint, men alle echo'erne efter gør ikke og måske gør resten af koden heller ikke, lidt svært at finde ud af ;)
Avatar billede hmm10 Nybegynder
17. august 2006 - 21:01 #3
Prøv at fjern "or die (mysql_error()))", så der blot står "while ($row = mysql_fetch_array($res)" - Man kan sikker godt gøre det med en "or die()", men har aldrig set det før ved en while().
Avatar billede nicklasw Nybegynder
17. august 2006 - 21:25 #4
det var det tusind tak...
læg et svar
forresten sjovt at man ikke at sige "or die (mysql_error())"  i en while
Avatar billede hmm10 Nybegynder
17. august 2006 - 21:30 #5
svar
Avatar billede Slettet bruger
20. august 2006 - 23:56 #6
Det er faktisk ganske logisk, at det ikke virker med or die på det sted. Forklaringen er den måde de forskellige koder virker på.

1) $variabel = udtryk;

Variablen får tildelt værdien af udtryk. Bemærk at $variabel=udtryk også selv er et udtryk, som har samme værdi som det, der blev puttet i variablen.

2) udtryk or die();

Udtryk køres, og hvis det gav en værdi, der kan fortolkes som falsk, dør scriptet.

3) while( udtryk ){kode}
Koden køres så længe udtryk ikke giver et resultat, der kan fortolkes som falsk. mysql_fetch-funktionerne returnerer falsk, når der ikke er mere at hente.

Dermed:

4) while( $variabel = udtryk or die()) {kode}
Koden køres så længe udtryk ikke giver en falsk værdi hvorefter scriptet dør.
Avatar billede nicklasw Nybegynder
21. august 2006 - 13:58 #7
men echo'erne i while lykken virkede... det var efter } i while lykken den gik galt
Avatar billede Slettet bruger
21. august 2006 - 21:43 #8
Ja, netop. Det er først når while-løkken afslutter, at scriptet dør.

Det samme kan ses med følgende stump:

$x=0;
while($x<10 or die("slut")){
  echo $x . "\n";
  $x++;
}
echo "Denne udskrives ikke";

Pointen er, at når while skal finde ud af om den skal afslutte eller køre koden igen, så udfører den udtrykket i while-parentesen. Det udtryk består normalt bare af en simpel betingelse, som enten kan være sand eller falsk lige som hvis jeg ikke havde haft "or die" i min eksempelkode. Så længe (direkte oversat af "while") betingelsen ikke er falsk, udføres selve løkken igen.

Nu er fidusen at "or die()" netop betyder, at hvis det foranstående udtryk er falsk (altså hvis det ville afslutte en while-løkke) så dør scriptet i stedet med den tekst, som man har givet die()-kaldet. Dermed dør scriptet inden while når at få at vide, at den ikke skal køre løkken igen.
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