| 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: 10 let
|
|||
0