Autor Zpráva
janberka
Profil *
Ahoj,
mám problém s ukládáním dat z formuláře do databázi. Vždy mě to přesměruje na stránku formuláře a vypíše mnou zavedenou chybovou hlášku. Kód už jsem 2x zkoušel napsat od znova. Prosím o radu.
Tady je kód stránky s uložením:

<?php
  //začátek kontroly přihlášení
  session_start();
  $prava1 = $_SESSION['prava'];
  $login1 = $_SESSION['login'];
  $pass1 = $_SESSION['pass'];
  $idc1 = $_SESSION['idc'];
  
  if ($prava1 == '' && $login1 == '' && $pass1 == '' && $idc1 == '') {
    $_SESSION['nc'] = '0';
    header('location:index.php');
    }
  else {
    $_SESSION['prava'] = $prava1;
    $_SESSION['login'] = $login1;
    $_SESSION['pass'] = $pass1;
    $_SESSION['idc'] = $idc1;
  }
  //konec kontroly přihlášení
  //výpis dat přijatých z formuláře do proměnných
  $name = $_POST['name'];
  $surname = $_POST['surname'];
  $abbreviationu = $_POST['abbreviationu'];
  $pohlavi = $_POST['pohlavi'];
  $dateb = $_POST['dateb'];
  $rc = $_POST['rc'];
  $adresa = $_POST['adresa'];
  $tel = $_POST['tel'];
  $email = $_POST['email'];
  $funkce = $_POST['funkce'];
  $odkdy = $_POST['odkdy'];
  $login = $_POST['login'];
  $pass = $_POST['pass'];
  $passr = $_POST['passr'];
  $titul = $_POST['titul'];
  $aprobace = $_POST['aprobace'];
  $auth = rand(10000,99999);  
  if($funkce == 'reditel')
    $prava = 'a';
  elseif($funkce == 'zasreditel')
    $prava = 'b';
  elseif($funkce == 'ucitel')
    $prava = 'd';  
  elseif($funkce == 'adminprc')
    $prava = 'e';
  elseif($funkce == 'ekonom')
    $prava = 'f';
  //konec výpisu dat přijatých z formuláře do proměnných 
  //vkládání dat do databáze  
  include 'connect.php';
  mysql_select_db('data');
  mysql_query("SET NAMES 'utf8' COLLATE 'utf8_czech_ci'");
  $dotaz = mysql_query ("INSERT * VALUES INTO users VALUES ('','','$abbreviationu','$name','$surname','$titul','$pohlavi','$dateb','$rc','$adresa','$login','$pass','$funkce','$prava','$email','$tel','$odkdy','$dokdy','$auth','$aprobace')");
  
  if (!$dotaz) { 
    $_SESSION['ni'] = '1';
    header('location: new-teacher.php');
    }
?>
Lamicz
Profil
janberka:
Pleteš si SELECT a INSERT syntaxi - viz MySQL manuál
Tori
Profil
A chybí escapování dat, která vkládáte do DB (bez toho vám jediný apostrof ve formuláři způsobí, že SQL dotaz selže).
janberka
Profil *
I když jsem upravil tu chybu v syntaxi nefunguje to.
Tori
Profil
janberka:
Hlásí to někde nějakou chybu? Zobrazil jste si výsledný SQL dotaz, jestli je v pořádku? Projde podmínka na ř.55? Pokud ne a nepřesměruje se, nechte si mysql_error vypsat chybu.

Když nic z toho nepomůže, ukažte nejnovější verzi kódu.
janberka
Profil *
Chybu to nehlásí. Podmínku na ř. 55 neprojde (přesměruje se na str. new-teacher.php kde vypíše mojí nastavenou chybovou hlášku). Neuloží se to do Databáze.


<?php
  //začátek kontroly přihlášení
  session_start();
  $prava1 = $_SESSION['prava'];
  $login1 = $_SESSION['login'];
  $pass1 = $_SESSION['pass'];
  $idc1 = $_SESSION['idc'];
  
  if ($prava1 == '' && $login1 == '' && $pass1 == '' && $idc1 == '') {
    $_SESSION['nc'] = '0';
    header('location:index.php');
    }
  else {
    $_SESSION['prava'] = $prava1;
    $_SESSION['login'] = $login1;
    $_SESSION['pass'] = $pass1;
    $_SESSION['idc'] = $idc1;
  }
  //konec kontroly přihlášení
  //výpis dat přijatých z formuláře do proměnných
  $name = $_POST['name'];
  $surname = $_POST['surname'];
  $abbreviationu = $_POST['abbreviationu'];
  $pohlavi = $_POST['pohlavi'];
  $dateb = $_POST['dateb'];
  $rc = $_POST['rc'];
  $adresa = $_POST['adresa'];
  $tel = $_POST['tel'];
  $email = $_POST['email'];
  $funkce = $_POST['funkce'];
  $odkdy = $_POST['odkdy'];
  $login = $_POST['login'];
  $pass = $_POST['pass'];
  $passr = $_POST['passr'];
  $titul = $_POST['titul'];
  $aprobace = $_POST['aprobace'];
  $auth = rand(10000,99999);  
  if($funkce == 'reditel')
    $prava = 'a';
  elseif($funkce == 'zasreditel')
    $prava = 'b';
  elseif($funkce == 'ucitel')
    $prava = 'd';  
  elseif($funkce == 'adminprc')
    $prava = 'e';
  elseif($funkce == 'ekonom')
    $prava = 'f';
  //konec výpisu dat přijatých z formuláře do proměnných 
  //vkládání dat do databáze  
  include 'connect.php';
  mysql_select_db('data');
  mysql_query("SET NAMES 'utf8' COLLATE 'utf8_czech_ci'");
  $dotaz = mysql_query ("INSERT INTO users VALUES ('','','$abbreviationu','$name','$surname','$titul','$pohlavi','$dateb','$rc','$adresa','$login','$pass','$funkce','$prava','$email','$tel','$odkdy','$dokdy','$auth','$aprobace')");
  
  if (!$dotaz) { 
    $_SESSION['ni'] = '1';
    header('location: new-teacher.php');
    }
  else {
    $_SESSION['ni'] = '0';
    header('location: new-teacher.php');
    }
?>
ts_istudio
Profil
janberka:
Doporučuji při INSERTu uvádět sloupce tabulky, tzn.
INSERT INTO users (jmeno, prijmeni, funkce) VALUES ('Adam', 'Bernau', 'matematik')

Ušetří to spoustu času při hledání podobných nefunkčností.


A taky je dobré neposílat dotazy do databáze rovnou, ale složit si je v proměnné, protože ta se dá při hledání chyb jednoduše vypsat.
Takže místo $dotaz = mysql_query ("INSERT INTO ... používat

$q = "INSERT INTO ...";
// echo $q;
$dotaz = mysql_query ($q);

Tento konkrétní problém to samozřejmě nijak neřeší, jen je to dle mého užitečný návyk.
janberka
Profil *
Děkuju moc všem za pomoc hlavně ts_istudio. Když jsem udal ty sloupce našel jsem tam chyby a skript už mi funguje. Opravdu moc děkuju.

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: