úprava stránky – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

úprava stránky – PHP – Fórum – Programujte.comúprava stránky – PHP – Fórum – Programujte.com

 

marek_marik
~ Anonymní uživatel
2 příspěvky
22. 7. 2013   #1
-
0
-

Ahoj,

s PHP jsem začal letos koncem června, opravdu mě to chytlo, ale přece jen to chce asi trochu víc času, než člověk tenhle jazyk úplně pochopí. Mám teď problém, se kterým zjevně nejsem schopen nijak hnout:

Mám jednoduchou administraci, která umožňuje vkládat nové stránky do menu a ukládá je do databáze. Chtěl bych, ale aby bylo možné vytvořenou stránku upravovat a to se mi nedaří. Mohl by mi někdo poradit?

U vložené stránky chci mít někde odkaz "upravit", přes který by se přecházelo k úpravám

<a href='./upravit_stranku.php?stranka=$id_stranky'>upravit</a>

no a u samotného upravit_stranku.php jsem se zadrhl. Normálně se mi to sice zobrazí, neháže mi to žádnou chybu, ale data se nepřepisují. Připojení k databázi mám přes config.php, který na jiných stránkách funguje v pohodě. 

<?php
  include "./header.php";
    if($_SESSION["id"] AND ($_SESSION["opravneni"] == "3")){
    $idecko_stranky = @$_GET["id"];
    if(isset($_POST["uprav"])){
      $nadpis = $_POST["nadpis"];
      $obsah = $_POST["obsah"];
      include "./config.php";
      $zapis = mysql_query("UPDATE stranky SET nadpis='$nadpis', obsah='$obsah' WHERE id='$idecko_stranky' ;");
      echo "Stránka byla upravena.";
    }
    $dotaz2 = mysql_query("SELECT * FROM stranky WHERE id='".mysql_real_escape_string($idecko_stranky)."' ;");
                        while($vystup2 = mysql_fetch_object($dotaz2))
                        {
                          $id = $vystup2->id;  
                          $nadpis = $vystup2->nadpis;
                          $obsah = $vystup2->obsah;
                        }
  ?>
    <form action="./upravit_stranku.php?stranka=<?php echo $idecko_stranky; ?>" method="post">        
      <table>
        <tr>
          <td>Nadpis: <br /><input type="text" name="nadpis" size="39" value="<?php echo @$nadpis; ?>" /></td>
        </tr>
        <tr>
          <td>Obsah: <br /><textarea name="obsah" rows="5" cols="31"><?php echo @$obsah; ?></textarea></td>
        </tr>
        <tr>
          <td align="right"><input type="submit" name="uprav" value="Upravit" /></td>
        </tr>
      </table>
    </form>
<?php 
} else {
  echo "Nejsi přihlášený.";
}
include "./footer.php"; 
?>
Nahlásit jako SPAM
IP: 89.176.129.–
peter
~ Anonymní uživatel
3981 příspěvků
22. 7. 2013   #2
-
0
-

V prvni rade je treba do configu pridat

@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
error_reporting(E_ALL);

k mysql prikazum die

$query = "SELECT * FROM obrazky";
$res   = mysql_query($query) or die(mysql_error());

zabezpecit vsechny promenne, ktera vstupuji do prikazu echo nebo mysql_query pomoci mysql_real_escape_string

foreach ($data as $key=>$value)
	{$data[$key] = mysql_real_escape_string($value);}
// to je zrovna cyklus z nejakeho meho programku, ty to potrebujes trochu jinak

a oddelit cast php od html kod, tj nedelat echo hned na miste v php (pokud nemas zaple v config ob_start, jakoze asi nemas), ale az v html kodu.

      echo "Stránka byla upravena."; // napr to mas takhle

Pak ma teprve smysl rikat jake a kolik chyb to pise, nebo, zda to neco dela ci nedela.

Mno a ke kodu.
1) Nekde byla zminka, ze prohlizec ci server obcas ignoruje kombinaci get a post. Ve tvem pripade mas get v action a tu on muze ignorovat. ja bych to resil input type=hidden. Navic pises o odkazu editovat, ten je get.
2) Vis urcite, ze je tam vzdy spravne id stranky? Dej si ho pres echo dodatecne zobrazit. Ja mam pocit, ze jednou pouzijes $id a podruhe $idecko_stranky.
3) @$_GET["id"]; - tohle neosetruje chyby, to je spis takova pomucka. V pripade, ale, ze tam bude skutecna chyba, tak to nic nevypise a ses v haji.
4) do toho cyklu while bych dal prvni radek  var_dump, abys videl, co se skutecne natahlo z db nebo jestli vubec. A pokud sql dotaz selhal, tak to uz neresis.

