Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: PHP - problém - určitě nějaká přehlédnutelná blbost. [vyřešeno]  (Přečteno 2334 krát)

Zax

  • Aktivní člen
  • *
  • Příspěvků: 116
  • Titul: Uhrovitý pubescent
    • Lukáš Klika.cz - můj blog
Zdravím,

dělám na zakázku jedny webovky, musím je mít co nejdřív, bohužel jsem se zasekl u programování administrace, kde mi nefunguje editace článků. Jsem si na 99% jistý, že jde o nějakou blbost (nebylo by to u mě poprvé - například jsem měl jednou v názvu konstanty pomlčku a divil jsem se, proč mi to nejede), bohužel tu blbost už druhý den hledám
Nebudu popisovat jak můj RS funguje, pouze to nejdůležitější, kde by mohl být problém:
Mám soubor index.php, který vypadá cca takto:
Kód: [Vybrat]
<?php
require 
"../scripty/funkce.php";
pripojit();


$akce str_replace(".","",$_GET['akce']);
$akce str_replace("/","",$akce);
$akce str_replace("\\","",$akce);
if($akce!="")
{
if(file_exists("akce/$akce.php"))
include "akce/$akce.php";
}


// HTML


$modul str_replace(".","",$_GET['modul']);
$modul str_replace("/","",$modul);
$modul str_replace("\\","",$modul);
if($modul!="")
{
if(file_exists("moduly/$modul.php"))
include "moduly/$modul.php";
}else
include "moduly/stat.php";
Princip velice jednoduchý - jsou dva parametry v url - modul a akce. Akce je v podstatě script, který se provede před výstupem textu na stránku, modul je to, co správce webu vidí a s čím pracuje - výpis článků, formuláře apod.

Dále mám dva soubory stranka-uprav.php, jeden je v adresáři moduly (index.php?modul=stranka-uprav), druhý v adresáři akce (index.php?akce=stranka-uprav.php). První má za úkol zobrazit formulář pro upravení stránky, druhý má za úkol změny zapsat do databáze.

/moduly/stranka-uprav.php:
Kód: [Vybrat]
<?php

$stranka 
intval($_GET['stranka']);

$result mysql_query("SELECT nadpis,text FROM stranky WHERE id = $stranka");
$row mysql_fetch_row($result);
$nadpis $row[0];
$text $row[1];
?>

<h3>Úprava stránky</h3>
<form method="post" action="?akce=stranka-uprav">
<input type="hidden" name="id" value="<?php echo $stranka?>" /> <!-- napr ?modul=stranka-uprav&stranka=10 -->
<input type="text" name="nadpis" value="<?php echo $nadpis?>" /><br />
<textarea cols="20" rows="10" name="clanek"><?php echo $text?></textarea><br />
<input type="submit" name="upravit" value="Upravit" />
</form>

/akce/stranka-uprav.php:
Kód: [Vybrat]
<?php

$id 
intval($_POST['id']);
$nadpis escape($_POST['nadpis']);
$clanek escape($_POST['clanek']);

mysql_query("UPDATE stranky SET nadpis = '$nadpis', text = '$clanek' WHERE id = $id");
header("location:index.php?modul=stranky");

?>

Soubor moduly/stranka-uprav.php pracuje správně, ovšem akce/stranka-uprav.php nikoliv - script zapíše do databáze správně pouze nadpis, do proměnné $clanek se vždy uloží hodnota "clanek" (bez uvozovek) nezávisle na tom, co chci doopravdy odeslat - když si nechám vypsat echo $_POST['clanek']; dostanu "clanek" (bez uvozovek).
Stránka neobsahuje žádný jiný element s názvem clanek. Stránka obsahuje editor TinyMCE, ve kterém ale chyba není, protože podobný script, který vytváří nové články, funguje správně. Kromě TinyMCE neobsahuje stránka žádný JavaScript. Funkce escape, která je využitá, vypadá takto:
Kód: [Vybrat]
function escape($string)
{ if(is_numeric($string))
return intval($string);
else
return mysql_real_escape_string($string);
}

