Autor Zpráva
Vopiatos
Profil
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
Asi to neposíláte přes GET, že?
Vopiatos
Profil
Ne asi nejspis ne jde to nejak ošetrit?
xmark
Profil
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
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
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
a jak to zmenim staci prepsat get na post nebo jak?
Vopiatos
Profil
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
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
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
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
Vopiatos:
Kde berete pole $_post a $_get - nemá to být $_POST a $_GET? Na velikosti písmen záleží.
Vopiatos
Profil
pole $_post a $_get jsem zmenil na vetsi ale porad se nic neuklada.
Tori
Profil
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
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
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
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.

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: