Autor Zpráva
Lechyč
Profil *
Ahoj, níže mám kod na ukládání seřazení členů do sekcí. Když kliknu na seřadit, tak mi to vypíše chybu: Nastala chyba! a podtím je Proběhlo seřazení členů! Ale do databáze se číslo neukládá. Vidíte někdo chybu?

 if ($_POST['odeslano']==1){
 $radit = $_POST["radit"];
 $editid = $_POST["editid"];
  $add_new = MySQL_Query("INSERT INTO clenove SET id = '$editid' , list = '$radit' WHERE id = '$editid' LIMIT 1 ");
                    if (!$add_new){
                    	error("Nastala chyba!");
                     } else {    
         }           	info("Proběhlo seřazení členů!");                     
         }  
$members_query = mysql_query("SELECT * FROM sections WHERE activ= '1' ORDER BY list ASC ") or die(MySQL_Error("Nepodařilo se navázat připojení k databázi."));
        while($members_row = mysql_fetch_array($members_query)) {    
echo"<table width=\"100%\" cellspacing=\"0\"  cellpadding=\"0\">
 <tr>
 <td width='50'><img src=\"../images/sections/".$members_row['img']."\" style=\"margin-left:7px;margin-right:7px;\" alt=\"".$members_row['name']."\"></td>
  <td><b>".$members_row['name']."</b></td>
  </tr>
  <tr>
 <td colspan=\"7\" height=\"1\"><hr style=\"background-color:#000000;\"></td>
 </tr>
</table>";
  			echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">";	
  			    echo" <form method='post' action='?strana=members&list' name='list'>";
            echo "<tr>
        <td><b>ID</b></td>
         <td><b>Řadit</b></td>
        <td><b>Uživatel</b></td>
       </tr>";
$game = $members_row["id"];			  
$sql_list_awards = MySQL_Query("SELECT * FROM clenove WHERE sekce = '$game' ORDER BY list ASC");
 while ($row = MySQL_Fetch_Array($sql_list_awards)) {
$user_nick = $row["iduser"];                     
$members1 = mysql_query("SELECT * FROM users WHERE id = '$user_nick' LIMIT 1");
 while($row2 = mysql_fetch_array($members1)) {
$members2 = mysql_query("SELECT * FROM sections WHERE id = ".$row['sekce']." LIMIT 1");
 while($row3 = mysql_fetch_array($members2)) {
$sql_pocet = MySQL_Query("SELECT * FROM clenove WHERE sekce = '$game' ");
$pocet = mysql_num_rows($sql_pocet);

            echo "<tr class=\"neobarvit\" valign=\"middle\" onmouseover=\"this.className='obarvit'\" onmouseout=\"this.className='neobarvit'\">";
            echo "<td width='100'>".$row['id']."</td>";
             echo "<td width='200'><select name='radit'>";
for ($i = 1; $i <= $pocet; $i++) {
  echo "<option value='$i'>$i</option>";
}
echo "</select>";
echo"</td>";
            echo "<td width='300'>".$row2['login']."</td>";           
           }
           }
           }
           }          
echo"<tr><td colspan='2'>
<input type='hidden' name='odeslano' value='1'>
<input type='hidden' name='editid' value=\"".$row['id']."\">
<input type='submit' value='Seřadit'>
</form>";	         
			echo "</table><br>";
Senky
Profil
Namiesto "Nastala chyba" daj radšej mysql_error() a uvidíš, kde je chyba.
Lechyč
Profil *
No..napsalo to chybu:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = '' LIMIT 1' at line 1 

a když jsem teda smazal

WHERE id = '$editid' LIMIT 1


