Tvorba vice zaznamu v db pomocí oop – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Tvorba vice zaznamu v db pomocí oop – PHP – Fórum – Programujte.comTvorba vice zaznamu v db pomocí oop – PHP – Fórum – Programujte.com

 

tribalcz0
Super člen
5. 12. 2013   #1
-
0
-

ahoj nadpis je možná zavádějící ale nic jiného mě nenapadlo v oop začínám a tvořím si různé „widgety“ momentálně dělám anketu která mi nedělá problém ale chci aby ta anketa měla i funkci kde si založíš vlastní anketu ale ne takovou která bude mít jen odpovědi true/false ale více tzn. po vyplnění formuláře a kliku na tlačítko se spustí script kde se vše nastaví a zde je kámen úrazu uživatel si nastaví název ankety a pak možnosti název je ok uživatel napíše třeba herci a do db se vytvoří tabulka anketa_herci identifikátor herci_id a zbytek je v roli uživatele ale za boha nemůžu přijít na to jak to udělat aby si každý uživatel mohl dát libovolný počet možností napadlo mne použít regulerní výraz že by se jednotlivé názvy možností oddělovaly čárkou ale výsledný objekt je zrůdnost

Nahlásit jako SPAM
IP: 178.209.131.–
Kowalsky950
Stálý člen
5. 12. 2013   #2
-
0
-

#1 tribalcz
Napíšeš přes JS, aby se ti tam postupně přídavali inputy pro tabulku, poté to pošleš v poli na server. Něco jsem zplácal, snad ti to pomůže.
 

<?php
	if(isset($_POST['nazev']))
	{
		$nazev=$_POST['nazev'];
		$dotaz="CREATE TABLE $nazev(";
		foreach($_POST['bunka'] as $jednaBunka)
			if($jednaBunka!="") $dotaz .= "$jednaBunka VARCHAR(50),";
		$dotaz .= "id INT PRIMARY KEY AUTO_INCREMENT);";
		echo $dotaz;
	}
?>
<!doctype HTML>
<html>
<head>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script>
var posledniIndex=0;
$(document).ready(function() {
	var funkceProPridaniPolicek=
	function()
	{
		var retezecProPosledniIndex="input[name $='["+posledniIndex+"]']";
		if($(retezecProPosledniIndex).length>0 && $(retezecProPosledniIndex).val()!="")
			{
			var novyElement=$("<input/>",{"name":"bunka["+(++posledniIndex)+"]","type":"text"});
			novyElement.keypress(funkceProPridaniPolicek);
			novyElement.insertBefore($("input[type='submit']"));
			}
	};
	$("input[name^='bunka']").keypress(funkceProPridaniPolicek);
});
</script>
</head>
<body>
<form action="index.php" method="POST">
	<input type="text" name="nazev" />
	<input type="text" name="bunka[0]"/>
	<input type="submit"/>
</form>
</body>
</html>


Ale zamyslel bych se jestli je to vážně nutné, nebylo by jednodušší ukládat to ve stejných tabulkách? Budeš muset vyřešit uživatele, kam se bude který dostávat atd atd......
Jinak k tomu příkladu, samozřejmě by to chtělo řadu vylepšení jako validace, hodnoty atd.....ale to už snad zvladneš :)

Nahlásit jako SPAM
IP: 90.176.114.–
tribalcz0
Super člen
5. 12. 2013   #3
-
0
-

Díky taky sem nad tím přemýšlel ještě uvidíme  a ještě bych ppotřeboval radu ohledně fetchAll() a to takouvou jestli jde nějak pomocí toho vypsat všechny ip adresy do podmínky ale zároveň aby se vypsala jen jedna chybová hláška dávám sem kod jedná se o funkci overIp dále jestli by jste mi mohli říci zda je následující kód z pohledu oop alespoň trochu košer je to první script po dosažení poloviny serialu na oop

kód v index.php


                $anketa = new Anketa();
                $oznameni = $anketa->pripisHlas();
                if($oznameni)
                    echo('<strong>' . $oznameni . '</strong>');
                $anketa->vypis();
                

kód v Anketa.php

<?php

class Anketa {
    
    private function pridejHlas($hlas)
    {
        Databaze::dotaz('INSERT INTO `anketa` (`hlas`, `ip`, `datum`) VALUES (?, ? ,NOW())', array($hlas, $_SERVER['REMOTE_ADDR']));
    }
    
    private function sectiTrue()
    {
        $vysledek = Databaze::dotaz('SELECT `hlas` FROM `anketa` WHERE `hlas` = 1');
        $data = $vysledek->rowCount();
        return $data;
    }
    
    private function sectiFalse()
    {
        $vysledek = Databaze::dotaz('SELECT `hlas` FROM `anketa` WHERE `hlas` = 0');
        $data = $vysledek->rowCount();
        return $data;
    }
    
    private function overIp()
    {
        $vysledek = Databaze::dotaz('SELECT `ip` FROM `anketa`');        $data = $vysledek->fetch();
        return $data['ip'];
        
    }

    private function zobrazHlasy ()
    {   
        echo('ano - ' . $this->sectiTrue() . '<progress value="' . $this->sectiTrue() . '" max="100"></progress>');
        echo(' ');
        echo('ne - ' . $this->sectiFalse(). '<progress value="' . $this->sectiFalse() . '" max="100"></progress>');
    }
    
    public function zobrazFormular()
    {
        echo('<form method="post">');
        echo('<input type="radio" name="radio" value="1" />');
        echo('<input type="radio" name="radio" value="0" />');
        echo('<input type=submit name="hlasuj" Value="hlasuj" />');
        echo('</form>');
    }


    public function vypis()
    {
        $this->zobrazFormular();
        $this->zobrazHlasy();
    }
    
    public function pripisHlas()
    {
        if(isset($_POST['hlasuj']))
        {
            if($_POST['radio'] != "")
            {
                $hlas = $this->overIp();
                    if($_SERVER['REMOTE_ADDR'] == $hlas['ip'])
                    {
                        echo('Již jste hlasoval/a');
                    } else {
                $this->pridejHlas($_POST['radio']);
                header('Location: index.php');
                exit;
                       
                    }
            } else {
                return 'Musíte vyplnit odpověď';
            }
        }
    }
    
}

?>
Nahlásit jako SPAM
IP: 178.209.131.–
peter
~ Anonymní uživatel
4014 příspěvků
6. 12. 2013   #4
-
0
-

zad = id_ankety
zad_otazky = id_otazky
zad_odpovedi = id_odpovedi
zad_ot_odp = id_ankedy_id_otazka, id_odpoved
uziv_ot_odp = id_ankedy_id_uziv, id_otazka, id_odpoved (1,1,1,1 + 1,1,1,2 kdyz zaskrtne 2 odpovedi)

"fetchAll() a to takouvou jestli jde nějak pomocí toho vypsat všechny ip adresy do podmínky ale zároveň aby se vypsala jen jedna chybová hláška"

Tomu nerozumim, to nedava smysl. Ve tvem kodu zadna funkce fetchAll neni. V kodu od kowalskeho zadna funkce fetchAll neni. V php zadna funkce fetchAll neni. V mysql je metoda MySQLCursor.fetchall(), ale tu asi nemyslis. Sim, musis byt naprosto presny, jiank ti nikdo nebude rozumnet.
Predpokladejme, ze myslis php funkci mysql_fetch_assoc. Tu v tom kodu take nemas. Ale, predpokladejme. Jenze ta jen prevadi data z mysql do pole. Nic vic. Nemuze delat manipulace. Takze to opet nedava smysl.
Jedine, co dava smysl, ze bys potreboval upravit SQL dotaz (jaky?) tak, aby jsi dostal nejaky (jaky?) vysledek.

"vypsat všechny ip adresy do podmínky" - nedava to moc smysl, potrebujes do sql dotazu do WHERE napsat seznam ip adres? K tomu se pouziva
`sloupec` IN ('adresa1','adresa2','adresa3')

'SELECT `hlas` FROM `anketa` WHERE `hlas` = 0'
        $data = $vysledek->rowCount();
To taky nedava smysl, pro pocet radku se pouziva SELECT COUNT(`hlas`) ..., je rychlejsi, kdyz to spocita mysql, ktere to spocita na zaklade indexu, coz je cteni asi z jednoho policka, nez kdyz musi pracne ukladat data z kazdeho radku, posilat php, zabirat mu pamet a pak to ty cele zahodis a zajimate jen jedno cislo :)
Navic, pocitas nuly a jednicky, to staci napsat do jednoho dotazu, kde radek 0 bude pocet nul a radek 1 pocet jednicek. Da se to spojit treba pomoci prikazu UNION.

"do podmínky ale zároveň aby se vypsala jen jedna chybová hláška" - jakou chybovou hlasku myslis? Vubec nemame zdani, co tvuj kod ma presne delat, ani nevime, co skutecne dela, takze tezko muzeme v nem hledat konkretni hlasku a jestli ji tam vubec mas, treba. Co treba pridat priklad vypisu tech chybovych hlasek pro nejakou konkretni anketu. By jsme pak vedeli, co v tom kodu hledat. Treba mas nekde spatne cyklus, ktery by stacilo zastavit pomoci break;
if (nastala chyba) {echo "chyba"; break;}

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
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, 22 hostů

 

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