Autor Zpráva
domeon
Profil
Zdravím všechny. Zjistil jsem, že pokud použiji na stránce UPDATE, tak načtení celé stránky trvá něco přes 1 minutu. Na stránce jsou pouze 3 jednoduché formuláře, které se dají upravovat tlačítkem a Submit jdou vložit do databáze(respektive updatovat jejich předchozí hodnoty). Kvůli příkazu UPDATE, se pak celá stránka načte přibližně, za 1 minutu.

<?php
if ($_POST) {
    $sql = mysql_query("SELECT * FROM test");
    while ($get_test = mysql_fetch_array($sql)) {
    $value = $_POST[$get_test['name']];
            mysql_query("UPDATE test SET value = '$value' WHERE name = '$get_test[name]'") or die (mysql_error());
        }    
    }
    $sql = mysql_query("SELECT * FROM test);
    while ($get_test = mysql_fetch_array($sql)) {
        $test[$get_test['name']] = $get_test['value'];
    }


?>

<form id="form1" name="form1" method="post" action="?task=test"> 

<input name="a6" type="text" class="settings_text_box"  value="<?php echo $test['a6']; ?>" size="32" />
<input name="a6" type="text" class="settings_text_box"  value="<?php echo $test['a7']; ?>" size="32" />
<input name="a6" type="text" class="settings_text_box"  value="<?php echo $test['a8']; ?>" size="32" />

<input class="button2" name="Submit" type="submit" value="Submit" id="submit0" />
</form>

Nevíte v čem by mohl být problém? Díky za rady.
nethor
Profil
Tady je zbytečně dlouhý ten první cyklus while ($get_test = mysql_fetch_array($sql)) { ...

Při více řádcich v db to bude brzdit.

řešil bych to cyklem pro $_POST:
 foreach ($_POST['a'] as $key=>$value) {
     mysql_query("UPDATE test ....
     }
     
<input name="a[6]" type="text ...    
Tori
Profil
Hm, mohl jste pokračovat v předchozím vlákně.
Proč máte napevno zadané atributy name u inputů? (anebo to jen tady jste to tak napsal?)

Když už před updatem čtete celou tabulku, tak to můžete rovnou porovnávat s tím, co bylo zadané do formuláře a updatovat jen změněné hodnoty (i když číst ze session/cache by při větším množství dat bylo myslím rychlejší, než z DB). A escapovat vstupní hodnoty.
Tímto si nejsem jistá, ale zkoušel jste nejdřív načíst data z tabulky do pole, a až poté provádět updaty? Nevím přesně, jak funguje čtení z DB, ale nějak se mi nelíbí zároveň číst a upravovat stejnou tabulku. Ale nechávám na zkušenějších, jestli to může mít nějaký vliv.
domeon
Profil
nethor: díky, mělo by to vypadat asi takto?
<?php
if ($login_status != 1) exit();
if ($_POST) { foreach ($_POST as $key=>$value) {
            $value = $_POST[$get_majciktheme['name']];
            mysql_query("UPDATE ava_majciktheme SET value = '$value' WHERE name = '$get_majciktheme[name]'") or die (mysql_error());
        }    
    }
    $sql = mysql_query("SELECT * FROM ava_majciktheme");
    while ($get_majciktheme = mysql_fetch_array($sql)) {
        $majciktheme[$get_majciktheme['name']] = $get_majciktheme['value'];
    }


?>
nethor
Profil
... omlovám se za prodlevu.

Ne, takhle ne: $value = $_POST[$get_majciktheme['name']];, to je nesmysl.

ve $value už je hodnota právě uložená, viz foreach

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: