Avatar billede LilleUdvikler Nybegynder
17. august 2011 - 20:12 Der er 7 kommentarer og
1 løsning

COUNT problemer.

Hejsa.

Jeg skal have en COUNT til, at "tælle" om personen er venner med person2 i forvejen. For så skal den self. ikke kunne tilføje person2 igen.

Jeg kan pt. godt få den til, at "tælle", men det er som om den ikke gør som jeg vil have den til. Og måske er det helt forkert det jeg gør. Men jeg kan tilføje en person, også prøve at tilføje en helt anden - hvor den så siger, at jeg allerede er venner med den person.

- Jeg tror det er fordi den tæller hvor mange gange "ven_til_id" er i tabellen, og derfor fungere rdet self ikke.

- Kan jeg overhovedet bruge COUNT funktionen til dette?

$num = 1;
                if(isset($_GET['add_friend'])){
                    $check="SELECT username, COUNT(*) AS num FROM friends WHERE ven_til_id=$ven_til_id"or die(mysql_error());
                    $result=mysql_query($check);
                        if(!$result){
                            echo "Cant run query.";
                        } else {
                            $row = mysql_fetch_row($result);
                            $num = $row[1];
                        }
                        if($num>0){
                            $errMsg = "I er allerede venner.";
                    } else {
                    $sql=mysql_query("INSERT INTO friends (username,ven_til_id)VALUES('$username', '$ven_til_id')")or die(mysql_error());
                    header("Location: /profil/$username");
                    }
                }
Avatar billede majbom Novice
17. august 2011 - 21:31 #1
hvordan ser din tabel ud?
Avatar billede LilleUdvikler Nybegynder
17. august 2011 - 21:35 #2
id, username, ven_til_id.

Username er personen man vil adde som ven.
ven_til_id - er id på den person som PRØVER at adde username.
Avatar billede majbom Novice
17. august 2011 - 21:42 #3
du er jo nødt til at have både username og ven_til_id med i din where-clause, ellers henter den alle records hvor username er det man vil tilføje, uanset om det er en man selv er ven med eller en anden person...

men er der nogen grund til at du ikke bruger et id i begge kolonner?
17. august 2011 - 21:56 #4
Din kode er ikke nem for mig at følge.  Du vil, antager jeg, undersøge om en bestemt bruger allerede har en anden bruger som ven.  Hvis nej, så registreres den anden som ven af den første bruger.  Ellers afvises det at registrere en ny ven.  Du skal i så fald bruge to variable i din mysql forespørgsel, $username og $ven_til_id.  For eksempel:

$result = mysql_query("SELECT * FROM friends WHERE username = $username AND ven_til_ven = $ven_til_ven");

$username og $ven_til_ven kommer velsagtens fra en formular, hvor en bestemt bruger prøver at registrere en ny ven.  Så den kode du viser må vel skulle begynde noget i retning af dette:

if(isset($_GET['add_friend']))
{
  $username = $_GET['username'];
  $add_friend = $GET ['add_friend'];
  $result = mysql_query("SELECT * FROM friends WHERE username = '$username' AND ven_til_ven = '$ven_til_ven'");
}

Hvis denne forespørgsel giver resultat, altså har mindst en række, skal der ikke laves en ny ven, ellers skal den nye ven registreres.  php har en funktion 'mysql_num_rows', der tæller hvor mange rækker der er i resultatet.  Så skal det huskes på at i php er FALSE = 0 og TRUE er et tal større end nul.  Det kan du bruge således:

if(isset($_GET['add_friend']))
{
  $username = $_GET['username'];
  $add_friend = $GET ['add_friend'];
  if(mysql_num_rows(mysql_query("SELECT * FROM friends WHERE username = $username AND ven_til_ven = $ven_til_ven"))) echo "I er allerede venner";
  else mysql_query("INSERT INTO friends(username, ven_til_id) VALUES('$username', '$ven_til_ven')");
}
17. august 2011 - 21:58 #5
Jeg ser, at splazz var inde et par gange mens jeg arbejdede med mit indlæg, men jeg tror ikke vi er uenige.
Avatar billede LilleUdvikler Nybegynder
17. august 2011 - 22:11 #6
Jeg har fixet mit problem sammen med en fra StackOverflow. Så det er perfekt. Jeg lukker her. Tak for det i fik skrevet. Har ikke lige holdt øje med Eksperten.dk pga. 1 times lang chat med Basiclife, som hjalp mig.
Avatar billede majbom Novice
18. august 2011 - 07:34 #7
husk at smid løsningen herind, så andre måske kan få glæde af den :)
Avatar billede LilleUdvikler Nybegynder
18. august 2011 - 08:41 #8
<?php
               
                $username = mysql_escape_string($_GET[user]);
                $ven_til_id = $_SESSION['userID'];

                $num = 1;
                if(isset($_GET['add_friend'])){
                    $sql = "SELECT 1 FROM friends WHERE username='$username' AND ven_til_id=$ven_til_id";
                    $result=mysql_query($sql);
                if(!$result){
                    echo "Cant run query.<br/>";
                } else {
                    $num = mysql_num_rows($result);
                }
                if($num>0){
                    header("Location: /profil/$username?add_error");
                } elseif($username == $_SESSION['username']){
                    header("Location: /profil/$username?add_self_error");
                } else {
                    $sql=mysql_query("INSERT INTO friends (username,ven_til_id)VALUES('$username', '$ven_til_id')")or die(mysql_error());
                    header("Location: /profil/$username");
                    }
                }
                ?>

Løsningen blev simpel - men god. Og den ser sådan her ud :)
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