Autor Zpráva
janharvalik
Profil *
dobrý den,
poradíte mi co je špatně?

$name = $_POST['name_of_story'];
$category = $_POST['category'];
$before_content = $_POST['before_content'];
$content = $_POST['content'];

mysql_query("UPDATE `stories` SET name='$name',category='$category',before_content='$before_content',
content='$content'    WHERE id='$id'") or die(mysql_error()); 
Davex
Profil
Ano poradím - chybí připojení k databázi a není ošetřené SQL injection.
mattyZEM
Profil
Davex:
chybí připojení k databázi
A také chybí chybová hláška…
janharvalik
Profil *
Davex:
chybí připojení k databázi

to mám jinde a v něm problé nění.

není ošetřené SQL injection.
co to je?
Davex
Profil
janharvalik:
„není ošetřené SQL injection.“
co to je?
To je útok, pomocí kterého se dá skrz neošetřený skript nabourat do databáze.

Teorie SQL injection + kniha
Sbohem, SQL injection?
SQL injection strip_tags
kde se používá ošetření proti SQL injection?
janharvalik
Profil *
to nebyl celý script
celé je to v
if($_POST['password']==$password)

to by šlo ?

kde je chyba ?
Davex
Profil
janharvalik:
kde je chyba ?
Chyba je v tom, že není definována proměnná $password.
janharvalik
Profil *
je, někde jinde.
$password="heslo";
xmark
Profil
janharvalik:
Mohl by ses obtěžovat sem dát kompletní relevantní kód a popsat, co přesně ti ta stránka dělá a co má dělat?
edit: ok, slevím. Co má dělat, je evidentní.
janharvalik
Profil *
elseif($page=="edit"){
//má to vybrat řádek z detabáze
echo '
<a href="http://www.pokusnak.ic.cz/admin_page.php">admin_page</a><br />
<script type="text/javascript">
function kontrola_formulare()
{if((document.getElementById("file").value="")) {alert("musíte vyplnit pole id");return false;}return true;}</script>
<form onSubmit="kontrola_formulare()"; action="http://www.pokusnak.ic.cz/admin_page.php/?page=edit_form" method="post">
id: <input type="text" name="file" size="10" /><br />
heslo: <input name="password" type="password"/>
<input name="submit" type="submit" value="uložit" />

</form>';
}
// vypsat obsah do formuláře (není úplně hotové)
elseif($page=="edit_form"){

$file = $_POST['file'];

$select=mysql_query("SELECT * FROM `stories` WHERE id='$file' ");
$select=mysql_fetch_array($select);
echo'
<script type="text/javascript">
function check(){if(document.getElementById("category").value != document.getElementById("confirm_category").value){alert("kategorie se neschodují");}} 
</script>
<form onSubmit="kontrola_formulare()"; action="http://www.pokusnak.ic.cz/admin_page.php/?action=edit" method="post">
<input id="name_of_story" type="text" name="name_of_story" size="10" value="'.$select['name'].'" /><br />
<select name="category"><br />
<optgroup label="vyberte kategorii">
'.
$option
.'
</select>

<select id="confirm_category" name="confirm_category" >
<optgroup label="podtvrďte kategorii">
'.$option.' 
</select><br />


<textarea name="before_content" rows="8" cols="15">'.$before_content.'</textarea><br />
<textarea name="content" rows="40" cols="30">'.$content.'</textarea><br />
                         
 
<input name="password" type="password"/><br />
<input onMouseOver="check();" name="submit" type="submit" value="Odeslat" />
';
}
// uložit do databáze
if($action=="edit"){  
if($_POST['password']==$password){
$id=$_POST['file'];
echo $_POST['name_of_story']; 

$name = $_POST['name_of_story'];
$category = $_POST['category'];
$before_content = $_POST['before_content'];
$content = $_POST['content'];

mysql_query("UPDATE `stories` SET name='$name',category='$category',before_content='$before_content',
content='$content' WHERE id='$id'") or die(mysql_error()); 
}else {echo "špatné heslo"; }}
xmark
Profil
Když dáš nad
$name = $_POST['name_of_story'];
řádek
echo 'nazdar';
, provede se to?
janharvalik
Profil *
xmark:
echo 'nazdar';
kde jste to našel ?
Johnik
Profil
janharvalik
dopsal :)
Petr__
Profil *
Opravdu mají ty formuláře mít action na tyto stránky:
http://www.pokusnak.ic.cz/admin_page.php/?action=edit

http://www.pokusnak.ic.cz/admin_page.php/?page=edit_form

?

Nemělo by to být bez toho vytučněného lomítka?
janharvalik
Profil *
ano skuteč je to s / u jiného formůláře to funguje v klidu
Petr__
Profil *
janharvalik:
ano skuteč je to s / u jiného formůláře to funguje v klidu
Hm, a byl by takový problém je na zkoušku odstranit?

A už si konečně zkusil, to co ti napsal [#11] xmark? Protože se tím ukáže, jestli byla splněna ta podmínka
if($action=="edit")
a může vůbec dojít k vykonání toho SQL příkazu pro UPDATE. Což možná způsobuje i ta špatná action, na co jsem se ptal zase já...
Petr__
Profil *
A další věc je v části:


// uložit do databáze
if($action=="edit"){  
if($_POST['password']==$password){
$id=$_POST['file'];


Žádný input nazvaný "file" nikde ve formuláři, ze kterého to předpokládám odesíláš (část větve
elseif($page=="edit_form")
) nevidím, tím pádem asi nedojde ke splnění WHERE v tom UPDATE.
janharvalik
Profil *
Petr_:
Hm, a byl by takový problém je na zkoušku odstranit?
u ostatních formulářů to jde a v tom problém nění.

jestli byla splněna ta podmínka
ta se splnila jinak by se nevypsal formulář

Žádný input nazvaný "file" nikde ve formuláři
v tom
$id=$_POST['file']
máte asi pravdu, protože z page==edit se posílá ['file'] do page==edit_form ale zněj do action==edit ne.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: