Avatar billede markus-king Nybegynder
26. maj 2011 - 13:41 Der er 5 kommentarer og
2 løsninger

Function(); under while();

Hey,

Jeg har et problem med et ellers meget simpelt PHP spørgsmål. Jeg kører en while();, der udskriver nogle links. Disse links har en "onclick", som kører en function();, der er inkluderet i toppen af dokumentet.

Funktionen opdaterer enkelt nok en række i databasen ud fra id-et på de links jeg har. Alligevel opdateres intet fra databasen, selvom jeg er rimelig sikker på, at navne og række stemmer overens.

Koden (uddrag):

function downloads($num)
{
$mere = $row[dls] + 1;
mysql_query("UPDATE dm_titles SET dls='$mere' WHERE id='$num'") or die(mysql_error());
}


$sql = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT 5") or die(mysql_error());
while($row = mysql_fetch_array($sql))
{
[...]

echo "<a href=\"link.php\" onclick=\"downloads('$row[id]')\">Download</a> ($row[dls])";
}

Umiddelbart tror jeg det skyldes, at funktionen ikke fungerer grundet while'ens variabler (da functionen er inkluderet i toppen af dokumentet, men ikke under while'en). Har leget lidt med det, men uden held.

Håber en af jer kan hjælpe, jeg må ved at blive for gammel ikke at kunne finde fejlen.

Tak.
26. maj 2011 - 14:16 #1
Det eneste funktionen kender er $row[id]id nummeret, som du giver funktionen i $num.  Hvis den skal goere noget ved $row[dls] skal du ogsaa sendenden den til funktionen.  Altsaa noget i retning af (ikke testet):

function downloads($num, $mere)
{
  $mere = $mere + 1
  mysql_query("UPDATE dm_titles SET dls='$mere' WHERE id='$num'") or die(mysql_error());
}

$sql = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT 5") or die(mysql_error());
while($row = mysql_fetch_array($sql))
{
[...]

echo "<a href=\"link.php\" onclick=\"downloads('$row[id], $row[dls]')\">Download</a> ($row[dls])";
}
Avatar billede heinzdmx Nybegynder
26. maj 2011 - 14:35 #2
Javascript er klient side, PHP er server side.

Du kan ikke kalde en PHP funktion fra Javascript direkte.

Derfor vil

<a onlick="downloads()"> ikke kalde din PHP funktion, den vil kalde Javascript funktionen.
Avatar billede markus-king Nybegynder
26. maj 2011 - 14:39 #3
Tak for svar.

Christian--> Det fungerede ikke.

Heinz--> Det forklarer nok en del. Kan du se en metode til at få opdateret $row[dls] uden at oprette en side scriptet kører igennem først?

:)
Avatar billede heinzdmx Nybegynder
26. maj 2011 - 14:46 #4
Der er 2 muligheder

- Du skal hente en ny side hver gang værdierne skal ændres (ligesom når du lægger et nyt indlæg på Eksperten så opdateres siden)

eller

- Du laver et AJAX kald (du henter en side fra serveren uden at siden opdateres)



Her vil det nok være ajax metoden der er mest egnet.

I korte træk går ajax ud på at du via javascript beder serveren om at sende en af dens sider til dig, uden at siden opdateres, herefter kan du bruge javascript til at gøre hvad du vil, f.eks. sætte en div's indhold til indholdet som serveren returnede.
Avatar billede markus-king Nybegynder
26. maj 2011 - 15:27 #5
Hmm, tror også det bliver Ajax jeg vil bruge.

Tak for hjælpen, post gerne et svar begge to.
Avatar billede heinzdmx Nybegynder
26. maj 2011 - 16:05 #6
Svar her

Hvad jeg selv ville gøre var at bruge jQuery - et hjælpebibliotek der gør det nemmere at skrive javascript.

Så vil du kunne gøre det ala

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});


Dette vil hente indholdet af test.html og lægge det som resultatet i det første element der har klassen result.

http://api.jquery.com/jQuery.ajax/
26. maj 2011 - 16:23 #7
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
Kurser inden for grundlæggende programmering

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