Avatar billede Slettet bruger
26. juli 2008 - 02:10 Der er 17 kommentarer og
1 løsning

While loop

Hej eksperter jeg ved at drive mig selv til vanvid med et stykke kode som jeg bare ikke kan få til at virke.

Der kommer ikke nogen fejlmeddelse. Men problemet et jeg ikke kan få den til udskrive noget inde i while loopet, hverken før eller efter min "if og else"

function skema ($felt){
    $skema_mysql = "SELECT * FROM reservation WHERE skema_felt = '".$felt."' AND uge = '".$_GET['uge']."' AND lokale_id = '".$_GET['lokale_id_active']."'";

    $skema_query = mysql_query($skema_mysql) or die("Forespørgslen lykkedes ikke: " . mysql_error());

    while($skema_row = mysql_fetch_row($skema_query)){


// Uanset hvad for noget kode jeg sætter ind her bliver det ikke kørt, så vidt jeg kan se. Der hvor funktionen bliver kaldt udskriver den ihvertfald ikke noget


        if ($skema_row['lokale_id'] == ""){
            //Lokalet er ledigt
            echo '<a href="blabla.php">blaa'.$felt.'</a>';
        }
        else {
            //lokalet er optaget
            echo '<b>Optaget</b>';
            echo $skema_row['id'];
            echo $skema_row['lokale_id'];
            echo $skema_row['teacher_id'];
            echo $skema_row['klasse_id'];
            echo $felt;
        }
    }
//skriver jeg noget kode her udenfor while loppets rammer ( { } ) og sætter det her bliver det udskrevet som det skal
}

Håber jeg har fået udtrykt mig tydligt, og beklager de stavefejl som jeg ved der er - er lidt søvnig :)
Avatar billede al_dair Nybegynder
26. juli 2008 - 07:02 #1
Jeg mistænker at din forespørgsel ikke returnerer noget resultat (du kommer ikke i while-løkken i det tilfælde).
Prøv at udskrive variablen "$skema_mysql", copy/paste direkte i din MySQL (query) og se hvad den spytter ud..
Avatar billede expnet Seniormester
26. juli 2008 - 10:38 #2
Det er fordi du skal havde den GET med ind i funktion da den ikke er med kan den ikke finde noget i db'en ud fra at du har sat din sql string sådan her.:

$skema_mysql = "SELECT * FROM reservation WHERE skema_felt = '".$felt."' AND uge = '".$_GET['uge']."' AND lokale_id = '".$_GET['lokale_id_active']."'";
Avatar billede expnet Seniormester
26. juli 2008 - 10:48 #3
function skema ($felt,&$_GET){
$skema_mysql = "SELECT * FROM reservation WHERE skema_felt = '".$felt."' AND uge = '".$_GET['uge']."' AND lokale_id = '".$_GET['lokale_id_active']."'";
$skema_query = mysql_query($skema_mysql) or die("Foresp&oslash;rgslen lykkedes ikke: " . mysql_error());
    while($skema_row = mysql_fetch_row($skema_query)){
        if ($skema_row['lokale_id'] == ""){
            echo '<a href="blabla.php">blaa'.$felt.'</a>';
        } else {
            echo '<b>Optaget</b>';
            echo $skema_row['id'];
            echo $skema_row['lokale_id'];
            echo $skema_row['teacher_id'];
            echo $skema_row['klasse_id'];
            echo $felt;
        }
    }
}
Avatar billede coderdk Praktikant
26. juli 2008 - 13:25 #4
$_GET er superglobal, den er tilgængelig alle steder fra.

Prøv:

echo $skema_mysql;

lige efter du har sat den og efter query:

echo "Antal records fundet: " . mysql_num_rows( $skema_query );
Avatar billede kjeldsted Novice
26. juli 2008 - 14:06 #5
Hvorfor bruger du mysql_fetch_row og ikke mysql_fetch_array...?

Hvis du bruger $skema_row=mysql_fetch_row vil resultaterne ligge gemt under $skema_row[0],$skema_row[1] osv. mens hvis du bruge mysql_fetch_array vil du kunne skriver $skema_row['id'] som du gør...
Avatar billede expnet Seniormester
26. juli 2008 - 16:05 #6
coderdk -> okay så læreret men noget nyt idag :D)
Avatar billede coderdk Praktikant
26. juli 2008 - 16:30 #7
kjeldsted, Hvorfor så bruge _array i stedet for _assoc? Med _array kommer både 0 og 'id' ud - med _assoc kommer kun 'id' ;)
Avatar billede kjeldsted Novice
26. juli 2008 - 17:38 #8
Så brug _assoc... Men det er da klart at der ikke bliver udskrevet noget ved brug af _row og echo $skema_row['id'];.. Så skal det jo være echo $skema_row[0];
Avatar billede Slettet bruger
26. juli 2008 - 17:50 #9
function skema ($felt,&$lokale_id_active,&$uge_active){

det lykkedes at få det til at spille ved at sætte $_GET variblerne ind der hvor funktionen bliver kaldt, og ændre det fra row til array

synes ikke det giver den store mening oppe i mit hoved at den skal have $_GET ind i funktionen på den måde, men bare det virker så er jeg glad :)

Har haft prøvet at udskrive $skema_mysql og så kører det inde i min database manuelt og der kunne den godt finde dataen.  Altså der var ikke fejl i $skema_mysql

Men i skal have tak for hjælpen alle sammen :)

ved ikke helt hvem pointene tilhører da det var lidt et resultat af alle jeres kommentarer :)
Avatar billede kjeldsted Novice
26. juli 2008 - 18:01 #10
Så kan du vel dele dem til de du synes der fortjener ;-)
Avatar billede kjeldsted Novice
26. juli 2008 - 18:05 #11
Desuden så husker du vel at validere dine inputs så ikke der er en tosse der kommer og "leger" med din DB med SQL injection....?
Avatar billede olebole Juniormester
26. juli 2008 - 18:11 #12
<ole>

ringler >> Det lader til, du overså kommentaren (26/07-2008 16:30:18). Den er ellers ret god: Brug mysql_fetch_assoc istedet for mysql_fetch_array, hvis du kun har brug for det associative array  ;o)

Bruger du PHP5, burde du nok slet ikke anvende nogen af dem, men i stedet kikke på 'mysqli':
    http://dk2.php.net/manual/en/book.mysqli.php

- i begyndelsen kan dette link give mange gode info:
    http://dk2.php.net/manual/en/mysqli.prepare.php

/mvh
</bole>
Avatar billede Slettet bruger
26. juli 2008 - 18:12 #13
Ikke endnu men jo har tænkt på det, du kender vel evt ikke en god guide til hvordan jeg kan tjekke en varibel for mysql injection?
Avatar billede Slettet bruger
26. juli 2008 - 18:23 #14
Olebole ->
hvorfor er det bedre at bruge assoc i stedet for array?

jeg mener hvis begge funktioner giver samme resultat


fatter intet af mysqli og koden skal helst også være kompatibel med lidt ældre versioner af php end 5

men hvis du kender en dansk guide til mysqli må du gerne poste, ( er ikke så god til at lære på engelsk da jeg ikke er en haj til de lidt mere avancerede ord)
Avatar billede olebole Juniormester
26. juli 2008 - 18:30 #15
Jamen, pointen er jo netop, at de ikke gør det samme  =)
    http://dk.php.net/manual/en/function.mysql-fetch-array.php
    http://dk.php.net/manual/en/function.mysql-fetch-assoc.php

Den første returnerer både at talindekseret array og et associativt.
Den sidste returnerer kun det associative array.
Du tager formodentlig ikke både bade- og skitøj med til Ibiza, men kun det, du har brug for - så deeeeeet .....  ;o)

Det er ganske omfattende at gardere sig mod sql-injection. Det kræver, du er væsentligt bedre til PHP/MySQL end de, du vil sikre dig imod. Derfor er mysqli helt klart vejen frem.

Engelsk er grundlaget for al programmering. At være god til engelsk, når man programmerer, er ligeså vigtigt som at kunne russisk, hvis man vil læse russisk idéhistorie!
Avatar billede Slettet bruger
26. juli 2008 - 19:04 #16
well med min nyerhvervede viden skal jeg da til at tilrette alle mine dokumenter fra array til assoc :) da jeg altid nøjes med det associative array.

Vil tage et nærmere kig op mysqli men i mit nuværende projekt må jeg nøjes med "old shool" måden da som sagt skal kunne køre med ældre versioner af php end 5,

medmindre det er muligt at tjekke, hvad php version man bruger ( med php kode )
Avatar billede coderdk Praktikant
28. juli 2008 - 10:00 #17
Jada :)

if ( version_compare( PHP_VERSION, '5.0.0', '<' ) )
{
  echo "PHP ældre end 5 :(";
}
Avatar billede Slettet bruger
28. juli 2008 - 15:33 #18
nice takker :)
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