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
Fórum › PHP
Tvorba vice zaznamu v db pomocí oop
#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š :)
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ěď'; } } } } ?>
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;}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Součet celkové ceny (-z více záznamů) — založil jefii
OOP - Dedeni s vice tridama — založil Ruda
Tvorba více doméne v IIS7 — založil plasmo
Tvorba Menu pomocí flask-nav — založil petr0707
Moderátoři diskuze