Avatar billede grafik-anders Mester
17. juli 2011 - 01:00 Der er 9 kommentarer og
1 løsning

Jeg kan ikke koble brugernavn og id. Hvad gør jeg?

Hej

Jeg skal have koblet et brugernavn til id'et, som ligger sammen med en kommentar.

Jeg har en database ned alle brugernavne og en med alle kommentarerne - nu skal de kobles, men det giver mig lidt problemer. Jeg forsøger med:

<?=mysql_result(mysql_query("SELECT userName FROM users WHERE id='$comment['commentUserID']'"), 0)?>




//userName = brugernavn fra databasen users
//user = navnet på databasen med brugerne
// id = id-nummeret i databasen users
// $comment['commentUserID'] = Id-nummeret på den bruger, som har afgivet den pågældende kommentar


Som resultat forsøger jeg altså at få brugernavnet på den bruger, som har det samme id-nummer, som id-nummeret tilknyttet kommentaren. Kan man ikke det?
Avatar billede webweaver Praktikant
17. juli 2011 - 03:26 #1
Jo, skulle der ikke være noget i vejen for.
Hvis du har hentet id på kommentar ud i forvejen fra din anden tabel og har det liggende i $comment["commentUserID"] skulle det være fint.

Hvad får du ud, når du prøver at udskrive dit udtræk?
Husk evt. en or die ...
<?php

echo mysql_result(mysql_query("SELECT userName FROM users WHERE id = '$comment[commentUserID]'") or die(mysql_error()),0);

?>
Avatar billede kjeldsted Novice
17. juli 2011 - 09:36 #2
Evt. forsøg dig med:

<?php

echo mysql_result(mysql_query("SELECT userName FROM users WHERE id = '{$comment[commentUserID]}'") or die(mysql_error()),0);

?>
Avatar billede grafik-anders Mester
17. juli 2011 - 11:51 #3
Begge jeres koder giver mig:

Warning: mysql_result() expects parameter 1 to be resource, boolean given in /home/virtual/shape.dk/public_html/test.php on line 208


Det er underligt, for hvis jeg skriver:
<?echo mysql_result(mysql_query("SELECT userName FROM users WHERE id='39'"), 0)?>

Så får jeg ikke en fejl (men jeg opnår jo ikke, det jeg vil). Det er som om, at det er syntaksen, som den er gal med?
Avatar billede webweaver Praktikant
17. juli 2011 - 12:33 #4
Hvis du udskriver $comment["commentUserID"] først før dit SQL statement, hvad indeholder det så?

Ikke at jeg tror det har nogen effekt, men prøv evt. at del det lidt op med variabler.

<?php

$comment = $comment["commentUserID"];

$query = mysql_query("SELECT userName FROM users WHERE id = '$comment'") or die(mysql_error());

echo mysql_result($query,0);

?>
Avatar billede muddi Praktikant
17. juli 2011 - 13:27 #5
Fejlen skyldes, at mysql_result() forventer at første parameter er en resource, men mysql_query() returnerer en boolean.

http://php.net/manual/en/function.mysql-query.php:
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

Så grunden til at du får advarslen skyldes at mysql_query() fejler og derfor returnerer en boolean:
Warning: mysql_result() expects parameter 1 to be resource, boolean given in /home/virtual/shape.dk/public_html/test.php on line 208

Problemet er, at du godt kan bruge en variabel i dobbel-kvoteret streng, men du kan ikke bruge indeks. Jeg tror derfor du skal prøve at bruge webweavers indlæg #4, og flytte din commentUserID over i en anden variabel, men kald den ikke for comment, som webweaver har gjort. Kald den f.eks.

$commentUserID = mysql_real_escape_string($comment['commentUserID']);

På den måde kan du lettere huske hvad det er der refereres til. Husk også mysql_real_escape_string(), så du undgår sql-injection, også selv om input ikke kommer direkte fra brugeren.

/Morten
Avatar billede grafik-anders Mester
17. juli 2011 - 13:52 #6
Tak, - send et svar :)

Det virkede ved at dele det lidt op. Jeg endte med denne her formulering (jeg har omdøbt et par variabler - undskyld, hvis det forvirrer):

<?

$getUsername = $comment["commentUser"];

echo mysql_result(mysql_query("SELECT userName FROM users WHERE id = '$getUsername'"),0);

?>

Der er et par ting, som jeg ikke er helt med på, måske du lige kunne hjælpe med det?

Hvad er forskellen på " og ' ?

Hvordan og hvornår bruger man {} om udtryk? - Kjeldsted havde det med i sit bud

Det giver åbenbart det samme resultat lige meget om man skriver <?echo xxx ?> eller <? = xxx ?> - rigtigt?
Avatar billede muddi Praktikant
17. juli 2011 - 14:32 #7
Forskellen på " og ' er, at du kan bruge variabler inde i strengen, hvis du omgiver den med "", mens strengen udskrives som den er, hvis du bruger '' omkring den.

f.eks.

<?
$str = "world";
echo "hello $str";  // udskriver "hello world"
echo 'hello $str'; // udskriver "hello $str"
?>


<?=$str;?>
er det samme som
<?echo $str;?>
Avatar billede webweaver Praktikant
17. juli 2011 - 15:38 #8
Godt at det virker :-)
Avatar billede kjeldsted Novice
17. juli 2011 - 20:48 #9
Ang. {}

Det bedste er helt at undgå brugen af disse.

Men hvis du fx. har en $_POST[''], $_SESSION[''], $_SERVER[''] el. lign. kan det ske at PHP ikke vil læse indholdet af den.

Altså "Meddelsen er $_POST['meddelse']" vil vist (så vidt jeg husker) kunne bliver til "Meddelsen er",
mens "Meddelsen er {$_POST['meddelse']}" vil blive "Meddelsen er Hello World!".

Don't ask why. Har opdaget det ved erfaring da jeg undrede mig over hvordan jeg kunne få den til at læse netop en $_POST[''].

Men eftersom der er en kæmpe risiko ved ikke at tjekke indholdet af disse inden en MySQL query, er det jo bedst blot at lade være.
Avatar billede grafik-anders Mester
30. juli 2011 - 12:27 #10
også tak til muddi og kjeldsted!
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