Avatar billede michaeltryl Seniormester
03. december 2008 - 21:49 Der er 9 kommentarer og
1 løsning

select where ikke i array

Jeg har forsøgt med denne sætning

$hent = mysql_query("SELECT user, msg, DATE_FORMAT(time, '%H:%i') AS tid FROM chat_msg WHERE user NOT IN ('".implode(',', $_SESSION['ig_bruger'])."') ORDER BY msg_id DESC LIMIT 15") or die(mysql_error());

men den virker ikke

meningen er at der skal hentes alle beskeder hvor user ikke er i array $ig_bruger.
med ovenståedne sætninger kommer der ingen fejl, men den henter alle beskeder fra tabellen selvom der er et navn i array.

Jeg gemmer brugere i array på en anden side sådan

$_SESSION['ig_bruger'] []= $brugeren;
hvor $brugeren er det navn som skal tilføjes array.

er her en som kan hjælpe?
Avatar billede erikjacobsen Ekspert
03. december 2008 - 21:55 #1
Så vidt jeg kan se får du en SQL-sætning på formen:  SELECT ... NOT IN ('hans,grete,kurt') ...

Det skal nok være:  SELECT ... NOT IN ('hans','grete','kurt') ...
Avatar billede michaeltryl Seniormester
03. december 2008 - 22:11 #2
hvordan vil du gøre det?
jeg har prøvet med nogle kombinationer bla.
NOT IN ('".implode(',', ".$_SESSION['ig_bruger'].")."') ORDER
NOT IN ('".implode(',',' $_SESSION['ig_bruger']')."') ORDER
men disse giver fejl.
Avatar billede erikjacobsen Ekspert
03. december 2008 - 22:17 #3
Nåh, du skal bare

....('".implode("','", $_SESSION['ig_bruger'])."'). ....
Avatar billede erikjacobsen Ekspert
03. december 2008 - 22:18 #4
Dvs.: Så vil det virke, men det kan være farligt, med mulighed for SQL-injection, hvis brugernavnene indeholder SQL-giftige tegn.
Avatar billede michaeltryl Seniormester
03. december 2008 - 22:31 #5
Det virker perfekt.
mange tak for hjælpen.

brugernavnet kan kun indeholde A-Z og 1-9 - og _
derudover bruger jeg mysql_real_escape_string alle steder hvor der er bruger input.

Hvis du vil have point så bare læge et svar.
Avatar billede erikjacobsen Ekspert
03. december 2008 - 22:32 #6
Der er bedre måder ... men det må vi komme til en anden gang.

Jeg samler slet ikke på point, tak. Svar selv, accepter dit eget svar.
Avatar billede michaeltryl Seniormester
03. december 2008 - 22:35 #7
okay så lukker jeg her
Avatar billede olebole Juniormester
04. december 2008 - 22:20 #8
<ole>

Brug mysqli i stedet:
    http://dk2.php.net/manual/en/book.mysqli.php

Kik evt. lidt eksempler her:
    http://dk2.php.net/manual/en/mysqli.prepare.php

/mvh
</bole>
Avatar billede michaeltryl Seniormester
04. december 2008 - 23:06 #9
ok der er lidt læsestof, som jeg vil kigge på lidt senere.

Har jeg ret i at jeg skal lave min connect og query om til noget ligende
mysqli_connect("****", "****", "****", "****");
result = $mysqli->query("SELECT city FROM state WHERE state=’AL’")
samt alle steder hvor der er bruger input skal der laves noget om, som jeg finder når jeg kommer igennem
http://dk2.php.net/manual/en/book.mysqli.php
Avatar billede olebole Juniormester
04. december 2008 - 23:10 #10
Nej, men der er et fint eksempel under 'prepare'. Der er faktisk en del forskelle:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$city = "Amersfoort";

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $city);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($district);

    /* fetch value */
    $stmt->fetch();

    printf("%s is in district %s\n", $city, $district);

    /* close statement */
    $stmt->close();
}

/* close connection */
$mysqli->close();
?>
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