Avatar billede nemlig Professor
12. januar 2009 - 21:54 Der er 6 kommentarer og
1 løsning

Chekbokse skal afgøre udtrækket fra MYSQL - PHP

Jeg har en inputform, hvor jeg viser alle poster fra tabel1. Disse poster kan vælges via checkbokse.
Disse vises fx sådan her:

while($row = mysql_fetch_array($res))
{
echo $row['overskrift']."<br><input type='checkbox' name='".$row['id']."' value='1'><br><br>";
}

Jeg har så en tabel2 med mange poster, og som har et felt, "nummer", som har én af id-værdierne fra tabel 1 registreret.
Jeg vil så gerne lave et udtræk fra tabel2, men kun med udgangspunkt i de chekcbokse, der er markeret.
Dette volder mig store kvaler

Hvis jeg fx. har "checked" posterne med id 5 og 8 fra tabel1, så laver jeg et udtræk fra tabel2, hvor feltet nummer kun må være 5 eller 8:
Det skriver jeg normalt sådan her:

query = "SELECT * FROM tabel2 WHERE nummer=5 OR nummer=8";
Avatar billede nemlig Professor
12. januar 2009 - 23:14 #1
Jeg har fået det til at virke.
Jeg smed resultatet af de markerede checkbokse i et array  - dvs. både feltnavnet og ID:

$a[$i] = "`nummer`='".$id."'";

Og min SELECT ser sådan her ud efter WHERE:
".implode(" OR ", $a)."
Avatar billede showsource Seniormester
14. januar 2009 - 09:56 #2
Du kan også lave et array i din post:
while($row = mysql_fetch_array($res))
{
echo $row['overskrift']."<br><input type='checkbox' name='id_ref[]' value='".$row['id']."'><br><br>";
}

og derefter:

SELECT * FROM tabel2 WHERE nummer IN(".implode(",",$_POST["id_ref"]).")
Avatar billede nemlig Professor
14. januar 2009 - 10:42 #3
Super - det var da et godt hint. Tak for det. :)
Avatar billede showsource Seniormester
14. januar 2009 - 10:47 #4
Husk bare på at hvis det ikke er side du selv styrer, skal du lige sikrer dig at det rent faktisk er et tal i $_POST["id_ref"]
Bør faktisk altid sikres! :O)
Avatar billede nemlig Professor
14. januar 2009 - 11:02 #5
øh - jeg er ikke helt med.
Hvorfor skulle der ikke altid være værdier i post-variablen (med mindre tabellen er tom, hvilket den aldrig vil være)
Jeg er med på, at jeg får fejl, hvis den er tom, men det tjekker jeg bare med:

if(is_array($_post.......)

eller snakker vi forbi hinanden?
Avatar billede showsource Seniormester
14. januar 2009 - 11:07 #6
Fordi en idiot kunne jo poste sin egen formular til din side, i et forsøg på at afvikle en query.

if(isset($_POST["id_ref"]) && is_array($_POST["id_ref"])) {

$findid = array();

    foreach($_POST["id_ref"] as $id) {
    $findid[] = int()$id;
    }

$sql = "SELECT * FROM tabel2 WHERE nummer IN (".implode(",",$findid).")";


}
Avatar billede nemlig Professor
14. januar 2009 - 11:26 #7
ahha - men det sker nok ikke, da siderne er login-beskyttede.
Men tak for tippet - det vil jeg også indarbejde - sikkerheden skal være god.
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
Computerworld tilbyder specialiserede kurser i database-management

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