Autor Zpráva
Jan Žák
Profil
Dobrý den,

rád bych Vás požádal o pomoc s vložení dat z formuláře do DB. Mám vytvořený tento script:
<?php
require_once 'config.php';

$error="";

if (isset($_POST['submit'])) {

  if (empty($_POST['q1'])) { 
    $error = '<h2>Prosím vložte jméno!</h2><h2>Prosím, vraťte se zpět.</h2>'; 
  } else {
    $q1 = $_POST['q1']; 
  }

  if (empty($_POST['q2'])) { 
    $error = '<h2>Prosím vložte datum narození!</h2><h2>Prosím, vraťte se zpět.</h2>'; 
  } else {
    $q2 = $_POST['q2']; 
  }

  if (empty($_POST['q3'])) {
    $error = '<h2>Prosím vložte email!</h2><h2>Prosím, vraťte se zpět.</h2>';
  } else {
    if (filter_var($_POST['q3'], FILTER_VALIDATE_EMAIL)) {
      $q3 = $_POST['q3'];
    } else {
       $error = '<h2>Vaše emailová adresa není platná</h2><h2>Prosím, vraťte se zpět.</h2>';
    }
  }

  if (empty($_POST['q4'])) {
    $error = '<h2>Prosím vložte heslo!</h2><h2>Prosím, vraťte se zpět.</h2>';
  } else {
    $q4 = $_POST['q4'];
  }

  $q5 = mysql_real_escape_string(htmlspecialchars($_POST['q5']));
  $q6 = mysql_real_escape_string(htmlspecialchars($_POST['q6']));
  $q7 = mysql_real_escape_string(htmlspecialchars($_POST['q7']));
  $q8 = mysql_real_escape_string(htmlspecialchars($_POST['q8']));
  $q9 = mysql_real_escape_string(htmlspecialchars($_POST['q9']));

  if (empty($error)) {

    $query = "SELECT * FROM soutez WHERE q3 = '$q3'";
    $result = mysql_query($query);
      if (!$result) {
        $error = '<h2>Nastala chyba při vkládání!</h2><h2>Prosím, vraťte se zpět.</h2>';
      }

      if (mysql_num_rows($result) == 0) {

        $sql = "INSERT INTO soutez (q1, q2, q3, q4, q5, q6, q7, q8, q9) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9')";
        $result = mysql_query($sql);
          if (!$result) {
            $error = '<h2>Nastala chyba při vkládání!</h2><h2>Prosím, vraťte se zpět.</h2>';
          }

          if (mysql_affected_rows() == 1) {
            $error = '<h2>Děkujeme vám za registraci!</h2><h2>Vyčkejte na výsledky losování.</h2>';
          } else {
            $error = '<h2>Nelze se zaregistrovat!</h2><h2>Omlouváme se za nepříjemnosti.</h2>';
          }
      } else {
        $error = '<h2>Email byl již registrován!</h2><h2>Nelze se registrovat dvakrát!</h2>';
      }
  } 
  mysql_close();
}
?>

Data z formuláře se předají, ale neuloží, zkusil jsem vypis dat přes var_dump a i zde byla data přítomna. Databázovou tabulku mám v pořádku, žadná chyba se nevyskytne, script vypíše hlášku: Nelze se zaregistrovat!

Myslím, že to bude jen nějaká hloupost, ale jak do toho koukám, nedokážu zjistit co je špatně. Děkuji za každou pomoc.
Monkeys
Profil *
Jan Žák:
Ak je tabulka cisto len na registraciu a ma presne 9 stlpcov tak v dotaze mozete vynechat nazvy stlpcov.

$sql = "INSERT INTO soutez  VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9')";

M.
Dan Charousek
Profil
Jan Žák:
Nevyjádřím se přímo k problému, ale při v kládání do databáze htmlspecialchars() vynech. Escapování na této úrovni by se mělo provádět až při výpisu.

Vypíše se nějaká chyba?

Zkusil bych si vypsat výsledný dotaz: echo $sql; a vložit ho ručně do databáze.
lionel messi
Profil
Monkeys:
Jan Žák:
Ak je tabulka cisto len na registraciu a ma presne 9 stlpcov tak v dotaze mozete vynechat nazvy stlpcov.

A čo ak bude chcieť pridať desiaty stĺpec? Navyše tento „zlepšovák“ evidentne problém autora nerieši.

Jan Žák:

Funkcia htmlspecialchars je použitá nesprávne, vždy sa volá až pri výpise dát do stránky, nikdy nie pri ukladaní do databázy. Naopak premenné $q1 $q2 $q3 $q4 neošetruješ escapovaním.
Jan Žák
Profil
Monkeys, Dan Charousek, lionel messi:
Pánové, děkuji Vám všem, příkaz echo $sql pomohl, chyba byla při vkládání datumu do db, při výpisu jsem neměl správný format data :) Nyní je vše v pořádku. Děkuji i za informaci o htmlspecialchars, opravil jsem si to. Hezký den.

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: