Avatar billede human Nybegynder
26. april 2004 - 23:05 Der er 17 kommentarer og
1 løsning

Problem med id variabel

Heysa!

Problemet er, at når man trykker på Åben så åbner den godt nok første gang man trykker. Men gør man det mere end engang, bliver den bare ved med at åbne det samme id. En der har en idé om hvorfor?

$Bruger = $_GET['Bruger'];
$SBruger = $_SESSION['username'];
if(isset($Bruger) && $Bruger == $SBruger) {
print "Indbakke:<hr>";
$post_query = mysql_query("SELECT * FROM du_bruger_post WHERE til='$Bruger' ORDER BY tid DESC");
while($post_row = mysql_fetch_array($post_query)) {
$post_row['post'] = nl2br($post_row['post']);
$id = $post_row['id'];

print "
<table border='1' cellpadding='0' cellspacing='0' width='100%'>
<tr>
<td width='33%'>
Fra: <a href='$DOC_ROOT/beta/profil.php?Bruger=$post_row[fra]'>".$post_row['fra']."</a><br />
</td>
<td width='33%'>
Sendt: ".date("H:i:s", strtotime($post_row[tid]))." ".date("d/m/Y", strtotime($post_row[tid]))."<br />
</td>
<td width='33%'>
<a href='$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger&open=$id'>Åben</a>
</td>
</tr>
</table>
";
}
if(isset($_GET['open']) && $_GET['open'] = '$id') {
print "<br />
<a href='$DOC_ROOT/beta/profil.php?Bruger=$fra'>$fra</a> skrev:<br />
$post
";
}
}else{
print "Du har ikke ret til at se denne indbakke.";
Avatar billede human Nybegynder
26. april 2004 - 23:05 #1
Og hvis du ved hvorfor, må du gerne fortælle hvordan jeg retter det :)
Avatar billede dennismp Nybegynder
26. april 2004 - 23:09 #2
skal denne linje
<a href='$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger&open=$id'>Åben</a>
ikke være
<a href='$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger&open=$_POST['id']}'>Åben</a>

(faktisk bør du bruge <a href=", jeg tror ikke at <a href=' er lovlig html.. Men det er en anden sag)
Avatar billede jakoba Nybegynder
26. april 2004 - 23:18 #3
>>dennismp  html er helt ligeglad med on du skriver ' eller " omkring attributværdierne.

>>human    id værdien i dit link bliver fastlagt npr du sender siden med det link til brovseren.
    <a href='$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger&open=$id'>Åben</a>
kik is 'vis kilde'. du kan trykke på det link så tit du vil, det er altid det id der er skrevet i kildekoden der bliver brugt. siden skal reloades for der kan komme til at stå en ny id værdi i det link.
    eller du kan evt ændre id værdien med javascript. men så kommer du til at formulere nogen regler om hvordan den skal ændres.

mvh JakobA
Avatar billede human Nybegynder
26. april 2004 - 23:46 #4
dennismp:
Tror du har fat i noget af det rigtige.. Men får syntax error hvis jeg bruger det link istedet.
Skal det ik, se således ud:
<a href='$DOC_ROOT/deunge/beta/postindbakke.php?Bruger=$Bruger&open=".$_POST['id']."'>Åben</a>

Men det id, som skal i linket, får jeg jo fra udtræk fra db'en. Bruger jeg overstående link sendes id'et ikke. open=.
Avatar billede human Nybegynder
26. april 2004 - 23:49 #5
jakoba: Jeg kan da se at værdierne ændrede sig efter hvordan jeg kørte ned over de forskellige links. Så de må da ændre sig. Husk nu på det sidder i en while-løkke.
Avatar billede dennismp Nybegynder
26. april 2004 - 23:59 #6
human: det tror jeg ikke :-)
jacoba: Jeg tænkte mere i retning af hvad html-standarden siger. Ved godt at de fleste browser viser det fint.

human:

if(isset($_GET['open']) && $_GET['open'] = '$id') {

Har du ikke glemt et = ? :) altså

if(isset($_GET['open']) && $_GET['open'] == '$id') {
Avatar billede human Nybegynder
27. april 2004 - 00:05 #7
Hmm.. Den burde være ligeglad med om der er et eller 2 =.

Bruger jeg dit link får jeg:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in.

Men hvis jeg bare siger $_POST['id'], hvor ved den så fra hvilket id den skal tage? Det skal jo være det id, som bliver trukket ud med bl.a. tid.
Avatar billede dennismp Nybegynder
27. april 2004 - 00:22 #8
Jeg er ved at være træt.. Jeg har justeret lidt på dit script - sprøg endelig hvis der er ting der er mystiske..

<?php
$Bruger = $_GET['Bruger'];
$SBruger = $_SESSION['username'];
$post = '';
$post_fra = '';
$post_fra_url = '';

if(isset($Bruger) && $Bruger == $SBruger) {
  print "Indbakke:<hr>";
  $post_query = mysql_query("SELECT * FROM du_bruger_post WHERE til='$Bruger' ORDER BY tid DESC") or die(mysql_error());
  while($post_row = mysql_fetch_array($post_query)) {
    $id = $post_row['id'];
    $fra_url = urlencode($post_row['fra']);
    $fra = $post_row['fra'];
    $sendt = date("H:i:s d/m/Y", strtotime($post_row[tid]));
    $Bruger_url = urlencode($Bruger);

    if(isset($_GET['open']) && $_GET['open'] == $id) {
      // Gem data, så vi kan vise det, når vi er færdig med while()..
      $post = nl2br($post_row['post']);
      $post_fra = $fra;
      $post_fra_url = $fra_url;
    }

print <<<EOF
<table border="1" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="33%">
Fra: <a href="$DOC_ROOT/beta/profil.php?Bruger=$fra_url">$fra</a><br />
</td>
<td width='33%'>
Sendt: $sendt<br />
</td>
<td width='33%'>
<a href="$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger_url&open=$id">Åben</a>
</td>
</tr>
</table>
EOF;
}

if(!empty($post)) {
  print <<<EOF
<br />
<a href="$DOC_ROOT/beta/profil.php?Bruger=$post_fra_url">$post_fra</a> skrev:<br />$post
EOF;
}
?>

.. så må vi se om det overhovedet virker :-)
Avatar billede human Nybegynder
27. april 2004 - 00:41 #9
Alt for herligt det der dennismp :)
Virker fuldstændig som jeg ville have det.

Jeg har et par spørgsmål:
Hvorfor starter du med at sætte disse til ingenting:
$post = '';
$post_fra = '';
$post_fra_url = '';

Hvad er:
$Bruger_url = urlencode($Bruger);

Smid et svar :)
Avatar billede human Nybegynder
27. april 2004 - 00:45 #10
Nå ja.. Det burde ikke være et problem, at smide en mere:
if(!empty($post)) {
  print <<<EOF
<br />
Et-eller-andet.
EOF;
}

nedenunder den anden, og bare lavet et link mere, fx til en slet funktion.
Avatar billede dennismp Nybegynder
27. april 2004 - 00:49 #11
>> Hvorfor starter du med at sætte disse til ingenting:

(God) vane :-). Når jeg koder sætter jeg error-reporting til all. Dvs at den brokker sig hvis jeg bruger ikke-initialiseret variabler (hvilket kan være rart hvis man leder efter fx. man har stavet et variablenavn forkert). Så det er for at jeg er sikker på hvad $post indeholder, selvom den ikke finder den mail-id der matcher den ønskede.  En anden årsag er, at jeg ikke kan lide når variabler "pludselig" bliver brugt, uden at man kan se (nemt) hvor den kommer fra.

Nu ved jeg ikke om dine brugernavne har specialkarakter.. Men antog det. fx. Hvis jeg har en bruger der hedder "dennis&marianne" .. så vil du få en url der hedder profil.php?Bruger=dennis&marianne .. (så $_GET['Bruger'] indeholder kun "dennis" nu) .. For at undgå dette, url-encoder man, så "special-tegn" bliver lavet om til %<hexværdi> og så er du ude om den slags problemer.
Avatar billede human Nybegynder
27. april 2004 - 00:55 #12
Smart.. Rigtig smart :)

Kan man fint gøre det jeg spurgte om 2. gang, synes ikke lige jeg kan se om man kan.
Avatar billede dennismp Nybegynder
27. april 2004 - 00:59 #13
Jeg er ikke helt med..
Avatar billede human Nybegynder
27. april 2004 - 01:02 #14
Okay.. Lad os sige jeg vil have et slet link ved siden af Åben.
Når der trykkes der, skal den køre engang query som sletter det valgte id.
Jeg kan sagtens lave den query, kan bare ikke se hvad den skal når man trykker på "slet" linket, eller hvordan jeg får det korrekte id, sat ind i queryen, altså hvilken var det er.
Avatar billede dennismp Nybegynder
27. april 2004 - 01:16 #15
Lav et link som dette:
<a href="$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger_url&open=$id">Åben</a>
fx:
<a href="$DOC_ROOT/beta/postindbakke.php?Bruger=$Bruger_url&delete=$id">Delete</a>

efter denne linje:
if(isset($Bruger) && $Bruger == $SBruger) {
tilføjer vi:
if( isset($_GET['delete']) ) {
  $id = intval($_GET['delete']);  // intval sikre at det er kun et tal.
  $sql = "DELETE FROM du_bruger_post WHERE id = '$id'";
  mysql_query($sql) or die($mysql_error());
  echo "Besked slettet.";
}
Avatar billede human Nybegynder
27. april 2004 - 02:24 #16
Mange tak! Så virker tingene sgu igen :)

btw.. Det jakoba skrev.. Er det ham der har misforstået scriptet, eller er det noget jeg skal tage højde for? For mig lyder det som noget der ik rigtig har noget med det her at gøre.

Men tak igen! :)
Avatar billede jakoba Nybegynder
27. april 2004 - 07:40 #17
Det var vist mig der misforstod. Jeg toriede siden lå fast i broveren mens du 'åbnede' i en popop igen og igen. Men det er ikke tilfældet.
Avatar billede human Nybegynder
27. april 2004 - 08:25 #18
Oki.. Så fik vi det på plads :)
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