Autor Zpráva
tanderzz
Profil *
dobrý den jak mám vypsat text z db do textového pole? (pro následnou editaci a navrácení už změněných dat do db) zde je kod: opravdu už si nevím rady ...
<?php
include("db.php");

if(isset($_POST['uprav'])) //ak bolo stlacene tlacitko uprav
{
        $nadpis = $_GET['nadpis'];
        $text = $_GET['text'];
$udaj = $_POST['udaj'];
       

        $sql ="UPDATE tabulka set nadpis='".$nadpis."', text='".$text."' WHERE id = '".$udaj."'"; //upravime udaje v db
        $vysledok=mysql_query($sql);
        if ($vysledok) {
        echo "Udaj uspesne upraveny"; //vypise uspesnost
        } else {
        echo "Udaj nemohol byt upraveny! Skuste to ešte raz."; //vypise neuspesnost
}}

        $sql = mysql_query("SELECT * FROM tabulka where id= '".$udaj."'"); //vytiahneme udaje z db
        $vypis = mysql_fetch_row($sql);

        echo '<form method="post">';
        echo 'Nadpis: <input name="nadpis" type="text" value="'.$vypis["nadpis"].'"><br>'; //vypiseme nadpis
        echo 'Text: <textarea name="text" cols="30" rows="3">'.$vypis["text"].'</textarea><br>'; //vypiseme text
        echo '<input type="submit" value="Upravit" name="uprav">';
echo '<input type="hidden" name="udaj" value="'.$udaj.'" >';
        echo '</form>';
?> 
jenikkozak
Profil
tanderzz:
1. Sjednoť si, kde používáš metodu post a kde get.
2. Údaje získané oběma metodami nemůžeš vkládat do databáze neošetřené. Textové řetězce ošetři pomocí mysql_real_escape_string(); tam, kde očekáváš číselné hodnoty, přetypuj na číslo.
3. Zkus být samostatnější, jinak se daleko nedostaneš.
4. Pokud ti něco nejde, lépe popiš, v čem je problém.
tanderzz
Profil *
okey tak jsem to změnil tady:
$nadpis = $_GET['nadpis'];
        $text = $_GET['text'];

jinak se ale fakt snažím, ale nemůžu na nic přijít .. :(


změnil jsem to na:
$nadpis = $_POST['nadpis'];
$text = $_POST['text'];
panther
Profil
tanderzz:
názvy polí a proměnných v PHP nejsou náhodné, podle toho, jak se program vyspí, ale jsou takové, jak si je pojmenuješ.

Ve formuláři je method=post, data z něj tedy v GETu samozřejmě být nemohou.
tanderzz
Profil *
ano to jsem opravil viz #3 :)
Tori
Profil
Pokud není odeslaný formulář, tak proměnná $udaj na ř. 11 19 (překlep) bude nedefinovaná.
Amunak
Profil
tanderzz:
Ovšem stále to nemáš ošetřené proti SQL injection.
tanderzz
Profil *
ahojte můj kod po upravení vypadá takto:
<?php
include("db.php");

if(isset($_POST['uprav'])) //ak bolo stlacene tlacitko uprav
{
        $nadpis = $_POST['nadpis'];
        $text = $_POST['text'];
        $udaj = $_POST['udaj'];
       

        $sql ="UPDATE tabulka set nadpis='".$nadpis."', text='".$text."' WHERE id = '".$udaj."'"; //upravime udaje v db
        $vysledok=mysql_query($sql);
        if ($vysledok) {
        echo "Udaj uspesne upraveny"; //vypise uspesnost
        } else {
        echo "Udaj nemohol byt upraveny! Skuste to ešte raz."; //vypise neuspesnost
}}

        $sql = mysql_query("SELECT * FROM tabulka where id= '$udaj'"); //vytiahneme udaje z db
        $vypis = mysql_fetch_row($sql);

        echo '<form method="post">';
        echo 'Nadpis: <input name="nadpis" type="text" value="'.$vypis["nadpis"].'"><br>'; //vypiseme nadpis
        echo 'Text: <textarea name="text" cols="30" rows="3">'.$vypis["text"].'</textarea><br>'; //vypiseme text
        echo '<input type="submit" value="Upravit" name="uprav">';
echo '<input type="hidden" name="udaj" value="'.$udaj.'" >';
        echo '</form>';
?> 

necméně stále nefunguje a já se do toho zamotávám víc a víc :/


Amunak:
radši nejdřív dořeším funkčnost :D :)
panther
Profil
tanderzz:
necméně stále nefunguje
což aktuálně znamená co přesně?
tanderzz
Profil *
což znamená, že mi to nevypíše text do pole + ani když se snažim upravit to v prázdném poli (napíšu tam něco a zmáčknu Upravit) tak to v db nic nezmění .... :/
Amunak
Profil
tanderzz:
Předpokládám, že "udaj" je nějaký identifikátor záznamu (článku?). U výpisu ho však nijak nezískáváš. Zkusil bych něco takového:
<?php
require 'db.php';