var_dump($vystup2);
Nahlásit jako SPAM
IP: 193.84.207.–
marek_marik
~ Anonymní uživatel
2 příspěvky
22. 7. 2013   #3
-
0
-

Zdravím, mockrát díky za odpověď, config jsem doplnil podle doporučení, vyřešil to echo a odstranil zavináče - nevypisuje mi to žádnou novou chybu (kromě toho, že některé proměnné nejsou definované, ty co měly zavináč).

ověřil jsem si přes echo, co je v $idecko_stranky a zjevně je prázdné a s tím taky bude souviset ten můj problém. Zkoušel jsem to nějak vyřešit, ale čím víc se v tom rýpu, tím víc chyb asi dělám a proto se chci zeptat, nenapadá někoho, jak dostat do $idecka požadované data (id stranky, co upravuju)? Předem dík za veškerou snahu. 

Nahlásit jako SPAM
IP: 89.176.129.–
peter
~ Anonymní uživatel
3981 příspěvků
23. 7. 2013   #4
-
0
-

Nedefinovana promenna je prave chyba. Musis zjistit proc neni definovana a opravit to. Nekdy je to fuk, ale ve tvem pripade to zrovna vadi. Mozna lepe zacit od zacatku a tento kod si nekde ulozit.

Jak php kod ziska id stranky? $_GET["id"] ? Kdo $_GET["id"] posle? Ten samy php kod? Ale, kde id ziska?
Takze musi byt jeste jedna stranka, ktera posila do tohoto php kodu idecko (pravdepodobne s sql SELECT
* FROM stranky LIMIT 1, pripadne s podminkou). Mas ji? Pripadne napis link, ktery pouzivas pro to, aby ses dostal na tuto straknu plus, co je v $_SESION, var_dump($_SESSiON)
Kdyz id ma, jaj s nim php nalozi?
Mas tam cas uprav, ktera je podminena $_POST["uprav"], ale neresis, jestli bylo poslane take id. Pak do sql dotazu jde prazdna promenna a uprava se stejne neulozi, ne?
Mas tam $_SESSION["id"]  a $_SESSION["opravneni"], kde se tam ty hodnoty berou a jake jsou. Pokud ne $_SESSION["id"] prazdne, tak se uprav stejne neprovede, ani $dotaz2. A u $dotaz2 stejne opet neresis situaci, ze je $idecko_stranky prazdne.
Tez mi neni jasne, ze pro SELECT pouzijes ochranu mysql_real_escape_string, ale pro UPDATE uz ne. Vzdy musis pocitat s hackery, pokud data ziskavas posilanim z jine stranky. On si muze vyrobit stranku, kde pro id pouzije input type=text a zapise ti tam ' OR '1' = '1, sql dotaz pak bude
UPDATE stranky SET nadpis='str', obsah='str' WHERE id='' OR '1' = '1' -- coz je totez jako
UPDATE stranky SET nadpis='str', obsah='str' -- prepis vsechno v databazi :)
 

Nahlásit jako SPAM
IP: 193.84.207.–
zlz
~ Anonymní uživatel
634 příspěvků
23. 7. 2013   #5
-
0
-

./upravit_stranku.php?stranka=<?php echo $idecko_stranky; ?>
$idecko_stranky = @$_GET["id"]

Nahlásit jako SPAM
IP: 80.188.216.–
peter
~ Anonymní uživatel
3981 příspěvků
23. 7. 2013   #6
-
0
-

zlz

$dotaz2 = mysql_query("SELECT * FROM stranky WHERE id='".mysql_real_escape_string($idecko_stranky)."' ;");
while($vystup2 = mysql_fetch_object($dotaz2))
{
$id = $vystup2->id; // se nejmenuje $idecko_stranky
...

marek_marik - jo, mimochodem, prohlizec ma funkci pro zobrazeni zdrojoveho kodu stranky. Tak se da zjistit, zda ti zobrazuje spravny html kod (osobne to pouzivam hodne casto). Asi jsem to nenapsal.

Nahlásit jako SPAM
IP: 193.84.207.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Podobná vlákna

Úprava programu v C — založil Zurfik

Uprava fora — založil Lukáš Churý

úprava webovek — založil Petan14

Htaccess úprava — založil Michal

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý