NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!

Diskuze: Vícestránkový formulář - předávání proměnných a uložení do DB

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

Aktivity
Avatar
Zdenek
Člen
Avatar
Zdenek:29.1.2017 16:29

Ahojte,
delší dobu se trápím jak vyřešit předávání proměnných ve vícestránkovém formuláři, do kterého je vnořena funkce náhodného výběru ze tří otázek (pomocí volby "radio" je pak uskutečněno hlasování, kde value je buď 0 = chyba, nebo 1 = správná odpověď). První otázka se vybírá náhodně z qA01_1 až qA01_3, druhá otázka se vybírá z qA02_1 až qA02_3. Po odhlasování bych potřeboval vše zapsát do DB. Mám to napsané, ale asi mám někde chybu. Může mi prosím někdo pomoci ?

Kódy ke stažení zde:
page1_form.php
page2_form.php
page3_form.php
page4_insertda­ta.php
qA01_1.php
qA01_2.php
qA01_3.php
qA02_1.php
qA02_2.php
qA02_3.php
detail.sql
style.css

NEBO 8-)

page1_form.php

<?php
//Session starts here
session_start();
?><!DOCTYPE HTML>
<html>
    <head>
        <title>Vícestránkový formulář</title>
        <link rel="stylesheet" href="style.css" />
    </head>
    <body>

        <div class="container">
            <div class="main">
                <h2>Vícestránkový formulář</h2><hr/>
                <span id="error">
                        <!----Initializing Session for errors--->
                    <?php
                    if (!empty($_SESSION['error'])) {
                        echo $_SESSION['error'];
                        unset($_SESSION['error']);
                    }
                    ?>
                </span>
                <form action="page2_form.php" method="post">

                    <label>Jméno :<span>*</span></label><br />
                    <input name="name" type="text" placeholder="jmeno" required>
                    <br />

                    <label>Věk:<span>*</span></label><br />
                    <input name="age" type="number" placeholder="vek" required>
                    <br />


                    <input  type="reset" value="Vymaž" />
                    <input  type="submit" value="Další" />

                </form>
            </div>

        </div>
    </body>
</html>

page2_form.php

<?php
//Session starts here
session_start();
?><!DOCTYPE HTML>
<html>
    <BODY>
        <head>
            <title>Vícestránkový formulář</title>
            <link rel="stylesheet" type="text/css" href="pokus.css">
        </head>

        <div class="container">
            <div class="main">
                <h2>IQ test 24</h2><hr/>
                <span id="error">
                        <!----Initializing Session for errors--->
                    <?php
                    if (!empty($_SESSION['error'])) {
                        echo $_SESSION['error'];
                        unset($_SESSION['error']);
                    }

                    foreach ($_POST as $key => $value) {
                        $_SESSION['post'][$key] = $value;
                    }
                    ?>
                </span>
                <form action="page3_form.php" method="post">

                <?php
                    // Otazka 1
                $pocetTabulek1 = 3;
                $cisloTabulky1 = rand(1, $pocetTabulek1); // Vybira otazky od 1 do 3
                $cestaKVybraneTabulce1 = sprintf('%s/qA01_%s.php', __DIR__, $cisloTabulky1);
                include $cestaKVybraneTabulce1;
                 ?>

                    <input  type="reset" value="Reset" />
                    <input  type="submit" value="Potvrď" />

                </form>
            </div>

        </div>
    </body>
</html>

page3_form.php

<?php
//Session starts here
session_start();
?><!DOCTYPE HTML>
<html>
    <BODY>
        <head>
            <title>Vícestránkový formulář</title>
            <link rel="stylesheet" type="text/css" href="style.css">
        </head>


        <div class="container">
            <div class="main">
                <h2>IQ test 24</h2><hr/>
                <span id="error">
                        <!----Initializing Session for errors--->
                    <?php
                    if (!empty($_SESSION['error'])) {
                        echo $_SESSION['error'];
                        unset($_SESSION['error']);
                    }

                    foreach ($_POST as $key => $value) {
                        $_SESSION['post'][$key] = $value;
                    }
                    ?>
                </span>
                <form action="page4_insertdata.php" method="post">

                <?php
                    // Otazka 2
                $pocetTabulek2 = 3;
                $cisloTabulky2 = rand(1, $pocetTabulek2); // Vybira nahodne otazky od 1 do 3
                $cestaKVybraneTabulce2 = sprintf('%s/qA02_%s.php', __DIR__, $cisloTabulky2);
                include $cestaKVybraneTabulce2;
                ?>

                    <input  type="reset" value="Reset" />
                    <input  type="submit" value="Potvrď" />

                </form>
            </div>

        </div>
    </body>
