26. oktober 2008 - 18:48Der er
32 kommentarer og 1 løsning
Besværlig udskriv
Hej!
Jeg er i gang med at lave en side, hvor brugeren skal have muligheden for at klikke på nogle forskellige links. Men det skal kun være muligt for brugeren at klikke på disse link én gang.
Derfor skal jeg have lavet sådan, at den som udgangspunkt henter alle links hjem til udskriv, men så sorterer i dem, således at brugeren kun kan se, og klikke, på de links brugeren ikke har klikket på før. Jeg har prøvet som herunder, men uden held.
$view = mysql_query("SELECT * FROM brugere WHERE email='$_SESSION[email]'") or die(mysql_error()); $vis = mysql_fetch_assoc($view);
$res = mysql_query("SELECT * FROM links"); $udskriv = mysql_fetch_assoc($res); $tjek = mysql_query("SELECT * FROM klik WHERE brugerid LIKE '$vis[id]' AND linkid LIKE '$udskriv[linkid]'"); $hent = (mysql_num_rows($tjek) == "0"); while ($row = mysql_fetch_array($hent)){
Jeg får fejlen: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource (i while-linien)
Jeg regner med, at det er fordi jeg ikke kan bruge så mange udskriv ting i forbindelse med hinanden, men håber I kan give mig en anden løsning :D
Ved at ændre hent til tjek i while - udskriver den ikke noget. Men der kommer så heller ikke nogen fejlmeddelelse.. Den skal jo ind og tjekke i begge databaser
Nu kan jeg ikke se hvad du udskriver efterfølgende. Men hvis der ikke kommer noget ud, kan det skyldes den ikke finder rækker, der passer til betingelserne.
Den gør nok kun hvad den får besked på. Hvad det så end er. Med andre ord: du har ikke givet os nok oplysninger til at løse dit problem. Yderligere har du ikke svaret på mit allerførste spørgsmål.
Jeg ved faktisk ikke hvorfor jeg bruger LIKE - men er det ikke underordnet i dette tilfælde :D
Jeg har databasen "links" og "klik" I links har jeg gemt de mulige links en bruger kan se. Det er dem jeg gerne vil have udskrevet på siden - men samtidig vil jeg sætte et andet kriterium for, at disse links bliver udskrivet. Brugeren må nemlig ikke have klikket på linket før.
Her kommer databasen "klik" ind i billedet. Det er her jeg jeg gemmer brugerid og linkid i. Altså, hvis jeg nu besøgte link 1 med bruger 1, ville dette blive gemt i den tabel.
Jeg vil så have udskrevet alle links som brugeren IKKE har besøgt. Derfor vil jeg have den til at tælle om linkets id og brugerens id forekommer i en række i "klik" - hvis dette er tilfældet, skal den ikke udskrive pågældende link.
Men vi er vel tilbage ved problemet med data fra links-tabellen, hvordan de bliver behandlet. Du kan vel se at din oprindelige kode ikke klarer det. Og så har du tilføjet noget med en while-løkke. Og det virker ikke. Men hvad laver du egentlig?
$view = mysql_query("SELECT * FROM brugere WHERE email='$_SESSION[email]'") or die(mysql_error()); $vis = mysql_fetch_assoc($view);
?> Du kan klikke på nogle af nedenstående links :D <br><br>
<?
$res = mysql_query("SELECT * FROM links"); while ($udskriv = mysql_fetch_assoc($res)); $tjek = mysql_query("SELECT * FROM klik WHERE brugerid LIKE '$vis[id]' AND linkid LIKE '$udskriv[linkid]'"); $hent = (mysql_num_rows($tjek) == "0"); while ($row = mysql_fetch_array($tjek)){
Jeg er ikke sikker på jeg kan se meningen i din kode, men jeg kan i hvert fald se et sted hvor det muligvis går galt. Denne linie: while ($udskriv = mysql_fetch_assoc($res)); bliver du ved med at udføre indtil $udskriv har værdien false. Den er derfor nu en boolean. I næste linie behandler du så $udskriv som hvis det var et array og i så fald får du bare en tom tekststreng.
Den udskriver stadig bare en blank side... Men i $row springer den jo også bare $hent over - altså når den ikke at få talt forekomsterne inden den bliver udskrevet?? Kan det være fejlen?
Det er korrekt, at du ikke bruger $hent til noget, men derfor kan den vel godt skrive noget ud, hvis der er noget i databasen, der passer på det du spørger om.
fungerer det selvfølgelig helt fint. Den udskriver de to links jeg har lagt ind korrekt.
Det svære her, er at få den til at finde ud af, om brugeren allerede har klikket på linket og i dette tilfælde, ikke udskrive pågældende link.
I min klik tabel har jeg så felterne linkid og brugerid - som den tilføjer når brugeren har klikket på linket. Hvis jeg, brugerid 1, klikker på link 2 vil dette blive gemt i databasen - så det fungerer også fint.
Jeg vil nu have ovenstående til at, først hente alle linksene fra "links" og derefter kun udskrive de links hvor brugerid og linkid allerede findes i en række i "klik"
Sikkert noget i retning af: $resultklik = mysql_query("SELECT * FROM klik WHERE linkid = '$linkid' AND brugerid = '$brugerid'"); if (mysql_num_rows($resultklik) == 0) { // udskriv link }
$linkid og $brugerid skal naturligvis udskiftes med hvad du har kaldt disse variable.
Hvor meget er du villig til at omstrukturere? Jeg ville for eksempel nok droppe 'klik'-tabellen og i stedet tilføje et felt i tabellen 'brugere' der indeholder en kommasepereret liste af de links brugeren har besøgt.
Må hellere få lukket tråden. Jeg undskylder og takker for Jeres tid
Synes godt om
Ny brugerNybegynder
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.