Autor Zpráva
Majkelju
Profil
Ahoj, mám tento krátký kód:
<?
include "../_mysql.php";
$idAtributu=$_GET['idAtributu'];
$idPodskupina = $_GET['idPodskupina'];
$idSkupina = $_GET['idSkupina'];
$idZatrideni = $_GET['idZatrideni'];

$result = $db->query("
        SELECT `atribut_hodnoty`.`id` AS `id`,    
        `atribut_hodnoty`.`znacka` AS `znacka`,    
        `atribut_hodnoty`.`index` AS `index`
        FROM `atribut_hodnoty`
        WHERE `atribut_hodnoty`.`k_atribut`=$idAtributu
        ORDER BY `index` ASC
    ");
    
echo '<table>';    

echo '<tr><th style="padding:5px">Hodnota</th><th style="padding:5px">Index</th><th style="padding:5px">Koeficient</th></tr>';
$i=0;
while($row = $result->fetch_assoc()){
    $idHod=$row['id'];
    $result2 = $db->query("
        SELECT `atribut_skupiny`.`koef` AS `koef`    
        FROM `atribut_skupiny`
        WHERE `atribut_skupiny`.`k_hodnota`=$idHod
        AND `atribut_skupiny`.`k_skupina`=$idPodskupina
    ");
    $row2 = $result2->fetch_assoc();
    $koef[$i] = $row2['koef'];
   echo '<tr><td style="padding:5px">'.$row['znacka'].'</td><td style="padding:5px">'.$row['index'].'</td>
<td style="padding:5px"><input type="text" name="koef[]" value="'.$koef[$i].'"></td></tr>'; 
    $i++;
}
echo '</table>';
echo '<input name="ulozit_koef" type="submit" value="Uložit">';
?>

Na obrazovce se vypíšou nějaké údaje a k nim v inputu koeficienty. Ty můžu změnit a chci, aby při kliknutí na submit tlačítko se ty koeficienty uložily do databáze. SQL dotaz dám dohromady, spíš bych potřeboval poradit, jak se udělá samotný mechanismus toho uložení. Nejspíš tam bude nějaké if(isset), ale nevím jak, už se tu s tím chvíli trápím. V kódu jsem zvýraznil řádky s inputem a submit buttonem.
ShiraNai7
Profil
Načítej také identifikátor a používej ho jako klíč v názvu toho inputu:
<input type="text" name="koef['.$id_koef.']" value="'.$koef[$i].'" />
$id_koef je jen příklad. musíš si upravit dotaz.

(Celé bych to přepsal, určitě to jde udělat tak, aby nebyly poddotazy v cyklech).
peta
Profil
<?php
// write
$read = array('id','bbb','ccc');
$save = array();
foreach ($read as $key=>$value)
{
$val = isset($_POST[$value]) ? $_POST[$value] : '';
$save[$value] = $value." = '".mysql_real_escape_string($val)."'";
}
$name = 'id';
$id = $save[$name];
unset($name);
$query = "UPDATE `atribut_hodnoty` SET ".implode(", ",$save)." WHERE `".$id;
$result = $db->query($query);

// read
$query = "
        SELECT
          `id`,    
          `znacka`,    
          `index`
        FROM
          `atribut_hodnoty`
        WHERE
          `k_atribut` = %s
        ORDER BY
          `index` ASC
    ";
$result = $db->query(sprintf($query,$idAtributu*1));
$tpl_row = '<tr><td>%s</td><td>%s</td><td><input type="text" name="koef[]" value="%s"></td></tr>';
while($row = $result->fetch_assoc()){
   $tbody .= sprintf($tpl_row,$row['znacka'],$row['index'],'neco pro koef');
  }
echo '....' . $tbody . '...';
?>
Je to psane tak jako odhadem a neresi problem s koef, vice radku a pod. Ale to je drobna uprava (pridat k nazvu kazde promenne cislo radku, ktere pak umazes). Hlavne tam mas zbytecny nazev tabulky, kdyz v dotazu pouzivas jen jednu jedinou.

Edit: Jo, jestli neumis vyresit problem s koef, tak by bylo dobre sem dat priklad obou tabulek aspon pro 5 hodnot v tabulce atribut_skupiny. Neni mi jasne, jake data tam mas. Asi bych postupoval viz ShiraNai7. Pouzil mozna GROUP_CONCAT pro cteni a transakce pro zapis. V jednom projektu to kolega resi tak, ze "DELETE * FROM tabulka2 WHERE id_hodnota = 5" a pak treba 10x INSERT misto aby prepisoval UPDATEM.
Majkelju
Profil
Díky za pomoc, nějak jsem to poskládal a už to ukládá :) Ještě bych měl dotaz, jak v podmínce rozlišit, jestli v selectu je něco vybráno nebo není. Zkoušel jsem isset, =="" a ==NULL, ale vypadá to, že tudy cesta nevede :)
panther
Profil
Majkelju:
jak v podmínce rozlišit, jestli v selectu je něco vybráno nebo není
select myslis databazovy, ze? mysql_num_rows
Majkelju
Profil
panther: myslím select jako "combobox" ....ten jsem tam ještě přidal, tady v tom kódu není.
panther
Profil
Majkelju:
ok, ja si to puvodne myslel, ale kdyz jsem ho nikde nevidel...

Co znamena „jestli v selectu je něco vybráno nebo není“? Select se odesle vzdy, pokud neni vybrana zadna polozka, odesle se ta prvni (protoze je vybrana).

Pokud chces mit na zacatku neco jako '-- Vyberte --', nastav value u teto hodnoty na neco, dle ceho pak odlisis, zda bylo vybrano ci nikoliv (treba <option value='--'>-- vyberte--)...
if ($_POST['nazev_selectu'] == '--') {
    /* nevybrano */
} else {
    /* vybrano */
}
Majkelju
Profil
panther: Aha, takhle :) díkes!
peta
Profil
Ja vetsinou do selectu davam idcka. Databaze pro autoincrement umoznuje cislovani 1, 2, 3, ... Tak s uspechem pouzivam pro nevybrano 0 nebo -1. Ale minuska jsou tez zajimava moznost.
<option value="-1"> --- Nevybrano --- </option>
<option value="1"> Skoda </option>
<option value="3"> Renault </option>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: