Avatar billede torstein Novice
26. november 2004 - 14:51 Der er 15 kommentarer og
1 løsning

for og while

Nedenstående kode udskriver en uges dage med navn od dato, derudover tjekkes en tabel for timer, som allerede er lagt i tabellen. hvis de findes på den givne dag, skal der stå optaget, men hvis den ikke findes skal der laves et link.

Mit prb er bare at der ikke skrives noget efter while (......){

Hvorfor. og hvor er fejlen.

<?php
  for ($i=0;$i<7; $i++) {
      $aDay = date("w", mktime(0, 0, 0, 1  , 1+$i, $year));
      if ($aDay == 1) {
        for( $x=$i; $x<$i+7; $x++ ) {
            $aDayWeekNo = date("W", mktime(0, 0, 0, 1  , 1+$x, $year));
            $day = date("d-m-y", mktime(0, 0, 0, 1  , (1+$x)+(7*($week-$aDayWeekNo)), $year));
            $day2 = date("l",mktime(0, 0, 0, 1  , (1+$x)+(7*($week-$aDayWeekNo)), $year));
?>
<td align=center><?php print $day2; ?> <br>[<?php print $day; ?>]<br>
<table cellspacing="0" cellpadding="2" border="0">
<?
$result = mysql_query("SELECT * FROM tbl_booking where dato LIKE '$day'") or die(mysql_error());
$number = mysql_num_rows($result);
for($y=0; $y < 24; $y++) {
$yx=$y+1;?>
<tr><td>
<?
while ($row = mysql_fetch_array($result)){
print $y."/".$row[time];
if ($y!=$row[time]){?>
<a href=?opret=1&bruger_id=1&week=<?=$week;?>&day=<?=$day?>&time=<?=$y;?>><?print sprintf("%02d",$y)." - ".sprintf("%02d",$yx);?></a>
<?} else { echo "Sendetid valgt af $row[bruger_id]";}}?>
</td></tr>
<?}?>
</table>
</td>
<? }
        break;
      }}?>
   
</tr></table>

scriptet ligger her www.totte.dk/ht/uge3.php
Avatar billede mjl Nybegynder
26. november 2004 - 14:55 #1
Prøv at ændre $row[time] til $row["time"]
Avatar billede torstein Novice
26. november 2004 - 15:02 #2
Nope
Avatar billede torstein Novice
26. november 2004 - 15:03 #3
Jeg har sat variblen $y ind før og efter whilesætningen, og den vil kun udskrive den før.....
Avatar billede danino Nybegynder
26. november 2004 - 15:05 #4
er du sikker på at der overhovedet er nogle poster, der matcher dine kriterier? prøv at udskrive $number FØR din while...
Avatar billede torstein Novice
26. november 2004 - 15:10 #5
den skriver 0, men har flg. post i tabellen:
id  year  week  dato    time  bruger_id  txt 
1  2004  48  26-11-2004 9      1      Test
Avatar billede torstein Novice
26. november 2004 - 15:12 #6
Min tabel:
CREATE TABLE `tbl_booking` (
  `id` int(11) NOT NULL auto_increment,
  `year` int(4) NOT NULL default '0',
  `week` tinyint(4) NOT NULL default '0',
  `dato` text NOT NULL,
  `time` tinyint(4) NOT NULL default '0',
  `bruger_id` int(11) NOT NULL default '0',
  `txt` text NOT NULL,
  KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
Avatar billede torstein Novice
26. november 2004 - 15:15 #7
Jeg kan jo også lave søgningen 24 gange hver dag (en pr. time og så søge på timen, men det bliver til mange søgninger, og derved bliver scriptet vel for langsomt.
Avatar billede danino Nybegynder
26. november 2004 - 15:18 #8
prøv at erstatte:
$day = date("d-m-y", mktime(0, 0, 0, 1  , (1+$x)+(7*($week-$aDayWeekNo)), $year));
med
$day = date("d-m-Y", mktime(0, 0, 0, 1  , (1+$x)+(7*($week-$aDayWeekNo)), $year));
Avatar billede heyde Nybegynder
26. november 2004 - 15:24 #9
Hvad med at bruge det her i stedet for den nuværende sql?
$result = mysql_query("SELECT * FROM tbl_booking where dato = '$day') or die(mysql_error());
Avatar billede heyde Nybegynder
26. november 2004 - 15:25 #10
Evt. uden '' omkring $day. Det kan jeg ikke lige huske
Avatar billede torstein Novice
26. november 2004 - 15:27 #11
heyde: time=$y skal med da søgningen foregår inde i for(), så søgningen foretages 24 gange for hver dag. Derfor skal den kun dinde forespørgslen på den ekstakte dag  + time.
Avatar billede torstein Novice
26. november 2004 - 15:31 #12
Flg. giver numeret på søgningen, men der udskrives ikke det ønskede.

www.totte.dk/ht/uge3.php

<?for($y=0; $y < 24; $y++) {
$yx=$y+1;?>
<tr><td>
<?
$result = mysql_query("SELECT * FROM tbl_booking where dato = '$day' AND time = '$y'") or die(mysql_error());
$number = mysql_num_rows($result);
while ($row = mysql_fetch_array($result)){
print $number;
if ($y!=$row["time"]){?>
<a href=?opret=1&bruger_id=1&week=<?=$week;?>&day=<?=$day?>&time=<?=$y;?>><?print sprintf("%02d",$y)." - ".sprintf("%02d",$yx);?></a>
<?} else { echo "Sendetid valgt af $row[bruger_id]";}}?>
</td></tr>
<?}?>
</table>
</td>
<? }
        break;
      }}?>
Avatar billede mcgoat Nybegynder
26. november 2004 - 15:41 #13
jamen... du laver jo også en specifik forespørgsel... så $y vil jo altid være = $row['time'].... Det skal måske se sådan ud: ?


<?for($y=0; $y < 24; $y++) {
$yx=$y+1;?>
<tr><td>
<?
$result = mysql_query("SELECT * FROM tbl_booking where dato = '$day' AND time = '$y'") or die(mysql_error());
$number = mysql_num_rows($result);
$row = mysql_fetch_array($result)

if ($number == 0){?>
<a href=?opret=1&bruger_id=1&week=<?=$week;?>&day=<?=$day?>&time=<?=$y;?>><?print sprintf("%02d",$y)." - ".sprintf("%02d",$yx);?></a>
<?} else { echo "Sendetid valgt af $row[bruger_id]";}}?>
</td></tr>
<?}?>
</table>
</td>


<? }
        break;
      }}?>
Avatar billede mcgoat Nybegynder
26. november 2004 - 15:42 #14
Du henter jo alligevel WHERE time = $y ... så $y vil ALTID være = $row['time'].. Så du skal jo egentlig bare vide om den finder noget ved hjælp af $number... Hvis $number = 1 så er det fundet i databasen, eller skal den udskrive et link ?
Avatar billede torstein Novice
26. november 2004 - 17:43 #15
mcqoat: Jeps, du har ret. Faktisk en banal fejl, som jeg ikke fik øje på, men rart at andre, incl. de andre, ville kigge med. Velfortjente point for et svar.

Tak.
Avatar billede mcgoat Nybegynder
26. november 2004 - 19:32 #16
Velbekommen da :) er glad for at kunne hjælpe.. .hehe... har også selv lavet sådan nogle fejl før, og man glor sig hurtig blind på dem...
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