Ahojte
Chcel by som Vás poprosiť o radu, nakoľko som hľadal všade možne, ale nenašiel som riešenie.
Urobil som web, kde sa hodnotia výrobky... Ak niekto ide hodnotiť výrobky ako prvý, tak musí pracne nahodiť všetky údaje výrobku. Druhý užívateľ toto už nemusí robiť, klikne si na stránku posledné a iba zadá body posledným 10 výrobkom, ktoré sa mu zobrazia. Samozrejme musí byť prihlásený.
Urobil som to tak, že do formulára, do inputov som si natiahol posledných 10 hodnôt z db.
Dané inputy majú name ako pole.
<!-- Výpis hodnôt z db pre posledných 10 výrobkov -->
<?php
$db = DB();
$data = $db->query("
SELECT * FROM hodnotenie GROUP BY davka, plnenie_den, plnenie_mesiac, plnenie_rok ORDER BY id DESC LIMIT 10;
");
?>
<form class="posledne" action="../partials/zapis_posledne.php" method="GET">
<table class="posledne_tabulka">
<!-- Popis stĺpcov formulára, v ktorom je vypísaných posledných 10 hodnôť s možnosťou vloženia do jedného imputu - body -->
<?php
echo '<thead>
<tr>
<th class="radabunka posledne_rada">Rada</th>
<th class="odrodabunka">Odroda</th>
<th class="rocnik">Ročník</th>
<th class="datumplneniabunka">Dátum plnenia</th>
<th class="davkabunka">Dávka</th>
<th class="bodybunka">Body</th>
</tr>
</thead>';
?>
<?php foreach ($data as $item) : ?>
<tr>
<td class="posledne_rada">
<label>
<?php echo $item['rada'] ?>
<input type="hidden" name="rada[]" value="<?php echo $item['rada'] ?>" >
</label>
</td>
<td>
<label>
<?php echo $item['odroda'] ?>
<input type="hidden" name="odroda[]" value="<?php echo $item['odroda'] ?>" >
</label>
</td>
<td>
<label>
<?php echo $item['rocnik'] ?>
<input type="hidden" name="rocnik[]" value="<?php echo $item['rocnik'] ?>" >
</label>
</td>
<td>
<label>
<?php echo $item['plnenie_den'].".".$item['plnenie_mesiac'].". ".$item['plnenie_rok']?>
<input type="hidden" name="plnenie_den[]" value="<?php echo $item['plnenie_den']?>" >
<input type="hidden" name="plnenie_mesiac[]" value="<?php echo $item['plnenie_mesiac']?>" >
<input type="hidden" name="plnenie_rok[]" value="<?php echo $item['plnenie_rok']?>" >
</label>
</td>
<td>
<label>
<?php echo $item['davka'] ?>
<input type="hidden" name="davka[]" value="<?php echo $item['davka'] ?>" >
</label>
</td>
<td>
<label>
<input class="posledne_input_body" type="number" name="body[]" value="" >
</label>
</td>
</tr>
<?php endforeach; ?>
<table>
<input type="hidden" name="hodnotitel" value="<?php echo $hodnotitel ?>">
<div class="button_ram">
<input class="login_button" type="submit" value="Poslať">
</div>
</form>
Tento formulár sa odošle na ďalšiu stránku pre spracovanie, kde odchytávam jednotlivé polia.
$rada = $_GET['rada'];
$odroda = $_GET['odroda'];
$rocnik = $_GET['rocnik'];
$plnenie_den = $_GET['plnenie_den'];
$plnenie_mesiac = $_GET['plnenie_mesiac'];
$plnenie_rok = $_GET['plnenie_rok'];
$davka = $_GET['davka'];
$body = $_GET['body'];
$id_uzivatela = $_GET['hodnotitel'];
/*V prom kroku sa v db dohľadá hodnota s danými podmienkami, ak sa nájde do premennej sa uloží hodnota 1 ak nie tak 0*/
/*Pokiaľ je výpis hodnoty z db 0 vykoná sa zápis do db pre daný výrobk, ak je hodnota 1 a viac, vypíše sa výstraha, že daný výrobk bol hodnotený*/
/*Následne sa vykoná zápis do db pre daný výrobok*/
/*Užívateľ môže hodnotiť všetkých posledných 10 výrobkov, alebo len ktoré chce, ostatné hodnoty môžu byť prázdne*/
/*Ak užívateľ už výrobok hodnotil, do db sa zapíšu hodnoty len výrobkov ktoré nehodnotil a pre tie ktoré hodnotil sa zobrazí oznámenie*/
/*
-------------------------------------
Rýchlo hodnotenie pre hodnotu 0
------------------------------------
*/
if (!empty($body[0]) && $body[0]<100)
{
$db = DB();
$hodnotil_uz = $db->query("
SELECT COUNT(id_uzivatela) FROM hodnotenie
WHERE rada = '$rada[0]' AND odroda = '$odroda[0]' AND rocnik = '$rocnik[0]' AND id_uzivatela = '$id_uzivatela' AND plnenie_rok = '$plnenie_rok[0]' AND plnenie_mesiac = '$plnenie_mesiac[0]' AND plnenie_den = '$plnenie_den[0]' AND davka = '$davka[0]';
");
foreach ($hodnotil_uz as $hodnotil) { $toto0 = $hodnotil[0]; }
if ($toto0 == 0)
{
$db = DB();
$data = $db->query("
INSERT INTO hodnotenie
(rada, odroda, rocnik, body, id_uzivatela, plnenie_rok, plnenie_mesiac, plnenie_den, davka, date)
VALUES
('$rada[0]', '$odroda[0]', '$rocnik[0]','$body[0]', '$id_uzivatela','$plnenie_rok[0]', '$plnenie_mesiac[0]', '$plnenie_den[0]', '$davka[0]', CURRENT_TIMESTAMP); ");
}else
{
$vystraha0 = 'Víno '.$odroda[0].' ste už raz hodnotili.';
}
}
/*
-------------------------------------
Rýchlo hodnotenie pre hodnotu 1
------------------------------------
*/
if (!empty($body[1]) && $body[1]<100)
{
$db = DB();
$hodnotil_uz = $db->query("
SELECT COUNT(id_uzivatela) FROM hodnotenie
WHERE rada = '$rada[1]' AND odroda = '$odroda[1]' AND rocnik = '$rocnik[1]' AND id_uzivatela = '$id_uzivatela' AND plnenie_rok = '$plnenie_rok[1]' AND plnenie_mesiac = '$plnenie_mesiac[1]' AND plnenie_den = '$plnenie_den[1]' AND davka = '$davka[1]';
");
foreach ($hodnotil_uz as $hodnotil) { $toto1 = $hodnotil[0]; }
if ($toto1 == 0)
{
$db = DB();
$data = $db->query("
INSERT INTO hodnotenie
(rada, odroda, rocnik, body, id_uzivatela, plnenie_rok, plnenie_mesiac, plnenie_den, davka, date)
VALUES
('$rada[1]', '$odroda[1]', '$rocnik[1]','$body[1]', '$id_uzivatela','$plnenie_rok[1]', '$plnenie_mesiac[1]', '$plnenie_den[1]', '$davka[1]', CURRENT_TIMESTAMP); ");
}else
{
$vystraha1 = 'Víno '.$odroda[1].' ste už raz hodnotili.';
}
}
/*
-------------------------------------
Rýchlo hodnotenie pre hodnotu 2
------------------------------------
*/
if (!empty($body[2]) && $body[2]<100)
{
$db = DB();
$hodnotil_uz = $db->query("
SELECT COUNT(id_uzivatela) FROM hodnotenie
WHERE rada = '$rada[2]' AND odroda = '$odroda[2]' AND rocnik = '$rocnik[2]' AND id_uzivatela = '$id_uzivatela' AND plnenie_rok = '$plnenie_rok[2]' AND plnenie_mesiac = '$plnenie_mesiac[2]' AND plnenie_den = '$plnenie_den[2]' AND davka = '$davka[2]';
");
foreach ($hodnotil_uz as $hodnotil) { $toto2 = $hodnotil[0]; }
if ($toto2 == 0)
{
$db = DB();
$data = $db->query("
INSERT INTO hodnotenie
(rada, odroda, rocnik, body, id_uzivatela, plnenie_rok, plnenie_mesiac, plnenie_den, davka, date)
VALUES
('$rada[2]', '$odroda[2]', '$rocnik[2]','$body[2]', '$id_uzivatela','$plnenie_rok[2]', '$plnenie_mesiac[2]', '$plnenie_den[2]', '$davka[2]', CURRENT_TIMESTAMP); ");
}else
{
$vystraha2 = 'Víno '.$odroda[2].' ste už raz hodnotili.';
}
}
/*
-------------------------------------
Rýchlo hodnotenie pre hodnotu 9
------------------------------------
*/
if (!empty($body[9]) && $body[9]<100)
{
$db = DB();
$hodnotil_uz = $db->query("
SELECT COUNT(id_uzivatela) FROM hodnotenie
WHERE rada = '$rada[9]' AND odroda = '$odroda[9]' AND rocnik = '$rocnik[9]' AND id_uzivatela = '$id_uzivatela' AND plnenie_rok = '$plnenie_rok[9]' AND plnenie_mesiac = '$plnenie_mesiac[9]' AND plnenie_den = '$plnenie_den[9]' AND davka = '$davka[9]';
");
foreach ($hodnotil_uz as $hodnotil) { $toto9 = $hodnotil[0]; }
if ($toto9 == 0)
{
$db = DB();
$data = $db->query("
INSERT INTO hodnotenie
(rada, odroda, rocnik, body, id_uzivatela, plnenie_rok, plnenie_mesiac, plnenie_den, davka, date)
VALUES
('$rada[9]', '$odroda[9]', '$rocnik[9]','$body[9]', '$id_uzivatela','$plnenie_rok[9]', '$plnenie_mesiac[9]', '$plnenie_den[9]', '$davka[9]', CURRENT_TIMESTAMP); ");
}else
{
$vystraha9 = 'Víno '.$odroda[9].' ste už raz hodnotili.';
}
}
if(!empty($vystraha0) or !empty($vystraha1) or !empty($vystraha2) or !empty($vystraha3) or !empty($vystraha4) or !empty($vystraha5) or !empty($vystraha6) or !empty($vystraha7) or !empty($vystraha8) or !empty($vystraha9))
{
$_SESSION['posledne_vystraha'] =
'
<tr><td>'.$vystraha0.'</td></tr>
<tr><td>'.$vystraha1.'</td></tr>
<tr><td>'.$vystraha2.'</td></tr>
<tr><td>'.$vystraha3.'</td></tr>
<tr><td>'.$vystraha4.'</td></tr>
<tr><td>'.$vystraha5.'</td></tr>
<tr><td>'.$vystraha6.'</td></tr>
<tr><td>'.$vystraha7.'</td></tr>
<tr><td>'.$vystraha8.'</td></tr>
<tr><td>'.$vystraha9.'</td></tr>
';
die(header("Location: ../pages/posledne.php"));
}else {
$_SESSION['posledne_vystraha'] = '<p class="posledne_session">Vaše hodnotenie bolo odoslané.</p>';
die(header("Location: ../pages/posledne.php"));
}
?>
Problém je, že ten zápis do databázy robím takto ťažkopádne, kde vkladám každý riadok poľa osobitne.
Pri každom riadku musím zadať číslo hodnoty v poli až po 10.
Určite sa to dá cez nejaký cyklus.
Ak má z Vás niekto čas, vedeli by ste ma aspoň naviesť prosím?
Stránka funguje, ale ideálne by bolo, keby si niekde hore v stránke môžu užívatelia nastavovať počet zobrazenia posledných produktov. Toto však môžem dosiahnuť len tak, že to vkladanie do db bude cez nejaký cyklus... to je jedno, hlavne potrebujem vedieť ako vložiť do db viacnasobné vloženie cez nejaký cyklus, bez toho aby som tam tie riadky ručne vypísal...
Čiže, čo by bol ideálny stav?
Pri zobrazení stránky posledné, by si užívateľ mohol nastaviť koľko posledných výrobkov sa mu má zobraziť vo formulári. To by šlo ľahko, len by som dal do premennej možnosť nastaviť čísla a podľa toho by sa upravoval limit zobrazenia z db.... asi tak nejako. Ale potom na stránke kde sa prijímajú dáta sa vykonáva kontrola v db, či už daný výrobok hodnotil, ak nie, tak sa vykoná zápis. Ako toto ošetriť cyklom a nevypisovať to takto osobitne neviem.
V zdrojovom kóde vyššie som uviedol len 3 hodnoty zápisu do db.