$udaj = urldecode($_GET['udaj']);

if(isset($_POST['uprav']))
{
    if(isset($_POST['nadpis']))
        $nadpis = mysql_real_escape_string($_POST['nadpis']);
    if(isset($_POST['text']))
        $text = mysql_real_escape_string($_POST['text']);

    if(isset($nadpis) && isset($text) && !empty($nadpis) && !empty($text))
    {
        $sql = "UPDATE `tabulka` "
             . "SET `nadpis` = '" . $nadpis . "', `text` = '" . $text . "' "
             . "WHERE `id` = '" . mysql_real_escape_string($udaj) . "'";
        if(mysql_query($sql))
        {
            echo "Udaj uspesne upraveny";
        }
        else
        {
            echo "Udaj nemohol byt upraveny! Došlo k chybě v SQL dotaze: " . mysql_error();
        }
    }
    else
    {
        echo "Musíte vyplnit všechny údaje.";
    }
}

$vypis = mysql_fetch_assoc(mysql_query("SELECT * FROM `tabulka` WHERE `id` = '" . mysql_real_escape_string($udaj) . "'"));

echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '?udaj=' . urlencode($udaj) . '">';
echo 'Nadpis: <input name="nadpis" type="text" value="' . htmlspecialchars($vypis['nadpis']) . '"><br>';
echo 'Text: <textarea name="text" cols="30" rows="3">' . htmlspecialchars($vypis['text']) . '</textarea><br>';
echo '<input type="submit" value="Upravit" name="uprav">';
echo '</form>';

Ten identifikátor (uprav) tady předávám v URL. Pokud tedy na takovou editaci lezeš třeba z nějakého seznamu článků, musel bys tam mít adresy např. ve formátu <a href="uprav.php?udaj=nejake-id-clanku">Nějaký článek</a>

Taky bys mohl zvážit použití novějšího MySQLi nebo PDO (rozšíření mysql je zastaralé). Velmi jednoduše se dá pracovat také s dibi
tanderzz
Profil *
když tam dám www.neco/edit.php?uprav=22

tak mi to vyhodí tohle (formulář tam ale je):
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'www-data'@'localhost' (using password: NO) in /d1/www/domain/lupacovka.cz/science/edit.php on line 31

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /d1/www/domain/lupacovka.cz/science/edit.php on line 31

Warning: mysql_query() [function.mysql-query]: Access denied for user 'www-data'@'localhost' (using password: NO) in /d1/www/domain/lupacovka.cz/science/edit.php on line 31

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /d1/www/domain/lupacovka.cz/science/edit.php on line 31

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /d1/www/domain/lupacovka.cz/science/edit.php on line 31
Amunak
Profil
tanderzz:
Omylem jsem smazal include... přidej si na začátek
<?php
require 'db.php';

//zbytek kódu...
tanderzz
Profil *
no jsme zase na začátku, text to do pole nevypíše a když chci změnit text článku (nevypsaného - jenom píšu do prázdného pole), tak mi to napíše musíte vyplnit všechny údaje... i když vyplnuju všechno, nejspíš to bude zapříčiněno tímto: echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '?udaj=' . urlencode($udaj) . '">';
a poté co mi to vypíše tuto hlášku, tak se url změní z www.neco/edit.php?uprav=23 na www.neco/edit.php?udaj= ..
Amunak
Profil
tanderzz:
Opraveno, místo uprav má být pochopitelně udaj. Kdyby sis ten köd přečetl a snažil se ho pochopit, tak bys na to přišel. Taky by sis měl zapnout všechny chybové hlášky (včetně notice) protože pak by ti to aspoň vyhodilo jasnou chybu, že tomu chybí parametr udaj...