</html>

page4_insertda­ta.php

<!DOCTYPE HTML>
<html>
    <head>
        <title>Vícestránkový formulář</title>
        <link rel="stylesheet" href="style.css" />
    </head>
    <body>
        <div class="container">
            <div class="main">
                <h2>Vícestránkový formulář</h2><hr/>

                <?php
                session_start();

                            foreach ($_POST as $key => $value) {
                                $_SESSION['post'][$key] = $value;
                                }
                            //Uložení hodnot do databáze
                            $connection = mysql_connect("localhost", "root", "");
                            $db = mysql_select_db("vicestrankovyformular", $connection);
                            $query = mysql_query("INSERT INTO detail (name,age,qA01_1,qA01_2,qA01_3,qA02_1,qA02_2,qA02_3) values('$name','$age','$qA01_1','$qA01_2','$qA01_3','$qA02_1','$qA02_2','$qA02_3)", $connection);

                            unset($_SESSION['post']);
                ?>
            </div>

        </div>
    </body>
</html>

qA01_1.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- Otázka 1 -->
            <table>
                    <tr>
                        <th colspan="4"><h3>Testová otázka 1:</h3></th>
                    </tr>
                    <tr>
                        <th colspan="4"><h5>Doplň chybějící číslo.</h5></th>
                    </tr>
                    <tr>
                        <th colspan="4"><img id="" src="images/bubliny_q.png"></th>
                    </tr>
                        <br/><br/>
                        <br /><br/>
                    <tr>
                        <td><img id="home" src="images/bubliny_a.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_a1.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_a2.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_a3.png"><br><br></td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="qA01_1" value="1">A</td>
                        <td><input type="radio" name="qA01_1" value="0">B</td>
                        <td><input type="radio" name="qA01_1" value="0">C</td>
                        <td><input type="radio" name="qA01_1" value="0">D</td>
                    </tr>
            </table>
    </body>
</html>

qA01_2.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- Otázka 1 -->
            <table>
                    <tr>
                        <th colspan="4"><h3>Testová otázka 1:</h3></th>
                    </tr>
                    <tr>
                        <th colspan="4"><h5>Doplň chybějící číslo.</h5></th>
                    </tr>
                    <tr>
                        <th colspan="4"><img id="" src="images/bubliny_q1.png"></th>
                    </tr>
                        <br/><br/>
                        <br /><br/>
                    <tr>
                        <td><img id="home" src="images/bubliny_a1.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_ab.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_ac.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_ad.png"><br><br></td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="qA01_2" value="1">A</td>
                        <td><input type="radio" name="qA01_2" value="0">B</td>
                        <td><input type="radio" name="qA01_2" value="0">C</td>
                        <td><input type="radio" name="qA01_2" value="0">D</td>
                    </tr>
            </table>
    </body>
</html>

qA01_3.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- Otázka 1 -->
            <table>
                    <tr>
                        <th colspan="4"><h3>Testová otázka 1:</h3></th>
                    </tr>
                    <tr>
                        <th colspan="4"><h5>Doplň chybějící číslo.</h5></th>
                    </tr>
                    <tr>
                        <th colspan="4"><img id="" src="images/bubliny_q2.png"></th>
                    </tr>
                        <br/><br/>
                        <br /><br/>
                    <tr>
                        <td><img id="home" src="images/bubliny_ab.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_a2.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_ac.png"><br><br></td>
                        <td><img id="home" src="images/bubliny_ad.png"><br><br></td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="qA01_3" value="0">A</td>
                        <td><input type="radio" name="qA01_3" value="1">B</td>
                        <td><input type="radio" name="qA01_3" value="0">C</td>
                        <td><input type="radio" name="qA01_3" value="0">D</td>
                    </tr>
            </table>
    </body>
</html>

