Autor Zpráva
Kačule
Profil
Ahoj všem,
najde se prosím někdo kdo mi poradí?
Už pár nocí se peru s funkcí UPDATE, snažím se najít způsob (určitě je, ale nejde mi najít), jak změnit v tabulce více dat najednou, například v prvním řádku něco a ve třetím také něco a uložit to jedním společným příkazem. (samostatně každý řádek se mi povedlo, ale potřebovala bych aby to šlo hromadně). Mám zkušební tabulku, zkušební databázi, proto text1 atd.. tabulka dole ukládá změny jen v posledním řádku a hodnoty překopíruje do ostatních řádků.

Předem moc díky

pridani_radku.php
<?php
// připojení k databazi
    include_once "admin_connect.php";
// zaslání příkazu do databáze
$objekt_vysledku = mysqli_query($spojeni, 'SELECT * FROM pridani_radku');

if (!$objekt_vysledku)
{ 
  echo 'Nezdařilo poslání príkazu do databáze';
  echo '<br />';
  echo 'mysql_error ($spojeni)';
  exit();
 }  
// zobrazení hodnot ziskaných z databáze

?>
     <form action="skript_cela_tabulka.php" method="POST">
        <table class="tabvypis">
          <tr>
            <th width="10%">ID</th>
            <th width="18%">Text1</th>
            <th width="18%">Text2</th>
            <th width="18%">Text3</th>
            <th width="18%">Text4</th> 
            <th width="18%">Úpravy</th>   
          </tr>
        </table>
 
<?php
    while ($radek = mysqli_fetch_array($objekt_vysledku))
  {        
?>                                                                                                  
        <table class="tabvypis">        
          <tr>        
            <td width="10%"><?php echo $radek['id']; ?></td>
            <td width="18%"><input type="text" name="text1" class="pole" value="<?php echo $radek['text1']; ?>"></td>
            <td width="18%"><input type="text" name="text2" class="pole" value="<?php echo $radek['text2']; ?>"></td>            
            <td width="18%"><input type="text" name="text3" class="pole" value="<?php echo $radek['text3']; ?>"></td>            
            <td width="18%"><input type="text" name="text4" class="pole" value="<?php echo $radek['text4']; ?>"></td>                                            
<?php             
    echo '            
            <td width="18%">         
            <a href="skript_smaz_radek.php?id='.$radek['id'].'">
            <img src="./img/ico-delete.gif" alt="Smazat záznam"></a></td>
         ';     
?>               
          </tr>        
        </table>       
<?php   
  }
?> 
        <input type="submit" value="Ulož změny" alt="Ulož provedené změny"></td>
      </form>
</div>  

<?php
// odpojení od databáze  
mysqli_free_result($objekt_vysledku);
if ($spojeni)
  mysqli_close($spojeni);  
?>   

skript_cela_tabulka.php
<?php
// pripojení
    include_once "admin_connect.php";
// OVERENÍ jesli je poslaný  


if(isset($_POST['text1']))
  {
//vytvorení príkazu    
  $objekt_vysledku = mysqli_query($spojeni, "UPDATE pridani_radku SET text1 = '".$_POST['text1']."', text2 = '".$_POST['text2']."', text3 = '".$_POST['text3']."', text4 = '".$_POST['text4']."' ");
   }

 

if (!$objekt_vysledku)
    die ('Chyba zaslání příkazu');
else    
    echo 'Záznam byl ZMENEN';
header("Location: uzivatele_administrace.php", true, 303); // presmerování na stránku s výsledkem
 
?>
Alphard
Profil
Kačule:
určitě je, ale nejde mi najít
Ono to není tak jednoduché, existují určité konstrukce, ale vypadají nějak takhle Dvojné pole..?. Jestli neřešíte výkon kvůli tomu, že už to nestíhá, nechal bych to asi po jednom, nebo devrefuge.com/2011/12/better-multiple-queries-performance-with-mysqli_multi_query.
Kačule
Profil
Díky za nasměrování! - sice tomů vůbec nerozumim, ale mám co prozkoumávat a zkoušet.... snad najdu něco co bude polopaticky vysvětleno a pochopim to i já.
Tori
Profil
Kačule:
Máte špatně pojmenovaná políčka formuláře, v PHP dostanete pouze hodnoty z posledního řádku. Změnila bych to tak, aby vám přišlo pole, kde klíče budou ID záznamu:
while ($radek = mysqli_fetch_array($objekt_vysledku))
  {
?>
        <table class="tabvypis">
          <tr>
            <td width="10%"><?php echo $radek['id']; ?></td>
            <td width="18%"><input type="text" name="text1" class="pole[<?php echo $radek['id']; ?>]" value="<?php echo $radek['text1']; ?>"></td>
            <td width="18%"><input type="text" name="text2" class="pole[<?php echo $radek['id']; ?>]" value="<?php echo $radek['text2']; ?>"></td>          .... atd. 

Ohledně ukládání koukněte i na článek J.Vrány: Hromadná aktualizace záznamů (včetně komentářů).
Kačule
Profil
Děkuji, bohužel i po hromadě přečtených informací, včetně článku J.Vrány se mi nedaří ty id přenést, tak aby to fungovalo... pořád to mění jen ten jeden řádek. Můžete mi poradit jak sestavit ten příkaz UPDATE, aby ta id byla tam kde mají být?
Tori
Profil
Kačule:
Ukažte, jak to vypadá teď.. (nevím, co a jak už jste změnila nebo ne)
Kačule
Profil
Změnila jsem tu tabulku se vstupními daty podle vaší rady, pak sem se pokoušela změnit i ten příkaz, ale bez úspěchu, takže jsem se vrátila k první verzi.

tabulka
 <table class="tabvypis">        
          <tr>        
            <td width="10%"><?php echo $radek['id']; ?></td>
            <td width="18%"><input type="text" name="text1" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text1']; ?>"></td>
            <td width="18%"><input type="text" name="text2" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text2']; ?>"></td>            
            <td width="18%"><input type="text" name="text3" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text3']; ?>"></td>            
            <td width="18%"><input type="text" name="text4" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text4']; ?>"></td>                                            
<?php             
    echo '            
            <td width="18%">
            <a href="skript_smaz_radek.php?id='.$radek['id'].'">
            <img src="./img/ico-delete.gif" alt="Smazat záznam"></a></td>
         ';     
?>               
          </tr>        
        </table>      


No a tady jsem v koncích, netušim, jak sem ty id z tabulky dostat :-(
skript_cela_tabulka.php
<?php
// pripojení
    include_once "admin_connect.php";
// OVERENÍ jesli je poslaný techt 


if(isset($_POST['text1']))
  {
//vytvorení príkazu    
  $objekt_vysledku = mysqli_query($spojeni, "UPDATE pridani_radku SET text1 = '".$_POST['text1']."', text2 = '".$_POST['text2']."', text3 = '".$_POST['text3']."', text4 = '".$_POST['text4']."' ");
   }

 

if (!$objekt_vysledku)
    die ('Chyba zaslání príkazu');
else    
    echo 'Záznam byl ZMENEN';
header("Location: uzivatele_administrace.php", true, 303); // presmerování na stránku s výsledkem
 
?>
Alphard
Profil
Toho, co píše Tori, jsem si včera ani nevšiml. Učte se to postupně.

foreach ($_POST['pole'] as $id => $zaznam)
{
  mysqli_query($spojeni, "UPDATE pridani_radku SET text1 = '".$zaznam['text1']."', text2 = '".$zaznamT['text2']."', text3 = '".$zaznam['text3']."', text4 = '".$zaznam['text4']."' where id = ".(int) $id);
}

Až tohle bude fungovat, můžete zkusit optimalizovat do jednoho dotazu.
Tori
Profil
Kačule:
Aha, omlouvám se, napsala jsem to blbě, mělo být: <input type="text" name="text1[<?php echo $radek['id']; ?>]" class="pole" value="<?php echo $radek['text1']; ?>">
nakonec ani tohle nebylo dobře, práce kvapná,... atd.
Kačule
Profil
Jeje:-) odkládám svou práci oficiálně a jdu se na to mrknout, jste oba moc hodní!


Tori: opravila jsem to, teď už mi to neukládá ani ten poslední řádek.
Alphard
Profil
Kačule:
Já jsem ten cyklus nenapsal dobře, opět jsem si nepřečetl, co uvedla Tori a čekal jsem, že myslí stejně jako já, omlouvám se. Princip je naznačený, jen doladit proměnné.
Formulář bych udělal takhle
<input type="text" name="data[<?php echo $radek['id']; ?>]['text1']" class="pole" value="<?php echo $radek['text1']; ?>">

A pak v tom cyklu foreach ($_POST['data'] as $id => $zaznam)

Omlouvám se za moc chyb, dneska se necítím moc dobře, už sem nebudu psát :-)
Kačule
Profil
Alphard:
formulář jsem poupravila (pořád maže a přidává, to se nezměnilo :-) ale stále nic se nemění..... jsem z toho úplně zmatená a za každou pomoc vděčná! Co jsem tady pročítala ty diskuze, tak ani Vám a ani Tori nesham po kotníky.... vlastně vim prdlajs, jen vim, co potřebuju aby to dělalo, ale jak to udělalat je v mém případě běh na x měsíců:-)

Asi bych potřebovala pomoc víc než jsem si myslela:-( nevím, jak to doho cyklu dostat ty proměnný aby to něco dělalo :-( resp. ukládalo změny.
Alphard
Profil
Podařilo se? Já pracuji s generovanými formuláři, nejsem si jist detaily u takového nízkoúrovňového řešení a v poledne jsem se fakt necítil moc dobře. Vy taky moc nepomáháte, víme jenom, že to nefunguje...

Když se zpětně dívám na Alphard [#11], neměl jsem tam dávat apostrofy, takže
<input type="text" name="data[<?php echo $radek['id']; ?>][text1]" class="pole" value="<?php echo $radek['text1']; ?>">

Ale jinak by to mělo fungovat, jestli ne, nedokáži dál věštit. Takže nakopírujte kousek vygenerovaného html, vypisujte hodnoty, např. $_POST['data'] a prostě debugujte.
Kačule
Profil
FUNGUJE!!!!!!!!! pro to abych se v tom tolik nestrácela jsem přejmenovala text1 na jmeno, 2 na prijmeni, 3 na adresa, 4 na telefon. Vyzkoušela jsem moře věcí i odstranit ty apostrofy, protože se vypisovali když jsem to zkoušela vypsat, abych věděla jak se to přes post posílá na skript_cele_stranky.php no a zjistila jsem za dnešek moře věcí o tom jak fungují pole:-) moc děkuji za pomoc!!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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