tak už to nepíše žádnou chybu ale neukládá se stejně :(
PostCC
Profil
Lechyč:
No to je výborný řešení! Něco jako když píchnu u auta gumu, tak prostě odříznu nápravy!

Myslím, že se nic nezapisuje z toho důvodu, že proměnná $editid (a zřejmě i $radit) je prázdná. Pokud tedy provedený SQL příkaz ve finále vypadá takto:

INSERT INTO clenove SET id = '' , list = ''


a nad sloupcem id je nastaven nějaký klíč, zřejmě SQL server zápis neumožní.

Část:

$radit = $_POST["radit"];
$editid = $_POST["editid"];


zahoďte a pracujte přímo s proměnnými v poli $_POST. A pokuste se dopátrat, proč neobsahují žádnou hodnotu. Letmým pohledem na script bych hádal, že v části:

<input type='submit' value='Seřadit'>


chybí atribut name="radit".
Lechyč
Profil *
No on bude asi problém ten, že vypisuju xx sekcí a vnich je xx uživatelu, který maji svoje ID a to se asi neukládá, teďkon sem to vložil do "editace" kte zobrazuu pouze jeden záznam a to funguje. Jenže teď mám problém, že se mi to řadí, ale když kliknu znova na editovat, že se mi tam neukazuje aktuální číslo, který je zadáno v db. Zobrazuje se mi tedy vždy 1 ikdyž v db mám 3. Vím, že na označování je parametr selected, když ho tam vložím označé mi to vždy poslední číslo. jak teda udělat aby selected označil číslo, který je v db?
PostCC
Profil
Lechyč:
No, použít ten atribut selected="true" jenom u toho <option>, které má být vybrané a nikoli u všech, třeba.
Lechyč
Profil *
PostCC:
No nevim jak to myslíš, když čísla mám z databáze různý.
    <?php
    $sql_pocet = MySQL_Query("SELECT * FROM clenove WHERE sekce = '1' ");
$pocet = mysql_num_rows($sql_pocet);
echo "<select name='editradit'>";
for ($i = 1; $i <= $pocet; $i++) {
  echo "<option selected='true'  value='$i'>$i</option>";
}
echo "</select></td>";
?>

Takhle mi to nefunguje.
PostCC
Profil
Lechyč:
Dobře, představme si ten formulář ve výsledném HTML v lidské řeči. Je v něm napsáno něco jako:

<následuje výběr z několika položek, který může vrátit jen jedinou hodnotu>
<první položka, tuto položku označ jako vybranou, vrať hodnotu 1>1</konec první položky>
<první položka, tuto položku označ jako vybranou, vrať hodnotu 2>2</konec druhé položky>
</konec výběru>

Tudíž pokud všechny položky mají nastaveno "tuto položka označ jako vybranou" a současně platí, že lze vybrat pouze jedinou položku, samozřejmě se uživateli ve výsledné stránce jeví jako vybraná pouze poslední položka.

Jiná situace by byla, pokud by tag <select> měl nastaven atribut multiple.

Už je to zřejmé?
Lechyč
Profil *
No ano, ale jak to udělat aby mi to vybral osprávný číslo? Když dám atribul multiple, tak mám označený vššechny čísla. Můžete mi prosím ukázat třeba u tohodle kodu, aby to správně vybíralo?

<select size="1" name="edittyp">
    <option value="1" selected>Aktivní</option>
    <option value="0">Neaktivní</option>
    </select>
PostCC
Profil
Lechyč:
Přísahejte, že to jenom tupě nezkopírujete a pokusíte se aspoň částečně zapřemýšlet nad tím proč to tak je a funguje to!

Hotovo? Tak tedy:

<?php
$IdVybranehoUzivatele = 2;
$PocetUzivatelu = 5;
Echo "<select name='editradit'>".PHP_EOL;
For($i = 1; $i <= $PocetUzivatelu; $i++) Echo "<option ".($i == $IdVybranehoUzivatele ? "selected='true' " : "")."value='$i'>$i</option>".PHP_EOL;
Echo "</select></td>".PHP_EOL;
?>
Lechyč
Profil *
PostCC:
Ano, script chápu, děkuju Vám mockrát, už dříve sem tu psal jakto udělat, ale nikdo neodpověděl.

Akorát ve scriptu sem nechápal co je to .PHP_EOL; , ale už jsem si to našel na internetu, že je to: slouží k nalezení znaku nového řádku
PostCC
Profil
Lechyč:
Je to magická proměnná, má jiný obsah na Linuxu a jiný na Windows, liší se dle operačního systému, na kterém běží PHP. EOL znamená End Of Line.

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:

0