Autor | Zpráva | ||
---|---|---|---|
Quicky Profil |
#1 · Zasláno: 13. 1. 2016, 12:58:00
Dobrý den,
Mám problém s výpisem SQL/PHP. Mám vytvořenou databázi s tabulkou, v PHP udělaný výstup. Vše funguje. Nyní chci přidat ke každému řadku checkbox. Pak po zaškrtnutí a následném "submit" by se měl zobrazit pouze řádky co jsou zaškrtnuté. A to mi nefunguje. Hledam jsem všude na netu, už to dělám dlouho, i na zahraničních webech a youtube. Zkoušel jsem i javascript. Mám pár pokusů za sebou,ale nemají ten správný výsledek. Znáte někdo nějaký návod nebo článek co se stím zabývá? Nebo alespon nějaký simple příklad? |
||
juriad Profil |
Quicky:
Každý checkbox bude mít name="idecka[]" a ve value obsahovat idečko záznamu v datábázi. Po odeslání formuláře najdeš v PHP pole $_GET['idecka'] . Pak v SQL klauzuli WHERE id IN (...) , doplníš místo tříteček čárkami oddělený seznam těch ideček.
Jelikož nemáme žádnou představu o tom, co zvládáš, bylo by dobré ukázat kus kódu, který jsi zkoušel a nefunguje. Možná jsi byl na správné cestě. |
||
Quicky Profil |
#3 · Zasláno: 13. 1. 2016, 14:23:36
juriad:
Tenhle pokud byl asi nejzdařilejší, Idečka se uloží a klidně i vypíšou,ale nejde mi vyhodit výsledek. $sql = "SELECT * FROM data"; $queryData = mysql_query( $sql); if (isset($_GET['vyber'])) { $multiple = $_GET['multiple']; $sql = " SELECT * FROM data WHERE zakazka_id = " .mysql_real_escape_string($multiple) .""; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <meta charset="UTF-8"> <title>TISK</title> <link rel="stylesheet" href="../style.css" type="text/css"> </head> <body> <?php if (mysql_num_rows($queryData) > 0 ); ?> <form action="#" method="GET"> <table width="100%"> <thead> <tr> <td>ID zakázky</td> <td>zakaznik ID</td> <td> <input type="submit" name="vyber" value="vybrat" > </td> </tr> </thead> <tbody> <?php while ($row = mysql_fetch_assoc($queryData)){ ?> <tr> <td><?php echo $row['zakazka_id']; ?> </td> <td><?php echo $row['zakaznik_id']; ?> </td> <td> <input type="checkbox" name="multiple[]" value="<?php echo $row['zakazka_id'] ?>" > </td> </tr> <?php } ?> </tbody> </table> </form> </body> </html> |
||
juriad Profil |
#4 · Zasláno: 13. 1. 2016, 14:36:01
Quicky:
To proto, že $multiple je pole a nikoli řetězec. $multiple = []; $clause = ''; if (isset($_GET['multiple']) && is_array($_GET['multiple'])) { foreach ($_GET['multiple'] as $id) { $multiple[] = (int) $id; } $clause = ' AND zakazka_id IN (' . implode(', ', $multiple)) . ')'; } # to 1=1 je trik jak zajistit, že dotaz obsahuje WHERE podmínku a je k ní snadno možné něco přidat $sql = 'SELECT * FROM data WHERE 1=1' . $clause; |
||
Quicky Profil |
#5 · Zasláno: 13. 1. 2016, 14:55:38
juriad:
Děkuji za radu. jen to háže Parse error: syntax error, unexpected '[' na řádku s $multiple = []; |
||
Keeehi Profil |
#6 · Zasláno: 13. 1. 2016, 14:58:22
Asi používáš starou verzi PHP.
[] nahraď za array()
|
||
Quicky Profil |
#7 · Zasláno: 13. 1. 2016, 15:08:24
Ted je to tedy správně. Ale..
Pořád to dělá to samé. Idečka jso sice správně načtená,ale při ale zobrazuje se pořad celý výpis z databáze a ne jen ty zaškrtnuté. Někde musí být malá chybka. |
||
Lonanek Profil |
Nechte si vypsat proměnnou $clause, nebo celý dotaz $sql.
juriad: Je možno to také řešit bez použití "triku". $multiple = []; // popr. array(); $clause = ''; if (isset($_GET['multiple']) && is_array($_GET['multiple'])) { foreach ($_GET['multiple'] as $id) { $multiple[] = (int) $id; } $clause = ' WHERE zakazka_id IN (' . implode(', ', $multiple)) . ')'; } $sql = 'SELECT * FROM data' . $clause; |
||
juriad Profil |
#9 · Zasláno: 13. 1. 2016, 15:58:46
Quicky:
To proto, že $queryData = mysql_query( $sql); $sql za uvedeným blokem kódu. To, co jsem uvedl v [#4], pokrývá oba případy, že byl i nebyl zvolený filtr.
Lonanek: Vím, ale až bude chtít Quicky chtít přidat nějaký jiný filtr, bude to mít snažší. |
||
Keeehi Profil |
#10 · Zasláno: 13. 1. 2016, 16:15:38
juriad:
Chceš-li více filtrů pak $conditions = []; if (isset($_GET['multiple']) && is_array($_GET['multiple']) && !empty($_GET['multiple'])) { $multiple = []; foreach ($_GET['multiple'] as $id) { $multiple[] = (int) $id; } $conditions[] = 'zakazka_id IN (' . implode(', ', $multiple)) . ')'; } if(/*something*/) { $conditions[] = "foo = 'bar'"; } $condition = ""; if (!empty($conditions)) { $condition = " WHERE ".implode(" AND ", $conditions); } $sql = 'SELECT * FROM data' . $condition; |
||
Quicky Profil |
#11 · Zasláno: 13. 1. 2016, 16:40:39
Děkuji mnohokrát pánové. Povedlo se! Jste výborní
|
||
Časová prodleva: 9 let
|
0