Autor | Zpráva | ||
---|---|---|---|
Vopiatos Profil |
#1 · Zasláno: 30. 1. 2011, 19:55:30 · Upravil/a: Vopiatos
Ahoj mam problem kdyz napisu do formulare delsi clanek ktery ukladam do DB.
Tak mi to napise toto: Bad Request Your browser sent a request that this server could not understand. tabulka vypada takto: CREATE TABLE `menu1` ( `id_menu1` int(11) NOT NULL auto_increment, `nazev` varchar(40) character set latin2 collate latin2_czech_cs default NULL, `text` text character set latin2 collate latin2_czech_cs NOT NULL, PRIMARY KEY (`id_menu1`) ) ; mělo by to byt v poho nebo spatně? nevim jestli chyba v tabulce nebo kde fakt nevim diky za rady tak je to omezeno poctem znaku ale proc to nevim ve scriptu nic neni |
||
Tori Profil |
#2 · Zasláno: 30. 1. 2011, 20:25:16
Asi to neposíláte přes GET, že?
|
||
Vopiatos Profil |
#3 · Zasláno: 30. 1. 2011, 20:34:41
Ne asi nejspis ne jde to nejak ošetrit?
|
||
xmark Profil |
#4 · Zasláno: 30. 1. 2011, 20:37:03
Vopiatos:
Chtělo by to ukázat jednak kód toho formuláře a pak tu část php, která odeslaný formulář zpracovává. |
||
Vopiatos Profil |
#5 · Zasláno: 30. 1. 2011, 20:40:05
edit.php
<form action="uloz_editace.php" method="get"> <input type="text" name="nazev" value="<? require("../db.php"); $pripoj=MySQL_Connect($SQL_Server, $SQL_Uzivatel, $SQL_Heslo) or Die(MySQL_Error()); MySQL_Select_Db($Databaze) or Die(MySQL_Error()); $clanky = mysql_query("SELECT * FROM menu1"); $dotaz="select * from menu1 where id_menu1='".$_GET["id_menu1"]."'ORDER BY id_menu1 DESC"; //vytvooení sql dotazu $vysledek = MySQL_Query($dotaz); // provedení sql dotazu while($clanek = mysql_fetch_array($vysledek)){ $nazev=$clanek["nazev"]; echo "$nazev"; } ?>" /> <br><br> <textarea name="text" style="width:80%"> <? require("../db.php"); $pripoj=MySQL_Connect($SQL_Server, $SQL_Uzivatel, $SQL_Heslo) or Die(MySQL_Error()); MySQL_Select_Db($Databaze) or Die(MySQL_Error()); $clanky = mysql_query("SELECT * FROM menu1"); $dotaz="select * from menu1 where id_menu1='".$_GET["id_menu1"]."'ORDER BY id_menu1 DESC"; //vytvooení sql dotazu $vysledek = MySQL_Query($dotaz); // provedení sql dotazu while($clanek = mysql_fetch_array($vysledek)){ $text=$clanek["text"]; echo "$text"; } ?> </textarea> <input type="hidden" name="id_menu1" value="<? echo $id_menu1; ?>" /> <input type="submit" value="odeslat" /> </form> uloz_editace.php <? if ($text==""): echo"Jeste vyplnte text.<br><a href=../index.php?p=zapsat?pm=write>Zpìt</a>"; else: require("../db.php"); $conn=MySQL_Connect($SQL_Server, $SQL_Uzivatel, $SQL_Heslo) or Die(MySQL_Error()); MySQL_Select_Db($Databaze) or Die(MySQL_Error()); $pridejhotam = "UPDATE menu1 SET text='".$_GET["text"]."', nazev='".$_GET["nazev"]."' where id_menu1='".$_GET["id_menu1"]."'"; mysql_query("$pridejhotam"); mySQL_Close($conn); header ("Location: ../admin.php?p=wrote&pm=write"); endif; ?> |
||
Davex Profil |
#6 · Zasláno: 30. 1. 2011, 20:45:13
Tori:
„Asi to neposíláte přes GET, že?“ Vopiatos: „Ne asi nejspis ne jde to nejak ošetrit?“ Kdepak, ten formulář se posílá přes GET, takže Tori tipla místo problému naprosto správně. Mělo by se to odesílat přes POST. |
||
Vopiatos Profil |
#7 · Zasláno: 30. 1. 2011, 20:46:44
a jak to zmenim staci prepsat get na post nebo jak?
|
||
Vopiatos Profil |
#8 · Zasláno: 30. 1. 2011, 20:53:43
prepsal jsem get na post zapsani funguje ale data se zpet nenactou do formulare
musim udelat novej script pres post nebo to staci nejak upravit? |
||
Vopiatos Profil |
#9 · Zasláno: 30. 1. 2011, 21:22:06
Jak udelam aby se mi po kliku na dany clanek zobrazil v editacnim formulari?
Tato metoda funguje ale jen pres get.Potrebuji predavat promeny pres POST a to mi nezobrazi <? require("../db.php"); $pripoj=MySQL_Connect($SQL_Server, $SQL_Uzivatel, $SQL_Heslo) or Die(MySQL_Error()); MySQL_Select_Db($Databaze) or Die(MySQL_Error()); $clanky = mysql_query("SELECT * FROM menu1"); $dotaz="select * from menu1 where id_menu1='".$_get["id_menu1"]."'ORDER BY id_menu1 DESC"; //vytvooení sql dotazu $vysledek = MySQL_Query($dotaz); // provedení sql dotazu while($clanek = mysql_fetch_array($vysledek)){ $text=$clanek["text"]; echo "$text"; } ?> |
||
Tori Profil |
#10 · Zasláno: 30. 1. 2011, 21:30:09 · Upravil/a: Tori
Vopiatos:
„Tato metoda funguje ale jen pres get.Potrebuji predavat promeny pres POST a to mi nezobrazi“ Ve skriptu edit.php se nic nemění, formulář odesíláte přeci na uloz_editace.php, takže stačí změnit ten sql dotaz (v uloz_editace.php), kterým článek ukládáte (a ošetřit ho proti sql injection). edit: Davex: Když vidím ty dva posty pod sebou, tak to asi vyznělo, jako bych naopak doporučovala použití GET. |
||
Vopiatos Profil |
#11 · Zasláno: 30. 1. 2011, 21:42:43
Tenhle dotaz?
$pridejhotam = "UPDATE menu1 SET text='".$_get["text"]."', nazev='".$_get["nazev"]."' where id_menu1='".$_get["id_menu1"]."'"; a jak ho mam upravit? zkusil jsem takhle ale nic to neulozi.Nic me nenapada jak to vic upravit $pridejhotam = "UPDATE menu1 SET text='".$_post["text"]."', nazev='".$_post["nazev"]."' where id_menu1='".$_post["id_menu1"]."'"; |
||
Tori Profil |
#12 · Zasláno: 30. 1. 2011, 21:45:15
Vopiatos:
Kde berete pole $_post a $_get - nemá to být $_POST a $_GET? Na velikosti písmen záleží. |
||
Vopiatos Profil |
#13 · Zasláno: 30. 1. 2011, 21:48:04
pole $_post a $_get jsem zmenil na vetsi ale porad se nic neuklada.
|
||
Tori Profil |
#14 · Zasláno: 30. 1. 2011, 21:55:00
Vypište si ten dotaz, jestli je správně. Je např.vůbec vyplněné ID článku v tom skrytém poli formuláře? Pokud nemáte zapnuté register_globals, tak se vám tam v edit.php neukládá.
|
||
Vopiatos Profil |
#15 · Zasláno: 30. 1. 2011, 22:05:15
jo vse je v poradku kdyz jsem mel pole $_GET vse fungovalo spravne kdyz jsem prepsal na (uloz_editace.php) $_POST tak uz ne.
|
||
Vopiatos Profil |
#16 · Zasláno: 30. 1. 2011, 23:10:26
Tak jsem to vzresil timle scriptem
<?php require("../db.php"); $conn=MySQL_Connect($SQL_Server, $SQL_Uzivatel, $SQL_Heslo) or Die(MySQL_Error()); MySQL_Select_Db($Databaze) or Die(MySQL_Error()); if(isset($_POST['submit'])) { $nazev = mysql_real_escape_string($_POST['nazev']); $text = mysql_real_escape_string($_POST['text']); /* --- KONTROLA ZADANÝCH ÚDAJÙ --- */ if($nazev==""){ echo'Nebylo vyplnìno nazev!'; } else if($text==""){ echo'Nebylo vyplnìno text'; } else{ $sql= mysql_query("UPDATE menu1 SET nazev='".$nazev."', text='".$text."' WHERE id_menu1='$id_menu1' ;") or die(mysql_error()); echo'Úspìšnì uloženo!'; } } else { $sql= mysql_query("SELECT nazev, text FROM menu1 WHERE id_menu1='$id_menu1';") or die(mysql_error()); if ($row = mysql_fetch_array($sql)) { $nazev = $row["nazev"]; $text = $row["text"]; header("location:../admin.php"); } } ?> <form action="#" method="post"> <input type="text" name="nazev" value="<?php echo $nazev; ?>" size="25" tabindex="1" /> <br><br> <textarea name="text" style="width:80%"><?php echo $text; ?></textarea> <input type="submit" name="submit" value="Uložit" /> </form> ale potrebuju udelat presmerovani na stranku admin.php a tento header mi pise chybu header("location:../admin.php"); |
||
Tori Profil |
#17 · Zasláno: 31. 1. 2011, 08:27:18 · Upravil/a: Tori
Vopiatos:
„tento header mi pise chybu“ Jakou (= proč ji sem taky nenapíšete)? Můžete mít nějaký výstup před přesměrováním ("...headers already sent.."), nebo chybu v cestě. U mě třeba váš zápis funguje, byť považuji za spolehlivější používat absolutní adresy. Jinak ještě ke skriptu: i to $id_menu1 by chtělo ošetřit (např. intval), jinak se dají jedním dotazem smazat (přepsat) všechny řádky tabulky. Přesměrování by spíš mělo být po UPDATE, anebo jsem nepochopila co chcete udělat. |
||
Časová prodleva: 14 let
|
0