Nejzajímavější je, že slovo "clanek" se nevyskytuje nikde jinde kromě názvu proměnné, není ani nastavené v databázi jako defaultní hodnota, prostě tato hodnota se proměnné přiřadí ihned po POSTnutí formuláře.

Zkoušel jsem už snad všechno možné od jiných názvů proměnných až po rozkouskování UPDATE dotazů do dvou.


Pozn.: v PHP nezačínám, pouze mám zvláštní schopnost dělat neobvyklé primitivní chyby, které se snadno přehlédnou a umí potrápit klidně na několik týdnů. Chyby si většinou hledám sám, tohle ale bohužel spěchá, proto to sem házím -> víc očí víc vidí, víc hlav víc ví.


Předem mockrát děkuji.
« Poslední změna: 24 Října 2008, 15:15:38 od Martin - ViPEr*CZ* »
Celý svět se pomalu ale jistě řítí do /dev/null
Moje sestava: AMD Athlon(tm) 64 Processor 3500+ | 2 GB RAM | nVidia GeForce 6600 GT | Ubuntu 8.10 | Gnome 2.22.3 | Linux 2.6.24-19-generic
Prosím, nevykejte mi :)

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: PHP - problém - určitě nějaká přehlédnutelná blbost...
« Odpověď #1 kdy: 24 Října 2008, 05:39:54 »
když následující změníte na třeba input type text tak se chyba také projevuje?
<textarea cols="20" rows="10" name="clanek"><?php echo $text; ?></textarea><br />

pokud ne, tak zkuste zase v původním znění s textarea třeba přes phpinfo() podívat co vlastně stránka předává. Mám takové mlhavé tušení že TinyMCE přes DOM nahrazuje právě textarea. Ale jestli to posílá v jiné proměnné nebo je potřeba updatovat nějak původní textareu netuším.
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

Martin - ViPEr*CZ*

Re: PHP - problém - určitě nějaká přehlédnutelná blbost...
« Odpověď #2 kdy: 24 Října 2008, 14:02:44 »
Zkusil bych jen tak rychle pro diagnostiku přejmenovat clanek na třeba l_clanek.
Jinak zatím jsem v tom chybu neuviděl...  ::)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Zax

  • Aktivní člen
  • *
  • Příspěvků: 116
  • Titul: Uhrovitý pubescent
    • Lukáš Klika.cz - můj blog
Re: PHP - problém - určitě nějaká přehlédnutelná blbost...
« Odpověď #3 kdy: 24 Října 2008, 15:12:58 »
Děkuji všem za nápady, stačilo se jen pořádně vyspat a problém jsem našel ihned.

Problém byl v nastavení TinyMCE, na jednom řádku jsem měl
Kód: [Vybrat]
save_callback : 'parsehtml',což mělo při odesílání obsahu textarey zavolat tuto funkci:
Kód: [Vybrat]
function parsehtml(html) {
html = html.replace(/<img(S)>/g,"<img$1 />");
return html;
}

Tento kus kódu by měl nahrazovat <img> tagy za xhtml <img /> (script jsem našel někde na internetu, nečekal jsem, že s ním bude problém).
Celý svět se pomalu ale jistě řítí do /dev/null
Moje sestava: AMD Athlon(tm) 64 Processor 3500+ | 2 GB RAM | nVidia GeForce 6600 GT | Ubuntu 8.10 | Gnome 2.22.3 | Linux 2.6.24-19-generic
Prosím, nevykejte mi :)

Martin - ViPEr*CZ*

Re: PHP - problém - určitě nějaká přehlédnutelná blbost. [vyřešeno]
« Odpověď #4 kdy: 24 Října 2008, 15:16:27 »
Tak to potom jo... tak ať to má úspěch u zadavatele  ;)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

 

Provoz zaštiťuje spolek OpenAlt.