Autor | Zpráva | ||
---|---|---|---|
tanderzz Profil * |
#1 · Zasláno: 22. 6. 2012, 16:36:40
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 * |
#3 · Zasláno: 22. 6. 2012, 21:59:16 · Upravil/a: tanderzz
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 |
#4 · Zasláno: 23. 6. 2012, 08:06:19
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 GET u samozřejmě být nemohou.
|
||
tanderzz Profil * |
#5 · Zasláno: 23. 6. 2012, 09:10:45
ano to jsem opravil viz #3 :)
|
||
Tori Profil |
Pokud není odeslaný formulář, tak proměnná $udaj na ř.
|
||
Amunak Profil |
#7 · Zasláno: 23. 6. 2012, 14:41:42
tanderzz:
Ovšem stále to nemáš ošetřené proti SQL injection. |
||
tanderzz Profil * |
#8 · Zasláno: 23. 6. 2012, 14:58:18 · Upravil/a: tanderzz
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 |
#9 · Zasláno: 23. 6. 2012, 15:05:18
tanderzz:
„necméně stále nefunguje“ což aktuálně znamená co přesně? |
||
tanderzz Profil * |
#10 · Zasláno: 23. 6. 2012, 15:12:35
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 * |
#12 · Zasláno: 23. 6. 2012, 18:02:11
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 * |
#14 · Zasláno: 23. 6. 2012, 18:14:27
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 * |
#16 · Zasláno: 23. 6. 2012, 19:02:02
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 |
#17 · Zasláno: 23. 6. 2012, 19:28:34
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 * |
#18 · Zasláno: 23. 6. 2012, 19:41:33
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 smaž error_reporting(E_ALL); .)
|
||
tanderzz Profil * |
#21 · Zasláno: 23. 6. 2012, 20:09:21 · Upravil/a: tanderzz
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 * |
#23 · Zasláno: 23. 6. 2012, 20:34:07
Amunak, panther, Fisir:
dííííkyyyyy!!!! už to funguje !! jsem vám zavázán ! :) |
||
Časová prodleva: 12 let
|
0