Autor | Zpráva | ||
---|---|---|---|
Lechyč Profil * |
#1 · Zasláno: 15. 8. 2010, 16:26:09
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 |
#2 · Zasláno: 15. 8. 2010, 16:30:27
Namiesto "Nastala chyba" daj radšej mysql_error() a uvidíš, kde je chyba.
|
||
Lechyč Profil * |
#3 · Zasláno: 15. 8. 2010, 16:39:14
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 |
#4 · Zasláno: 15. 8. 2010, 19:37:13
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 * |
#5 · Zasláno: 15. 8. 2010, 21:55:30
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 |
#6 · Zasláno: 16. 8. 2010, 08:05:56
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 * |
#7 · Zasláno: 16. 8. 2010, 10:11:28
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 |
#8 · Zasláno: 16. 8. 2010, 12:05:56
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 * |
#9 · Zasláno: 16. 8. 2010, 12:22:02
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 |
#10 · Zasláno: 16. 8. 2010, 12:35:28 · Upravil/a: PostCC
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 * |
#11 · Zasláno: 16. 8. 2010, 12:55:12
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 |
#12 · Zasláno: 16. 8. 2010, 13:06:36
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. |
||
Časová prodleva: 14 let
|
0