Kontrola dat – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Kontrola dat – PHP – Fórum – Programujte.comKontrola dat – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
pejtrik0
Newbie
18. 10. 2015   #1
-
0
-

Zdravim lidi,

tak začnu od začátku. Po přihlášení na vás vyskočí okno "prompt" z JS zadáte číslo např 3, po potvrzení potřebuju aby mi vyjeli data z DB - to není problém. Jsou to otázky s možnými třemi odpověďmi (radio btn). A tady to začíná jak to bude nejlepší vypsat? Já to mám ted takhle:

if (mysqli_num_rows($result) > 0) {
    // output data of each row     
    while($row = mysqli_fetch_array($result)) {
      
      $_SESSION['frmContent'] = ("<form name='question_block'>      
        <div id='user_quest_block' class='' method='post' name='num_questions'>  
        <input type='hidden' name=".$row['ID']." />
        <div class='question_area'>".$row['otazka']."</div>
        <div class='quest_posibility'>".$row['odpoved_A']."<br><input type='radio' name='odpoved' value='A' /></div>
        <div class='quest_posibility'>".$row['odpoved_B']."<br><input type='radio' name='odpoved' value='B' /></div>
        <div class='quest_posibility'>".$row['odpoved_C']."<br><input type='radio' name='odpoved' value='C' /></div>  
      </div></form>");    
      
     // echo $row[0]."  ".$row[1]."  ".$row[2]." ".$row[3]." ".$row[4]."  ".$row[5]."  ".$row[6]."  ".$row[7]."<br>";
      
      require("forms.php");
      echo $_SESSION['frmContent'];  
     
  /*  $test = array (
          'id' => $row['ID'],
          'otazka' => $row['otazka'],
          'odpovedA' => $row['odpoved_A'],
          'odpovedB' => $row['odpoved_B'],
          'odpovedC' => $row['odpoved_C']
     );
     print_r ($test);     */
         
    }


a nevim jestli třeba nebude lepší to udělat jako to pole. Jenže další problém je s tlačítkem. Potřebuju aby tam bylo potom co zadáte odpovědi tak aby tam bylo tlačítko, které mi potom porovná ty odpovědi co zadá uživatel jestli je to správně v DB a podle toho se změní pozadí toho bloku na červenou nebo zelenou. Já už se s tím peru několik dní vyzkoušel jsem snad vše a nevim si s tim vůbec rady. Ještě posílám screen jak chci aby to vypadalo.

Připojen obrázek.

Moc děkuju za každou radu. To tlačítko nemusí bejt JS to jsem jenom zkoušel nevim jak jinak potvrdit jakoby tři formuláře.

Nahlásit jako SPAM
IP: 89.102.83.–
Reklama
Reklama
ondrej39+1
Věrný člen
18. 10. 2015   #2
-
0
-

#1 pejtrik
Nenačítej takhle formulář do session, to je hnus. Neřeš tři formuláře, ale vykreslit otázky do formuláře jednoho. Před while cyklem začni tag form s příslušnou akcí, po while cyklu přidej tlačítko pro odeslání formuláře a ukonči tag form.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
pejtrik0
Newbie
18. 10. 2015   #3
-
0
-

to jsem neměl v session to až ted co jsem zkoušel něco jinýho. a to co říkáš už jsem taky dělal. problém potom je s těma radio btnma potom mam jako by obsahy ale jde mi zmáčknout jenom jedno radio pro všechny tři obsahy a tlačítko k tomu ještě nedělá příslušnou akci

Nahlásit jako SPAM
IP: 89.102.83.–
ondrej39+1
Věrný člen
18. 10. 2015   #4
-
0
-

#3 pejtrik
Musíš samozřejmě nějak oddělit ty jednotlivé radio buttonky. Třeba si dej do cyklu nějaký counter a ten použij u těch radiobuttonů jako atribut name. Tím si to rozdělíš.

Že tlačítko nedělá příslušnou akci, to myslíš jak?

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
peter
~ Anonymní uživatel
2547 příspěvků
19. 10. 2015   #5
-
0
-

1. error_reporting

@ini_set('error_reporting', E_ALL|E_STRICT);
@ini_set("display_errors", "1");
error_reporting(E_ALL|E_STRICT);

2. echo pouzivat jenom na konci, ostatni do promennych

3. Pokud se chces bavit o konkretnim kodu, pak sem musis dat vse, co je treba pro nasimulovani kodu. Ne kazdy si chybejici casti muze chtit dopisovat a tak ti treba neodpovi.

4. Vyhybat se js alert hlaskam jako prompt. Moderni prohlizece dost ruzna vyskakovaci okna blokuji, hlasky jsou mezi nimi. Zvlast proto, ze hlasky blokuji zbytek stranky do odkliknuti.

5. Do session nedavat dlouhy obsah. Session se prenasi s kazdym klikem.

6. Potrebujes to resit v php? Co kdyby jsi to resil cele javascriptem. Pri nacteni stranky si do js vytahnes odpovedi a pak uz je to cele js problem. Pokud ti nevadi, ze zkusenejsi uzivatel si prohlidne kod stranky a odpovedi precte. Ale muzes je treba sifrovat.

7. input type radio, podle jakpsatweb.cz se sdruzuje podle stejneho jmena (coz jsou naproste zaklady html)
name = "otazka[0]"> a
name = "otazka[0]"> b
name = "otazka[0]"> c
name = "otazka[1]"> a
name = "otazka[1]"> b
name = "otazka[1]"> c

8. vypis postu/getu/$row mas lepsi pomoci print_r (pripadne i s echo '<pre>').

9.
 

<form id=xxx></form>

<script>
var form, data;
data = [
{qst:'111',ans:['aaa','bbb','ccc'],true_ans:[0]},
{qst:'222',ans:['aaa','bbb','ccc'],true_ans:[2]}
];
form = document.getElementById('xxx');

function vypis1(n,data)
{
var i,str;
str = '\
\n<div class="qb">\
\n  <div class="q">'+data[n].qst+'<\/div>\
';
for (i=0;i<data[n].ans.length;++i)
	{
	str += '\n  <div class="a"><label><input type="radio" name="ans['+n+']" value="'+i+'"\/>'+i+'. '+data[n].ans[i]+'<\/label><\/div>';
	}
str += '\
\n  <div class="b"><input type="button" value="Test" onclick="vypis2('+n+',data,this)"\/><\/div>\
\n<\/div>\
';
return str;
}

function vypis2(n,data,obj)
{
var i,str,ans;
str = '\
\n  <div class="q">'+data[n].qst+'<\/div>\
';
ans = data[n].true_ans[0];
for (i=0;i<data[n].ans.length;++i)
	{
	str += '\n  <div class="a"><label><input type="radio" name="ans['+n+']" value="'+i+'"\/>'+i+'. '+data[n].ans[i]+'<\/label> '+(ans==i?'Spravna odpoved':'')+'<\/div>';
	}
str += '\
\n  <div class="b"><input type="button" value="Test" onclick="vypis2('+n+',data,this)"\/><\/div>\
';
if (obj!=null) {obj.parentNode.parentNode.innerHTML = str;}
return str;
}

function vypis1_vse(form,data)
{
var i,str;
str = '';
for (i=0;i<data.length;++i)
	{
	str += vypis1(i,data)
	}
form.innerHTML = str;
}

vypis1_vse(form,data);
</script>
Nahlásit jako SPAM
IP: 2001:718:2601:26c:a058:7a...–
peter
~ Anonymní uživatel
2547 příspěvků
19. 10. 2015   #6
-
0
-

si tam muzes dat
alert(str);
form.innerHTML = str;
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:a058:7a...–
pejtrik0
Newbie
19. 10. 2015   #7
-
0
-

@peter:

díky za odpověd peter určitě se z toho poučím. Každopádně to byla poslední (SESSION) zoufalá možnost protože už jsem nevěděl kam dál...mam to ted tím způsobem před cyklem form potom vyypíšu obsah a potom volám ten </form>...tim JS to bych asi nevyřešil to jsem tam dal jenom, že musim :) a takovej kod co si mi tu poslal bych nikdy asi nevymyslel, takže to zkusím vyřešit tím php. to že se radia sdružujou podle stejného jména samozřejmně vím jenom mě nenapadlo udělat ten count a změnit name což ted řeším.

@ondrej39:

no mám tam ten submit a form má nějakou action zatím v mém případě to mělo načíst jinou stránku, ale to se zatím neděje. ale s tím si už snad nějak poradím.

myslel jsem, že až se mi povede ten count tak bych tomu tlačítku dal funkci onclick a potom bych už jen porovnal s databází podle toho id a změnil bych třídu celému tomu bloku a podle toho by se změnila ta barva.

Nahlásit jako SPAM
IP: 89.102.83.–
peter
~ Anonymní uživatel
2547 příspěvků
19. 10. 2015   #8
-
0
-

"takovej kod co si mi tu poslal bych nikdy asi nevymyslel"
? V podstate je to tvuj kod. Jen otazky mam pres cyklus. Ty lomitka na konci radku tam musi byt protoze javascript.

ja ma 2 pole, indexove { } a ciselne [ ], php to vede oboji jako array nebo ma taky class pro objekty.
input = {name: 'jmeno', id: 'idecko', value: 'tlacitko', type:'button'};
<input type="button" name="jmeno" id="idecko" value="tlacitko">
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:a058:7a...–
peter
~ Anonymní uživatel
2547 příspěvků
20. 10. 2015   #9
-
0
-

ja ma 2 pole = JS ma 2 druhy poli

Nahlásit jako SPAM
IP: 2001:718:2601:26c:5c70:2b...–
pejtrik0
Newbie
3. 11. 2015   #10
-
0
-

tak z toho co jste mi tu radili mi bylo vše k ničemu až na to vyvolání toho formu před a vypisovat jen obsah...každopádně jsem se přiučil a házím kod kdyby někdo hledal něco podobného aby to ty radia vypisovalo jako bloky po třech tudíž správně

$frmContent = ("      
        <div id='user_quest_block' method='post' name='num_questions'>  
        <input type='hidden' name=".$row['ID']." />
        <div class='question_area'>".$row['otazka']."</div>
          <div class='quest_posibility' name='test_odpoved'>
            <label><input type='radio' name='odpoved[$i]' value='A' />".$row['odpoved_A']."</label>
            <label><input type='radio' name='odpoved[$i]' value='B' />".$row['odpoved_B']."</label>
            <label><input type='radio' name='odpoved[$i]' value='C' />".$row['odpoved_C']."</label>
          </div>
        </div>");


$i = 0;
    
if (mysqli_num_rows($result) > 0) {
    // output data of each row
     //require("forms.php");
    // 
    echo "<form name='question_block' id='formDiv'><div id='main_div_form'>";
    
    while($row = mysqli_fetch_assoc($result)) {
    
      require("forms.php");
    
      if($frmContent==true)
      {
        print $frmContent;
      }                                                    
      $i++;     
    }
        
    echo "<input type='button' value='Zkontrolvat' id='check' onclick='checkAnswers()' />
    </div></form>";
}


 a tímto to hasne...

ted už jenom propojit ajax s php kvůli kontrole a je to :)

Nahlásit jako SPAM
IP: 89.102.83.–
peter
~ Anonymní uživatel
2547 příspěvků
3. 11. 2015   #11
-
0
-

Neni mi jasny smysl
<input type='hidden' name=".$row['ID']." />
To by asi melo smyl, kdybys mel vic formularu. Takhle postaci kdyz to pouzijes misto odpoved[$i], ne?

 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:508e:71...–
pejtrik0
Newbie
3. 11. 2015   #12
-
0
-

#11 peter
když klikneš na zkontrolovat tak se nesmí refreshnout stránka (to docílíš tim ajaxem s php) a ja potřebuju zkontrolovat ty zadané hodnoty uživatelem s těma co jsou v databázi a podle toho se těm blokům změní pozadí...a to ID potřebuješ k tomu aby jsi mohl zavolat ten SQL příkaz where = $row['ID] a zároven pro uživatele není důležitý a nemusí jej vidět

a ty bloky jsou dynamický ty před tim než je uvidíš dostaneš otázku kolik chceš otázek a podle toho ti vyjede počet těch bloků

Nahlásit jako SPAM
IP: 217.11.234.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Podobná vlákna

Kontrola vstupních dat — založil polarkac

Kontrola dat v Memu — založil sXe

Stoj.dat + 20 = bezi.dat — založil Leopik

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý