Avatar billede johnnyhb Nybegynder
03. maj 2007 - 14:35 Der er 12 kommentarer og
1 løsning

4 problemer i et hjemmelavet survey-modul.

Hej Alle.
Jeg sidder og har lært mig selv en del PHP som jeg skal bruge da jeg skal lave et brugerundersøgelsesmodul til brug i min Bacholor-opgave.
Men jeg har nu 4 problemer/ting jeg ikke er helt sikker på, og jeg håber I kan hjælpe.

Spørgsmålene er kort beskrevet direkte i koden og det er disse 4:
//PROBLEM 1: WHEN THE KEYS ARE SET BUT THE VALUE IS NOT - WILL THE VALUE BE "NULL"?
//PROBLEM 2: WILL THE CHECKS WORK? (All checks are the same, so if the first works, the rest will follow.)
//PROBLEM 3: GO TO THE NEXT PAGE AND TRANSFER THE ALLREADY ASSIGNED ELEMENTS IN THE "ANSWERS ARRAY" AS WELL.
//PROBLEM 4: AS THERE WARE PROBLEMS DISPLAY THE HTML-FORM AGAIN (OR THE WHOLE PAGE)

Nærmere beskrivelse af brugerundersøgelsesmodulet, til dem der gerne vil forstå lidt mere.
Meningen er at folk kommer ind og skal svare på alle spørgsmål på side 1, herefter bliver en variable sat der gør at siden vil forsøge at alle variabler som kommer fra den pågældende side er sat, hvis ikke vil siden udskrive de værdier der kommer til at ligge i array'et errors.
Hvis alt er som det skal være, skal den næste side (med flere spørgsmål) åbnes og værdierne i answers array'et skal overføres til den næste side.
På den sidste side vil alle værdier så blive lagt i database.

Jeg ved at det er meget og nok besværligt at svare på, derfor udlover jeg så mange points.

Andre kommentarer eller gode råd tages der også imod med rund hånd.

GOD DAG.
Johnson

Koden:
-------:.:.:--------
<?php
if (isset($_POST['personal_done'])) { //Check if the hidden field "personal_done" has been set to TRUE

    //Initiate the error array, the answers array and check the different variables to see if they have been set.
    $errors = array();
    $answers = array(    'gender', 'age', 'income', 'home', 'time_online', 'it_knowhow', 'online_buys', //Questions on the first page
                        'bona_design', 'bona_usability', 'bona_searching', 'bona_adverts', 'bona_company', //Questions on the second page
                        'tvshop_design', 'tvshop_usability', 'tvshop_searching', 'tvshop_adverts', 'tvshop_company',//Questions on the third page
                        'best_design', 'best_usability', 'most_trustworth', 'preffered_shop'//Questions on the fourth page
                    );    
//PROBLEM 1: WHEN THE KEYS ARE SET BUT THE VALUE IS NOT - WILL THE VALUE BE "NULL"?
   
//PROBLEM 2: WILL THE CHECKS WORK? (All checks are the same, so if the first works, the rest will follow.)
        //gender check - WILL IT WORK?
                if (!isset(array['gender']) {//if the value in key gender is NOT set, hvem go to else clause.
                    $errors[] = 'Du har ikke intastet dit køn!';
                } else {//if the check passes - assign the value to the answers array
                    $answers['gender'] = ($_POST['gender']);
                    }
        //age check
                if (!isset(array['age']) {
                    $errors[] = 'Du har ikke intastet din alder!';
                } else {
                    $answers['$age'] = ($_POST['age']);
                    }
        //income check
                if (!isset(array['income']) {
                    $errors[] = 'Du har ikke intastet din indkomst!';
                } else {
                    $answers['$income'] = ($_POST['income']);
                    }
        //home check
                if (!isset(array['home']) {
                    $errors[] = 'Du har ikke intastet hvor du bor!';
                } else {
                    $answers['$home'] = ($_POST['home']);
                    }
        //time_online check
                if (!isset(array['time_online']) {
                    $errors[] = 'Du har ikke intastet hvor meget tid du bruger på internettet pr. dag!';
                } else {
                    $answers['$time_online'] = ($_POST['time_online']);
                    }
        //it_knowhow check
                if (!isset(array['it_knowhow']) {
                    $errors[] = 'Du har ikke intastet din internet kunnen!';
                } else {
                    $answers['$it_knowhow'] = ($_POST['it_knowhow']);
                    }
        //internet_buys check
                if (!isset(array['internet_buys']) {
                    $errors[] = 'Du har ikke intastet hvor ofte du køber ting på internettet!';
                } else {
                    $answers['$internet_buys'] = ($_POST['internet_buys']);
                    }
    }
   
    if (empty($errors)){
//PROBLEM 3: GO TO THE NEXT PAGE AND TRANSFER THE ALLREADY ASSIGNED ELEMENTS IN THE "ANSWERS ARRAY" AS WELL.
   
    } else {
        echo '    <h1 id="mainhead">Oplysninger manger!</h1>
                <p class="error">Alle felter skal være oplyst:<b>';
                foreach ($errors as $msg) {
                    echo "    - $msg<br />\n";
                    }
            echo '    </p><p>Intast igen, tak.</p><p><br /></p>';
//PROBLEM 4: AS THERE WARE PROBLEMS DISPLAY THE HTML-FORM AGAIN (OR THE WHOLE PAGE)
            }
?>

<!-- START of the HTML-code for the form-->
        <h1 id="mainhead">Om dig:</h1>
            <p>Svar så præcist som muligt på spørgsmålene.<br>
                Tak for hjælpen.</p>
                <form id="personal" name="personal" method="post" action="personal.php">
                <table cellspacing="0" cellpadding="2" border="0">

                    <tr>
                        <td>
                            <p><label><b>Køn:</b>
                        </td>
                        <td>
                            <select name="gender">
                              <option>Vælg</option>
                              <option value="m">Mand</option>
                              <option value="f">Kvinde</option>
                            </select>
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/gender.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                    </label></p>
                    </tr>

                    <tr>
                        <td>
                            <p><label><b>Alder:</b>
                        </td>
                        <td>
                                <?PHP       
                            echo '<select name="age">
                            <option>Vælg</option>   
                            ';
                                    for ($age = 15; $age <= 80; $age++)
                                        {echo "<option value=\"$age\">$age</option>\n";
                                        }
                                echo '</select> <nb>';
                                ?>                   
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/age.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                            </label></p>
                    </tr>

                    <tr>
                        <td>
                            <p><label><b>Årlig Indtægt:</b>
                        </td>
                        <td>
                                <select name="income">
                                  <option>Vælg</option>
                                  <option value="private">Ønsker ikke oplyse</option>
                                  <option value="low">Lav</option>
                                  <option value="middle">Mellem</option>
                                  <option value="high">Høj</option>
                                </select>
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/income.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                            </label></p>
                    </tr>

                    <tr>
                        <td>
                            <p><label><b>Du bor:</b>
                        </td>
                        <td>
                            <select name="home">
                              <option>Vælg</option>
                              <option value="country">På landet</option>
                              <option value="small city">I mindre by</option>
                              <option value="medium city">I mellemstor by</option>
                              <option value="large city">I stor by</option>
                            </select>
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/home.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                            </label></p>
                    </tr>

                    <tr>
                        <td>
                            <p><label><b>Hvor meget tid bruger du gennemsnitligt på internettet pr. dag:</b>
                        </td>
                        <td>
                                <select name="time_online">
                                  <option>Vælg</option>
                                  <option value="1">Under 15 minutter</option>
                                  <option value="2">15 til 30 minutter</option>
                                  <option value="3">30 min til 1 time</option>
                                  <option value="4">1 til 2 timer</option>
                                  <option value="5">2 timer og derover</option>
                                </select>
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/time_online.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                            </label></p>
                    </tr>

                    <tr>
                        <td>
                            <p><label><b>Internet kunnen:</b>
                        </td>
                        <td>
                                <select name="it_knowhow">
                                  <option>Vælg</option>
                                  <option value="low">En smule</option>
                                  <option value="medium">Noget</option>
                                  <option value="high">Meget</option>
                                  <option value="Professional">Professionel</option>
                                </select>
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/it_knowhow.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                            </label></p>
                    </tr>

                    <tr>
                        <td>
                            <p><label><b>Hvor ofte køber du ting på nettet:</b>
                        </td>
                        <td>
                                <select name="online_buys">
                                  <option>Vælg</option>
                                  <option value="never">Aldrig</option>
                                  <option value="rarely">Sjældent</option>
                                  <option value="sometimes">Nogle gange</option>
                                  <option value="often">Ofte</option>
                                </select>
                        </td>
                        <td>
                            <a href="" title="Klik her for udførlig beskrivelse" onclick="window.open('help/online_buys.html','Beskrivelse','width=450,height=100','location=no','screenY=100','screenX=200');return false;"><img src="help.jpg" border="0" /></a>
                        </td>
                            </label></p>
                    </tr>
                </table>
                    <p><div align="right"><input type="submit" name="submit" value="Videre"></div>
                    <input type="hidden" name="personal_done" value="TRUE" /></p>
                </form>
Avatar billede jakobdo Ekspert
03. maj 2007 - 15:31 #1
Nu har jeg lige kort læst dit spørgsmål, samt din kode igennem.
Jeg ville jo gribe selv survey-koden an på følgende måde:

step1.php
Her stiller vi så alle spørgsmål, kontrollere om alt er ok osv.
Når alt er ok, så sætter vi f.eks. en $_SESSION['step'] = 2;
step2.php tjekker så om $_SESSION['step'] == 2, eller step1.php
sådan kan du så lave del tjek undervejs, og gemme samtlige svar i et array, som så i sidste step behandles og gemmes i en database.
Avatar billede johnnyhb Nybegynder
03. maj 2007 - 15:40 #2
Ja, det er en ordentlig bid, det ved jeg.
Men designet af siden er desværre mere eller mindre fastagt.

Derfor de "simple" spørgsmål:
1. Hvis et array får sine keys men de ikke bliver sat til at være noget, er deres værdi NULL?
2: Kan man tjekke en værdi i et array således:
<i>if (!isset(array['gender'])
  $errors[] = 'Du har ikke intastet dit køn!';
  } else {
  $answers['gender'] = ($_POST['gender']);
  }</i>
3: Hvis jeg bruger f.eks. header("Location:næste_side"); Exit;
-Bliver værdierne i arrayet så nulstillet?
4. Jeg kan jo bare lave en require på den samme side igen, men jeg er i tvivl om det vil resultere i at koden bag siden vil blive 'underlig'.
Avatar billede jakobdo Ekspert
03. maj 2007 - 18:03 #3
1: Hvis vi siger du har en værdi, eller forventer at have en værdi, f.eks. i $_POST['value'] og så sætter:

$array['value'] = $_POST['value'];

Hvis $_POST['value'] er tom, så vil key blive sat, en selve værdien vil være tom.
Du bør dog kunne kontrollere om den er sat, ved at teste:
if(empty($_POST['value']))

2: Ja.
3: Ja, du skal indlæse array'et i en session.
Du skal kigge på serialize()
4: Forstår dig ikke helt.
Avatar billede johnnyhb Nybegynder
03. maj 2007 - 19:14 #4
Du er dælme effektiv, tak:)
Nu er spørgsmål 1,2 og 3 ude af verden vist.

Mht spørgsmål 4, så forklarer jeg mig lige lidt bedre.

Hvis én af mine tjecks fejler og en værdi ikke er sat, så vil scriptet udskrive alle fejl sammen med en fejlmeddelelse - hvilket er godt.
Men ved samme lejlighed skal jeg have gentaget HTML-formen således at bruger kan prøve igen med det samme uden at skulle trykke på links eller noget som helst.
Min ide var således bare at gøre således:
else {
echo '    <h1 id="mainhead">Oplysninger manger!</h1>
                <p class="error">Alle felter skal være oplyst:<b>';
                foreach ($errors as $msg) {
                    echo "    - $msg<br />\n";
                    }
            echo '    </p><p>Intast igen, tak.</p><p><br /></p>';
require(navnet på siden, så den bliver loadet igen);

Dette vil dog nok overskrive fejlmeddelelsen.
Hvordan kan jeg ellers gøre det?

PS. Du høster snart alle points - det er top dollar.
Avatar billede jakobdo Ekspert
03. maj 2007 - 20:04 #5
Hvad med noget i denne stil:

<?php
//http://www.eksperten.dk/spm/776454

$errorMsg = array();

if(isset($_POST['mySubmit']))
{
    if(empty($_POST['myName']))
    {
        $errorMsg['myName'] = 'Fejl: Navn er ikke udfyldt';
    }
    if(empty($_POST['myEmail']))
    {
        $errorMsg['myEmail'] = 'Fejl: Email er ikke udfyldt';
    }
   
    if(count($errorMsg)==0)
    {
        echo 'Alt er udfyldt, vi rykker til n&aelig;ste side!';
        exit();
    }
}

echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
if(isset($errorMsg['myName']))
{
    echo '<h5>'.$errorMsg['myName'].'</h5>';
}
echo 'Navn: <input type="text" name="myName" value="';
echo (empty($_POST['myName']))?'':strip_tags($_POST['myName']);
echo '" /><br />';
if(isset($errorMsg['myEmail']))
{
    echo '<h5>'.$errorMsg['myEmail'].'</h5>';
}
echo 'Email: <input type="text" name="myEmail" value="';
echo (empty($_POST['myEmail']))?'':strip_tags($_POST['myEmail']);
echo '" /><br />';
echo '<input type="submit" name="mySubmit" value="SEND" /><br />';
echo '</form>';

?>

Du kan se koden i effekt her: http://www.codebreaker.dk/exp/776454exp.php
Håber det er noget i den stil du tænker på?
Avatar billede johnnyhb Nybegynder
19. maj 2007 - 15:39 #6
Jeg vil meget gerne give dig points, men jeg kan ikke hitte ud af hvordan - kan du give mig en pointer?
Avatar billede jakobdo Ekspert
20. maj 2007 - 16:58 #7
Du kan acceptere dette svar.
Avatar billede jakobdo Ekspert
21. maj 2007 - 09:05 #8
Jeg takker for point og antager du fik det til at virke?
Avatar billede johnnyhb Nybegynder
21. maj 2007 - 09:17 #9
Ja, dog blev alle løsninger ændret til noget helt andet som er meget smartere, hvis du spørger mig. Men sådan er det når man selv finder på ting;-)

MEn det betyder jo ikke at du ikke hjalp mig alligevel:-)
Avatar billede jakobdo Ekspert
21. maj 2007 - 09:36 #10
:o)
Avatar billede jakobdo Ekspert
21. maj 2007 - 09:36 #11
Er det et svar du vil dele med os?
Avatar billede johnnyhb Nybegynder
21. maj 2007 - 09:39 #12
Ja, men desværre ikke lige nu.
Jeg skulle bruge alt dette til min bacheloropgave - og nu har jeg travlt som bare pokker med at skrive den.

Derfor bruger jeg ikke lige tiden til at forfatte en større afhandling her, lige de næste 7 dage;-)
Avatar billede jakobdo Ekspert
21. maj 2007 - 10:08 #13
Bare i orden! :o)
Held og lykke med opgaven.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester