Avatar billede jacobs1 Nybegynder
24. august 2006 - 09:56 Der er 15 kommentarer og
1 løsning

mySql id=Array

Hej Jeg har fundet dette script på nettet, men jeg kan ikke få det til at virke ordenligt. Er der nogle der har en idé hvorfor.

I scriptet jeg fandt var det ikke id'et man SELECT efter(altså ikke tal værdier i arrayet) men er det ikke lige meget?


<?php

$db=mysql_connect("localhost", "root", "heyhey");
mysql_select_db("heyhey", $db);
$forbudteordarray = array('21','24','25');
/*her flader vi arrayet ovenover ud, og laver den om til noget som
kan bruges i en MySQL forespørgsel*/
$flad = " %" . implode("% OR %", $forbudteordarray) . "% ";
/*ovenstående skulle tilføje % i hver ende af hvert ord
og OR in mellem hver af ordene.*/
echo $flad."<br>";
//forespørgsel med vores flade array
$query = mysql_query("SELECT * FROM firmaer WHERE id= '$flad'") or die (mysql_error());

//echo $query;
while($row = mysql_fetch_array($query)) {
//vis hvad der skal vises
echo $row['Navn']."d<br>";
//...osv
}
?>
Avatar billede nielle Nybegynder
24. august 2006 - 10:10 #1
Tja, den laver i hvert fald en ulovlig SQL-sætning. Det er jo nok grunden. :^)

Jeg undre mig lidt over hvad variablen $forbudteordarray handler om? Navnet på den virker lidt som om at det slet ikke har noget at gøre med sammenhængen ... som om at det er to løsninger på forskellige typer af problemer som er blevet blandet sammen?

Anyways, prøv dette i stedet:

<?php
$db = mysql_connect("localhost", "root", "heyhey");
mysql_select_db("heyhey", $db);

$forbudteordarray = array('21','24','25');
$query = mysql_query("SELECT * FROM firmaer WHERE id IN (" . implode(",", $forbudteordarray) . ")") or die (mysql_error());

while ($row = mysql_fetch_array($query))
{
    //vis hvad der skal vises
    echo $row['Navn']."d<br>";
    //...osv
}
?>
Avatar billede jacobs1 Nybegynder
24. august 2006 - 10:18 #2
ha Det virker mange tak - husk at læg et svar :)
Avatar billede nielle Nybegynder
24. august 2006 - 10:18 #3
Svar :^)
Avatar billede nielle Nybegynder
24. august 2006 - 10:20 #4
Jeg formoder at du får værdierne i dit array et eller andet sted fra? For ellers kunne du jo bare indsætte dem direkte i SQL-sætningen i stedet:

Anyways, prøv dette i stedet:

<?php
$db = mysql_connect("localhost", "root", "heyhey");
mysql_select_db("heyhey", $db);

$query = mysql_query("SELECT * FROM firmaer WHERE id IN (21,24,25)") or die (mysql_error());

while ($row = mysql_fetch_array($query))
{
    //vis hvad der skal vises
    echo $row['Navn']."d<br>";
    //...osv
}
?>
Avatar billede jacobs1 Nybegynder
24. august 2006 - 10:51 #5
ja jeg få det fra et url REQUEST :)

$forbudteordarray =$_REQUEST['array'];

Endnu engang tak for hjælpen - her er dine point :)
Avatar billede nielle Nybegynder
24. august 2006 - 10:56 #6
Du bør bruge $_POST eller $_GET i stedet for $_REQUEST.
Avatar billede jacobs1 Nybegynder
24. august 2006 - 11:08 #7
okay hvorfor ? det må så være GET i mit tilfælde :)
Avatar billede jacobs1 Nybegynder
24. august 2006 - 11:12 #8
hvis man gerne vil have mere med i sql søgningen - skriver man det så dådan her?
$query = mysql_query("SELECT * FROM firmaer WHERE id IN (" . implode(",", $forbudteordarray) . ")AND Navn='$butik' ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());
Avatar billede nielle Nybegynder
24. august 2006 - 11:16 #9
Hvis man bruger $REQUEST så ved man i realiteten ikke om idndata kommer fra en form eller som en del at et url. Dermed åbnere man endnu en mulig angrebs-vej for en eventuel hacker.

Hvis du ved præcist at dine inddata kommer fra at nogen klikker på et link, så er der ingen som helst grund til at åbne for at programmet også ville tage imod data som submittes via en form.

Ja, din SQL ser rigtig ud. Hvorfor? Kan du da ikke få den til at virke?
Avatar billede jacobs1 Nybegynder
24. august 2006 - 11:19 #10
Mange tak, så blev jeg så klog.

nej det virker ikke hmm mærkerligt..

$butik="Fona";
$offset = (isset($_GET['offset'])) ? $_GET['offset'] :0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 3; // Antal resultater pr. side
// Henter poster fra databasen
//$query = mysql_query("SELECT * FROM firmaer ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());
$query = mysql_query("SELECT * FROM firmaer WHERE id IN (" . implode(",", $forbudteordarray) . ") AND Navn='$butik' ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());
Avatar billede jacobs1 Nybegynder
24. august 2006 - 11:22 #11
Nåå der skulle stå OR i stedet for AND :)
Avatar billede nielle Nybegynder
24. august 2006 - 11:24 #12
Lyder meget logisk. Notationen IN (...) er jo også bare en mere kompakt måde at skrive OR på. :^)
Avatar billede jacobs1 Nybegynder
24. august 2006 - 11:26 #13
Okay tak.. ha en god dag! :)
Avatar billede jacobs1 Nybegynder
25. august 2006 - 13:50 #14
Hej igen,
Jeg tænkte på hvis man gerne ville have at den IKKE tog Array med hvad hedder det så ? Dette virker nemlig  ikke. :(

$query = mysql_query("SELECT * FROM firmaer WHERE id != IN (" . implode(",", $forbudteordarray) . ") AND Navn='$butik' ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());
Avatar billede nielle Nybegynder
26. august 2006 - 00:54 #15
... NOT IN ...
Avatar billede jacobs1 Nybegynder
26. august 2006 - 08:23 #16
Super - Mange tak.
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