Autor Zpráva
Prey
Profil
Ahoj.
Chtěl bych Vás poprosit o radu. Neběží mi následující SQL dotaz a vážně nevím v čem je problém (určitě nějaká prkotina...). Je stejný problém pro obě varianty parametru action. Po vyplnění formuláře se vypíše chyba "Unknown column 'XXX' in 'field list'", kde XXX=hodnota vyplněná ve druhém poli formuláře, tedy proměnná "mesto".
Komentář:
1) Volba "pridat" by měla přidat nový údaj do tabulky
2) Volba "upravit" by měla upravit původní údaj

Budu vděčný za radu.

<?php
    switch ($_GET['action']) {
      case 'pridat':
      {
            $query = 'INSERT INTO
                tabulka
                    (jmeno, mesto)
                VALUES
                    ("' . $_POST['jmeno'] . '",
                     ' . $_POST['mesto'] . ')';
      }
      break;
    case 'upravit':
    {
        $query = 'UPDATE tabulka SET
                    jmeno = "' . $_POST['jmeno'] . '",
                    mesto = ' . $_POST['mesto'] . '
                WHERE
                    id = ' . $_POST['id'];

        break;
    }
    break;
    }

    if (isset($query)) {
    $result = mysqli_query($db, $query) or die(mysqli_error($db));
    }
?>

Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Tori
Profil
1. Data z formuláře je potřeba kvůli bezpečnosti ošetřit před uložením do databáze. (pro řetězce je např. funkce mysqli_real_escape_string, pro čísla intval nebo floatval).

2. Řetězce v SQL dotazu musí být v uvozovkách nebo apostrofech (to je příčina té chyby).

edit: opraven odkaz na mysqli_real_esc..
Prey
Profil
Tori:
Díky za rady.
ad1) Dám si na to pozor.
ad2) Čekal jsem, že bude někde něco přebývat či chybět. Ať už ale doplňuju uvozovky kamkoliv, tak mi to nechce schroustat. Neporadil bys prosím přesněji, jak upravit? Promiň...začátečník...
Tori
Profil
// ...
  case 'upravit': 
    $query = 'UPDATE tabulka SET jmeno = "' . mysqli_real_escape_string($db, $_POST['jmeno']) . '", mesto = "' 
      . mysqli_real_escape_string($db, $_POST['mesto']) . '" WHERE id = ' . intval($_POST['id']);
    break;
Obdobně předchozí případ. A přebývá tam ten druhý break na konci.
Mimochodem nemusíte používat složené závorky za case - anebo je alespoň pište pokaždé stejně (jednou máte break v závorkách, podruhé ne). To sice není chyba, ale když budete psát a odsazovat kód jednotným stylem, tak bude i pro vás čitelnější.
Prey
Profil
Tori:
Bezva, už to funguje. Děkuji mockrát!!!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0