Diskuze: Chyba
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Pomohl by mi někdo vyřešit problém kde je chyba?
Ondřej Štorc:29.5.2015 17:22
Ale kde? Ukaž kód a napiš co ti to dělá a co by to mělo dělat...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="vzhled/styl.css" type="text/css">
<link rel="icon" href="vzhled/favicon.ico">
<title>Registrace</title>
</head>
<body class="registrace">
<?php
$jmeno = $_POST["jmeno"];
$heslo = $_POST["heslo"];
$hesloz = $_POST["heslo_znovu"];
$email = $_POST["email"];
$pohl = $_POST["pohl"];
$bydlsite = $_POST["bydliste"];
$den = $_POST["den"];
$mesic = $_POST["mesic"];
$rok = $_POST["rok"];
$vek = "'$den' . '$mesic' . '$rok'";
$trida = $_POST["trida"];
$gym = $_POST["gymnazium"];
$zs = $_POST["zaklskol"];
$jmenoskoly = $_POST["jmenskol"];
$skola = $_POST["skola"];
$pottlac = $_POST["registrivat"];
$potcheck = $_POST["poduziv"];
$errors = array();
if ($_POST["$pottlac && $potcheck"]) {
if (empty($jmeno)) {
$errors[] = "Nebylo vyplněno jméno!";
}
if (empty($heslo)) {
$errors[] = "Nebylo vyplněno heslo!";
}
if (empty($hesloz)) {
$errors[] = "Nebylo vyplněno kontrolní heslo!";
}
if (empty($email)) {
$errors[] = "Nebyl vyplněn email!";
if (empty($vek)) {
$errors[] = "Nebyl vyplněn věk!";
}
if (empty($podcheck)) {
$errors[] = "Nesouhlasíte s pravidly používání!";
}
if (empty($errors)) {
if (strlen($jmeno) <= 8 AND strlen($jmeno) >= 50) {
$errors[] = "Jméno obsahuje příliš málo znaků!";
}
if ($heslo !== $hesloz) {
$errors[] = "Zadaná hesla se neshodují!";
}
if (strlen($heslo) >=6 && strlen($heslo) <= 32) {
$errors[] = "Heslo musí obsahovat minimálně 6 a maximálně 32 znaků!";
}
if(empty($errors))
{
if($zaklskol && $gym){
$errors[] = "Můžete zvolit pouze jednu možnost!";
}
if($gym == 9){
$errors[] = "Pokud zvolíte Gymnázium, můžete zvolit pouze 1. až 8. ročník!";
}
if(empty($skola)){
$errors[] = "Musíte zadat na kterou školu chodíte!";
}
}
if (empty($errors)) {
$hesloh = md5(sha1($heslo));
include "config.php";
mysql_query("INSERT INTO 'uzivatele' WHERE jmeno='$jmeno' heslo='$hesloh' email='$email' den='$den' mesic='$mesic' rok='$rok' bydliste='$bydliste' pohlavi='$pohl' skola_druh='$skola' skola='$jmenoskoly' ");
}
}
}
?>
<h1 id="cbl">Registrace na ClassBooku.</h1>
<p>
<div class="registrace">
<table>
<form action="<?php $PHP_SELF; ?>" method="POST" >
<tr><td>Celé jméno: </td><td><input placeholder="Adam Novák" name="jmeno" type="text" /></td></tr>
<tr><td>Heslo: </td><td><input type="password" name="heslo" /></td></tr>
<tr><td>Heslo znovu: </td><td><input type="password" name="heslo_znovu" /></td></tr>
<tr><td>E-mail: </td><td><input placeholder="[email protected]" type="text" name="email" /></td></tr>
<tr><td>Věk: </td><td><select aria-label="den" title="den" name="den" >
<option value="1" selected="selected" required>01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select><select aria-label="měsíc" title="měsíc" name="mesic" required>
<option value="1" selected="selected">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select><select name="rok" title="rok" aria-label="rok" required>
<option value="2015" selected="selected">2015</option>
<option value="2014">2014</option>
<option value="2013">2013</option>
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
<option value="1990">1990</option>
<option value="1989">1989</option>
<option value="1988">1988</option>
<option value="1987">1987</option>
<option value="1986">1986</option>
<option value="1985">1985</option>
<option value="1984">1984</option>
<option value="1983">1983</option>
<option value="1982">1982</option>
<option value="1981">1981</option>
<option value="1980">1980</option>
<option value="1979">1979</option>
<option value="1978">1978</option>
<option value="1977">1977</option>
<option value="1976">1976</option>
<option value="1975">1975</option>
<option value="1974">1974</option>
<option value="1973">1973</option>
<option value="1972">1972</option>
<option value="1971">1971</option>
<option value="1970">1970</option>
<option value="1969">1969</option>
<option value="1968">1968</option>
<option value="1967">1967</option>
<option value="1966">1966</option>
<option value="1965">1965</option>
<option value="1964">1964</option>
<option value="1963">1963</option>
<option value="1962">1962</option>
<option value="1961">1961</option>
<option value="1960">1960</option>
<option value="1959">1959</option>
<option value="1958">1958</option>
<option value="1957">1957</option>
<option value="1956">1956</option>
<option value="1955">1955</option>
<option value="1954">1454</option>
<option value="1953">1953</option>
<option value="1952">1952</option>
<option value="1951">1951</option>
<option value="1950">1950</option>
<option value="1949">1949</option>
<option value="1948">1948</option>
<option value="1947">1947</option>
<option value="1946">1946</option>
<option value="1945">1945</option>
<option value="1944">1944</option>
<option value="1943">1943</option>
<option value="1942">1942</option>
<option value="1941">1941</option>
<option value="1940">1940</option>
<option value="Už nevím">Už nevím</option>
</select></td></tr>
<tr><td>Bydliště: </td><td><input name="bydliste" type="text" required /></td></tr>
<tr><td>Jsem: </td><td><select aria-label="Pohlaví" title="Pohlaví" name="pohl" >
<option value="Muž" selected="selected">Muž</option>
<option value="žena">žena</option>
<option value="Jiné">Jiné</option>
<option value="Bůh">Bůh</option>
</select></td></tr>
<tr><td>Třída: </td><td><select aria-label="Třída" tittle="Třída" name="trida" >
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select></td></tr>
<tr><td>Škola: </td><td><select aria-label="Škola" label="Škola" name="skola">
<option value="zaklskol" selected="selected">ZŠ</option>
<option value="gymnazium">VG</option>
</select><input type="text" name="jmenskol" /></td></tr>
<tr><center><td colspan="2"><input name="registrovat" type="submit" value="Registrovat" /></td></center></tr>
<tr><td colspan="2">Registrací souhlasíte s <a style="color: 1E90FF; text-decoration:none;" href="poduziv.php">podmínkami používání.</a><input name="podpouziv" type="checkbox" alt="Prosím zaškrtněte toto pole." /></td></tr>
</form>
</table>
</div>
</p>
</body>
</html>
řádek 247 prej chyba. mělo by to dělat: vložit uživatele do db se všema vyplněnýma polemi (pochopitelně)
Jan Lupčík:29.5.2015 18:17
Hele, víš, že jsi mohl ty roky a dny si dát do cyklu for a nemusel by jsi toho tolik vypisovat?
$rok = 2015;
for($i = 0; $i < 75; $i++)
{
echo "<select value='" . $rok . "'>" . $rok . "</select>";
$rok--;
}
Jinak jak píše [me|]1760[/me|] - musíš mít dotaz ve tvaru (při vkládání):
INSERT INTO tabulka(sloupec1, sloupec2, sloupec3) VALUES($promenna1, $promenna2, $promenna)
Btw. není zde ošetřena SQL injection stejně jako u tebe. A mysql_query jsou zastaralé. Koukni na zdejší tutoriály na PDO, kde vyřešíš i tu SQL injection.
Omlouvám se za doublepost, ale předtím jsem psal z mobilu, takže to teď trochu rozvinu... Správně to má být:
INSERT INTO 'uzivatele' VALUES(jmeno='$jmeno', heslo='$hesloh', email='$email', den='$den', mesic='$mesic', rok='$rok', bydliste='$bydliste', pohlavi='$pohl,' skola_druh='$skola', skola='$jmenoskoly')"
A rada pro tebe - používej PDO. Velmi dobře udělaný wrapper nalezneš
zde na síti v tutoriálech MySQL pro začátečníky (teď přesně nevím, jak
se to jmenuje, tak se omlouvám za případné chybky). Ovládat se ho naučíš
za chvíli (Db::query, Db::querySingle, Db::queryOne, Db::queryAll) - vše
najdeš v tutorialu, a určitě to stojí za bezpečnost, kterou tím získáš.
Takhle můžu na tvůj web použít SQL injection (upravit dotaz).
//EDIT Kurňa, předběhl mě IT Man
+20 Zkušeností
+2,50 Kč
Jsem rád, že alespoň použil něco z našich článků a kontroluje formulář tím hezčím způsobem
Nicméně bych ještě doporučil přečíst něco o SQL injection.
všem hrozně moc děkuji za pomoc... Nejradši bych označil všechny odpovědi jako řešení
:29.5.2015 21:17
Ještě rada pro tebe - na ty roky si napiš v PHP cyklus. Bude to mnohem
méně kódu, ale pro uživatele to samé
//EDIT Aha, IT Man už ti to poradil... Měly by se tu dát mazat
příspěvky...
Jan Lupčík:29.5.2015 21:24
Vždy ti vezmu myšlenku ...
I na ty dny. Tam stačí obyčejný $i, které můžeš jen vypsat i s tou hodnotou (stejné jako u roků, akorát u měsíců stačí jedna proměnná).
Martin Konečný (pavelco1998):29.5.2015 22:00
Možná by bylo vhodnější nepsat aktuální rok staticky, aby to nemusel každý rok upravovat
$rok = (int) date("Y");
$min = $rok - 75;
for (; $rok >= $min; $rok--) {
echo "<option value='{$rok}'>{$rok}</option>";
}
Zobrazeno 13 zpráv z 13.