qA02_1.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- Otázka 2 -->
            <table>
                    <tr>
                        <th colspan="4"><h3>Testová otázka 2:</h3></th>
                    </tr>
                    <tr>
                        <th colspan="4"><h5>Doplň chybějící obrazec.</h5></th>
                    </tr>
                    <tr>
                        <th colspan="4"><img id="" src="images/hodiny1_Q.png"></th>
                    </tr>
                        <br/><br/>
                        <br /><br/>
                    <tr>
                        <td><img id="home" src="images/hodiny1_a.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ab.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ac.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ad.png"><br><br></td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="qA02_1" value="0">A</td>
                        <td><input type="radio" name="qA02_1" value="0">B</td>
                        <td><input type="radio" name="qA02_1" value="1">C</td>
                        <td><input type="radio" name="qA02_1" value="0">D</td>
                    </tr>
            </table>
    </body>
</html>

qA02_2.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- Otázka 1 -->
            <table>
                    <tr>
                        <th colspan="4"><h3>Testová otázka 2:</h3></th>
                    </tr>
                    <tr>
                        <th colspan="4"><h5>Doplň chybějící obrazec.</h5></th>
                    </tr>
                    <tr>
                        <th colspan="4"><img id="" src="images/hodiny2_Q.png"></th>
                    </tr>
                        <br/><br/>
                        <br /><br/>
                    <tr>
                        <td><img id="home" src="images/hodiny2_a.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ab.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ac.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ad.png"><br><br></td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="qA02_2" value="0">A</td>
                        <td><input type="radio" name="qA02_2" value="0">B</td>
                        <td><input type="radio" name="qA02_2" value="1">C</td>
                        <td><input type="radio" name="qA02_2" value="0">D</td>
                    </tr>
            </table>
    </body>
</html>

qA02_3.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!-- Otázka 1 -->
            <table>
                    <tr>
                        <th colspan="4"><h3>Testová otázka 2:</h3></th>
                    </tr>
                    <tr>
                        <th colspan="4"><h5>Doplň chybějící obrazec.</h5></th>
                    </tr>
                    <tr>
                        <th colspan="4"><img id="" src="images/hodiny3_Q.png"></th>
                    </tr>
                        <br/><br/>
                        <br /><br/>
                    <tr>
                        <td><img id="home" src="images/hodiny1_ac.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ab.png"><br><br></td>
                        <td><img id="home" src="images/hodiny3_a.png"><br><br></td>
                        <td><img id="home" src="images/hodiny1_ad.png"><br><br></td>
                    </tr>
                    <tr>
                        <td><input type="radio" name="qA02_3" value="0">A</td>
                        <td><input type="radio" name="qA02_3" value="0">B</td>
                        <td><input type="radio" name="qA02_3" value="1">C</td>
                        <td><input type="radio" name="qA02_3" value="0">D</td>
                    </tr>
            </table>
    </body>
</html>

detail.sql

CREATE TABLE IF NOT EXISTS `detail` (
  `user_id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` varchar(255) NOT NULL,
  `qA01_1` varchar(255) NOT NULL,
  `qA01_2` varchar(255) NOT NULL,
  `qA01_3` varchar(255) NOT NULL,
  `qA02_1` varchar(255) NOT NULL,
  `qA02_2` varchar(255) NOT NULL,
  `qA02_3` varchar(255) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

style.css
netřeba

Editováno 29.1.2017 16:32
 
Odpovědět
29.1.2017 16:29
Avatar
Odpovídá na Zdenek
Neaktivní uživatel:29.1.2017 18:22

Ahoj,
chyba bude v souboru page4_insertda­ta.php, kde do databáze ukládáš proměnné s názvy $name atp., které neexistují, určitě jsi měl na mysli $_SESSION['pos­t']['name']. Jinak musím upozornit, že takový způsob je náchylný na SQL injection. Doporučuji ti přečíst si pár tutoriálů o databázích v PHP tady na ITnetworku.

Jinak není špatný nápad přečíst si několik dalších článků, zjistil bys, že se to dá udělat mnohem jednodušeji a snadněji na údržbu, než to máš teď ;) Otázky se obvykle uchovávají v databázi a jen postupně vypisují na stránku, pokud je potřeba. Také není dobré dávat každé otázce sloupec v tabulce, nikdy nevíš, kdy budeš chtít mít více otázek, třeba tisíc. Samozřejmě záleží, na co to potřebuješ ;)

Editováno 29.1.2017 18:22
Nahoru Odpovědět
29.1.2017 18:22
Neaktivní uživatelský účet
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 2 zpráv z 2.