Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: vypíeanie výber položiek z výmeru

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Norbert Palkovič:31.12.2020 9:10

Dodrý deň, chcel by som vytvoriť filter na zúženie položiek z databázy a po výbere aby sa my zobrazili ďalšie možnosti zúženia.

Zkusil jsem: <?php
include('db.php');
//if($_POST['id']){
$id='1';

if($id==0){
}else{
echo "<form><select >";
echo "<option>Skupi­na</option>";
$sql = mysqli_query($con,"SE­LECT * FROM city WHERE country_id='$id'");
while($row = mysqli_fetch_a­rray($sql))
{
echo '<option value="'.$row['ci­ty_id'].'">'.$row['ci­ty_name'].'</op­tion>';
}
echo "</select>";
echo "</form>";
}
if
{
echo '<option value="'.$row['ci­ty_id'].'">'.$row['ci­ty_id'].'</op­tion>';

}
echo "</select>";
echo "</form>";
}
//}
?>

Chci docílit: problém je s riadkom WHERE city_name='.$row['ci­ty_name'].'"

prosím Vás poraďte my ako by to malo byť správne.

 
Odpovědět
31.12.2020 9:10
Avatar
Norbert Palkovič:31.12.2020 9:32

<?php
include('db.php');
//if($_POST['id']){
$id='1';

if($id==0){
}else{
echo "<form><select >";
echo "<option>Skupi­na</option>";
$sql = mysqli_query($con,"SE­LECT * FROM city WHERE country_id='$id'");
while($row = mysqli_fetch_a­rray($sql))
{
echo '<option value="'.$row['ci­ty_id'].'">'.$row['ci­ty_name'].'</op­tion>';
}
echo "</select>";
echo "</form>";
}
if
{
echo '<option value="'.$row['ci­ty_id'].'">'.$row['ci­ty_id'].'</op­tion>';

}
echo "</select>";
echo "</form>";
}
//}
?>

 
Nahoru Odpovědět
31.12.2020 9:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.1.2021 18:57
  1. Musis se naucit ukladat do promenne. Echo pouzit v programu jen jednou, kdyz vypisujes promenou s html obsahem.
  2. Musis se naucit pouzivat prepared statement a neposilat data primo do sql prikazu. Pokud te to tak uci ve skole, je to uplne jspatne a kazdy takovy program si hacker rad zaradi na seznam napadnutelnych programu, kdyby potreboval ziskat nejake osobni udaje pro dalsi infiltraci firmy.

google = mysqli prepared statement example

$stmt = $mysqli->prepare("SELECT * FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows === 0) exit('No rows');
while($row = $result->fetch_assoc()) {
  $ids[] = $row['id'];
  $names[] = $row['name'];
  $ages[] = $row['age'];
}
var_export($ages);
$stmt->close();

Nebo aspon takto

$name = $mysqli->real_escape_string($_POST['name']);
$mysqli->query("SELECT * FROM myTable WHERE name='$name'");

3. Musis se naucit pouzivat javascript request jestli chces pouzivat kaskadovy filtr. Nebo pouzit javascriptovou verzi a vybirat to ze vsech polozek. Samozrejme, pres php to muzes delat take, ale ma to sva proti.
4. Musis se naucit encodovat promenne, co tlacis do html podle pravidel html, opet riziko chyb a prilezitost pro hackera
5. Musis se naucit googlovat!
google = php multiple select example
6. Musis se naucit psat spravny html kod. Ne nejakou miniverzi, ktera funguje mozna pro nejaky lajdacky skolni priklad, ale uz nikde jinde.


php reseni by mohlo vypadat nejak tatko:

<?php
function escapeHtml($str='') {return htmlspecialchars((str) $str);} // escapuje kod pro vypis do html kodu
function escapeSqlValue($value) {return $mysqli->real_escape_string(value);} // escapuje hodnotu pro vyppis do sql stringu, prikazu

// funkce, co vypise select s vyuzitim escapeHtml
function ciselnikDraw($data=array(), $selected=array(), $name='', $id='')
{
$out = '...<select name="'.escapeHtml($name).'">';
$out .= '...<option...>...';
...
return $str;
}

// funkce, co vrati data pro ciselnik, at uz z databaze nebo php pole nebo odjinud
function ciselnikGet($mysqli=null, $name='', $where='')
{
$out = array();
if ($name=='city')
...
// coz by mohl byt tvuj kod
// https://www.php.net/manual/en/mysqli.query.php
  {
  if($where>0)
    {
    $id_sql = escapeSqlValue($where);
    $query = "SELECT * FROM city WHERE country_id='$id_sql' ";
    return ciselnikGetSql($mysqli, $query);
   }
}
return $out;
}

function ciselnikGetSql($mysqli=null, $query='')
{
$out = array();
$result = $mysqli->query($query);
if ($result!==false)
      {
      while($row = mysqli_fetch_array($result)!==false)
         {$out[] = $row;}
      $result->close();
      }
return $out;
}

$data_city = ciselnikGet('city', $_POST['country']);
$data_ulice = ciselnikGet('ulice', $_POST['city']);
$data_prijmeni = ciselnikGet('prijmeni', $_POST['ulice']);
$str = '';
$str .= ciselnikDraw($data_city , 'city');
$str .= ciselnikDraw($data_ulice , 'ulice');
$str .= ciselnikDraw($data_prijmeni , 'prijmeni');
echo $str;
Editováno 1.1.2021 18:58
 
Nahoru Odpovědět
1.1.2021 18:57
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.1.2021 19:03

jeste jedna uprava

<?php
function escapeHtml($str='') {return htmlspecialchars((str) $str);} // escapuje kod pro vypis do html kodu
function escapeSqlValue($value) {return $mysqli->real_escape_string(value);} // escapuje hodnotu pro vyppis do sql stringu, prikazu

// funkce, co vypise select s vyuzitim escapeHtml
function ciselnikDraw($data=array(), $selected=array(), $name='', $id='')
{
$out = '...<select name="'.escapeHtml($name).'">';
for ($data as $row)
{
list($id, $name)  = $row;
$out .= '...<option... value="'.escapeHtml($id).'">'.escapeHtml($name).'</option>';
}
...
return $str;
}

// funkce, co vrati data pro ciselnik, at uz z databaze nebo php pole nebo odjinud
function ciselnikGet($mysqli=null, $name='', $where='')
{
$out = array();
if ($name=='city')
...
// coz by mohl byt tvuj kod
// https://www.php.net/manual/en/mysqli.query.php
  {
  if($where>0)
    {
    $id_sql = escapeSqlValue($where);
    $query = "SELECT id_city as id, city_name as name FROM city WHERE country_id='$id_sql' ";
    return ciselnikGetSql($mysqli, $query);
   }
}
return $out;
}

function ciselnikGetSql($mysqli=null, $query='')
{
$out = array();
$result = $mysqli->query($query);
if ($result!==false)
      {
      while($row = mysqli_fetch_array($result)!==false)
         {$out[] = $row;}
      $result->close();
      }
return $out;
}

$data_city = ciselnikGet('city', $_POST['country']);
$data_ulice = ciselnikGet('ulice', $_POST['city']);
$data_prijmeni = ciselnikGet('prijmeni', $_POST['ulice']);
$str = '';
$str .= ciselnikDraw($data_city , 'city');
$str .= ciselnikDraw($data_ulice , 'ulice');
$str .= ciselnikDraw($data_prijmeni , 'prijmeni');
echo $str;

\---

 
Nahoru Odpovědět
1.1.2021 19:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.