Avatar billede hammerhead Nybegynder
16. august 2005 - 00:38 Der er 16 kommentarer og
1 løsning

udskriver flere gange fra database

Jeg har et script hvor man kan se om en tid er optaget eller ledig, men den udskriver data flere gange.

<?php
include "db_info.php";
$test = mysql_query("SELECT * FROM test_booking");

WHILE($onl = mysql_fetch_array($test)) {

echo "<b>Dag 1 - Bane 1, kl.: 10:15</b><br>";

if ( $onl[dag] =="dag1" && $onl[bane] =="bane1" && $onl[klokken] =="10:15"  ) {
     
echo "<font color='red'>OPTAGET</font></a>";
echo "<p>";
       
}
       
else {

echo "<font color='green'>LEDIG</font></a>";
echo "<p>";

}   

Der er mere kode, men dette skulle vise hvordan scriptet er opbygget. Problemet er, at hvergang der tilføjes en tid i databasen udskriver den alt igen. Se eksempel på udskrift her:
http://mh-media.dk/testafbooking/test.php

Der er oprettet 2 indlæg i databasen.

Hvorfor gør den det?
Avatar billede nielle Nybegynder
16. august 2005 - 08:35 #1
Hvad mener du præcist med "hvergang der tilføjes en tid i databasen udskriver den alt igen"? Der er ikke noget i den kode du har postet som tilføjer i databasen, og derfor er det jo lidt noget gætværk hvad det er der sker når du tilføjer.

Desuden er den lille stump kode ud har postet ikke komplet, idet du mangler resten at koden i din while-løkke ned til den afsluttende parentes. Den viste kode kan ikke udskrive alt det der er vist på din lille demoside.
Avatar billede hammerhead Nybegynder
16. august 2005 - 11:41 #2
Ok, her er hele koden som henter og viser data fra databasen:
http://mh-media.dk/testafbooking/vis.phps

Tilføj data:
http://mh-media.dk/testafbooking/test_booking_view.php

Det er kun dag 1 og dag 2 samt bane 1 og bane 2 som anvendes på demosiden:
http://mh-media.dk/testafbooking/test.php
Avatar billede hammerhead Nybegynder
16. august 2005 - 11:43 #3
Det fungerer som det er nu (med 1 indlæg), men det går galt på demosiden når der tilføjes endnu et indlæg i databasen.
Avatar billede nielle Nybegynder
16. august 2005 - 12:02 #4
Det er klart nok. Din while løber igennem alle posterne i tabellen og for hvert gennemløb har din 6 if-sætninger. En af dem er denne:

if ($onl[dag] =="dag1" && $onl[bane] =="bane1" && $onl[klokken] =="10:15")
{
    echo "<b>Dag 1 - Bane 1, kl.: 10:15</b><br>";
    echo "<font color='red'>OPTAGET</font></a>";
    echo "<p>";
}
else
{
    echo "<b>Dag 1 - Bane 1, kl.: 10:15</b><br>";
    echo "<font color='green'>LEDIG</font></a>";
    echo "<p>";
}

Hvis posten opfyder den første betingelse så skariver du at banen er OPTAGET. Men hvis posten ikke opfylder betingelserne så skriver du ar den er LEDIG. Men dette betyder at du faktisk også får udskrevet en LEDIG selv om posten slet ikke har noget somhelst at gøre med dag1, bane1 eller 10:15.
Avatar billede hammerhead Nybegynder
16. august 2005 - 12:11 #5
ok, som du kan se af koden, er jeg ikke den store php haj, så hvordan gør jeg det så. Skal der tilføjes noget i mysql_query eller?
Avatar billede nielle Nybegynder
16. august 2005 - 12:16 #6
Så vidt jeg kan se så har du en post i databasen for hver dag/bane/tidspunkt hvor der er en reservation. Det er såmæn fint nok, men problemer er bare at du ikke kan afgøre om et givet dag/bane/tidspunkt er frit før at du har været alle databasens felter igennem. Til at starte med vil jeg derfor anbefale at du har alle de mulige dag/bane/tidspunkt tilstede i tabellen og at d udvider denne med et ekstra felt som jo kunne hedde ”reserveret” og have værdien Ja eller Nej (en boolean-type).
Avatar billede hammerhead Nybegynder
16. august 2005 - 12:24 #7
ok, og så i query tilføje

WHERE reserveret=Ja
Avatar billede nielle Nybegynder
16. august 2005 - 12:34 #8
Nej, træk alle rækkerne ud og test så på værdien af reserveret og skriv OPTAGET eller LEDIG alt efter værdien.
Avatar billede hammerhead Nybegynder
16. august 2005 - 12:38 #9
ok, jeg prøver.
Avatar billede nielle Nybegynder
16. august 2005 - 12:39 #10
Hele koden kunne se sådan her ud:

include "db_info.php";
$test = mysql_query("SELECT * FROM test_booking, ORDER BY dag ASC, ORDER BY klokken ASC, ORDER BY bane ASC");

while ($onl = mysql_fetch_array($test))
{
    echo "<b>" . $onl["dag"] . " - " . $onl["bane"] . ", kl.: " . $onl["klokken"] . "</b><br>";

    if $onl["reserveret"] = "Ja"     
        echo "<font color='red'>OPTAGET</font></a>";
    else
        echo "<font color='green'>LEDIG</font></a>";
}
Avatar billede nielle Nybegynder
16. august 2005 - 12:40 #11
Eller endnu mere kompakt:

include "db_info.php";
$test = mysql_query("SELECT * FROM test_booking, ORDER BY dag ASC, ORDER BY klokken ASC, ORDER BY bane ASC");

while ($onl = mysql_fetch_array($test))
{
    echo "<b>" . $onl["dag"] . " - " . $onl["bane"] . ", kl.: " . $onl["klokken"] . "</b><br>";
    echo ($onl["reserveret"] == "Ja") ? "<font color='red'>OPTAGET</font></a>" : "<font color='green'>LEDIG</font></a>";
}
Avatar billede hammerhead Nybegynder
16. august 2005 - 13:04 #12
Der kommer nogle fejl med din kode. Jeg har forsøgt at rette den til men nu siger den
Parse error: parse error, unexpected T_VARIABLE, expecting '(' in /home/web/gb1925/finalbooking_admin/oversigt.php on line 9

linie 9: if $onl["reserveret"] = "Ja" {

<?
include "db_info.php";
$test = mysql_query("SELECT * FROM test_booking, ORDER BY dag ASC, ORDER BY klokken ASC, ORDER BY bane ASC");

while ($onl = mysql_fetch_array($test)){

echo "<b>" . $onl["dag"] . " - " . $onl["bane"] . ", kl.: " . $onl["klokken"] . "</b><br>";

    if $onl["reserveret"] = "Ja" {     
    echo "<font color='red'>OPTAGET</font></a>";
    }
    else {
    echo "<font color='green'>LEDIG</font></a>";
}
}

?>
Avatar billede nielle Nybegynder
16. august 2005 - 13:16 #13
Der manglede en parentes:

if ($onl["reserveret"] = "Ja")
Avatar billede hammerhead Nybegynder
16. august 2005 - 17:50 #14
så skriver den: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource  på linie 5
Avatar billede nielle Nybegynder
16. august 2005 - 17:52 #15
Der skal fjernes et komma i SQL'en:

$test = mysql_query("SELECT * FROM test_booking ORDER BY dag ASC, ORDER BY klokken ASC, ORDER BY bane ASC");

- ingen alense om hvordan det var kommet med. :^|
Avatar billede hammerhead Nybegynder
16. august 2005 - 18:46 #16
Hej - jeg måtte lave endnu en ændring, da den ikke ville acceptere query´en, så den istedet hedder:
$test = mysql_query("SELECT * FROM test_booking ORDER BY dag ASC, klokken ASC, bane ASC");

Det virker. Tak for hjælpen.
Smid et svar.
Avatar billede nielle Nybegynder
16. august 2005 - 19:03 #17
Ahh ja, det er da også rigtigt :^S

Svar :^)
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