Zkus tedy example.com/edit.php?udaj=23 - mělo by to fungovat.
tanderzz
Profil *
Amunak:
Opraveno, místo uprav má být pochopitelně udaj. Kdyby sis ten köd přečetl a snažil se ho pochopit, tak bys na to přišel. Taky by sis měl zapnout všechny chybové hlášky (včetně notice) protože pak by ti to aspoň vyhodilo jasnou chybu, že tomu chybí parametr udaj...

já jsem si to myslel, ale nechtěl jsem tu zase napsat nějakou hovadinu, protože si v tom lepší a prostě jsem nechtěl dělat frajera ... jinak ted to jde upravit (hodnota v db se změní) ale stále musíme dořešit to vypsání do pole :)
Amunak
Profil
tanderzz:
Teoreticky by to mělo fungovat celé tak jak jsem to poslal; mělo by se to do toho pole normálně vypsat.

Zkus si na začátek ještě dopsat
<?php
error_reporting(E_ALL);

//require....

jestli ti to vypíše nějakou chybu. Případně na řádku 33 nahraď $vypis:
$query = mysql_query("SELECT * FROM `tabulka` WHERE `id` = '" . mysql_real_escape_string($udaj) . "'");
if($query === false)
  die('Chyba v SQL: ' . mysql_error());
$vypis = mysql_fetch_row($query);
tanderzz
Profil *
vypíše mi to toto:
Notice: Undefined index: nadpis in /d1/www/domain/lupacovka.cz/science/edit.php on line 36
Notice: Undefined index: text in /d1/www/domain/lupacovka.cz/science/edit.php on line 37
panther
Profil
tanderzz, Amunak:
proč se nepodívate, co vrací funkce mysql_fetch_row, kterou používáte? Obzvláště ty, tanderzz, bys měl zapojit trochu vlastní iniciativy. Vždy jen něco slepě zkopíruješ a vůbec se nesnažíš přemýšlet - možnosti přijít na to, co je špatně, jsi měl dvě: podívat se do manuálu nebo si dupnout proměnnou $vypis.
Fisir
Profil
Reaguji na tanderzza [#18]:
Vyhledávače dnes stávkují?
To znamená, že máš nedefinované proměnné. Buď je definuj, nebo si toho nevšímej. (Pro nezobrazení smaž error_reporting(E_ALL);.)
tanderzz
Profil *
dobře jak je definovat ? nemužu tam přece jen tak vložit if (!isset($_GET['text'])){$_GET['text']='';} v celku chápu v čem je problém ale nevím jak vyměnit ' .htmlspecialchars( $vypis['text']) . ' za if (!isset($_GET['text'])){$_GET['text']='';} ....


sorry omluvám se, jsem vůl, změnil jsem to zde:
if(isset($_POST['nadpis'])) {$_POST['nadpis']='';}
        $nadpis = mysql_real_escape_string($_POST['nadpis']);
    if(isset($_POST['text'])) {$_POST['text']='';}
        $text = mysql_real_escape_string($_POST['text']);



no ale stejně mi to nejede ... :/
Amunak
Profil
tanderzz:
Teď jsi úplně mimo. Předtím to bylo v pořádku. panther správně poukázal na to, že po mysql_fetch_array chceme něco, co nedělá. Použij místo něj mysql_fetch_assoc.
Upravil jsem i kód v [#11].

Fisir:
nebo si toho nevšímej
Nevím, jestli je to úplně správný přístup. Obzvlášť, když může dojít k chybě někde jinde, odešle se to třeba prázdné, a článek se nám smaže.
tanderzz
Profil *
Amunak, panther, Fisir:
dííííkyyyyy!!!! už to funguje !! jsem vám zavázán ! :)

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: