Autor | Zpráva | ||
---|---|---|---|
nyllo Profil |
#1 · Zasláno: 27. 7. 2013, 21:57:22
Dobrý den.
Dělám si jednoduchou editaci sql v php ale nedaří se mi zprovoznit výpis. PHP níže <?php include 'config.php'; mysql_connect($dbserver, $dblogin, $dbheslo); mysql_select_db($dbnazev); mysql_query("SET NAMES 'UTF-8'"); if(isset($_POST['send'])) { $clanek = intval($_GET['clanek']); $day = htmlspecialchars($_POST['day']); $date = htmlspecialchars($_POST['date']); $name = htmlspecialchars($_POST['name']); $css = htmlspecialchars($_POST['css']); $list = htmlspecialchars($_POST['list']); $images = htmlspecialchars($_POST['images']); $vloz ="UPDATE events set day='$day', date='$date', name='$name', css='$css', list='$list', images='$images' WHERE id = '".$clanek."'"; $result=mysql_query($vloz); echo '<script type="text/javascript" for="window" event="onLoad()"> <!-- window.location.href="index.php" // --> </script>'; } echo '<div id="main-frame-error" jstcache="0">'; echo '<div id="box" jstcache="0">'; echo '<div id="content-top" jstcache="0">'; echo '<img src="./logo.png"/>'; echo '</div>'; echo '</div>'; echo '</div>'; echo '<p>'; echo '<div id="main-frame-error" jstcache="0">'; echo '<div id="box" jstcache="0">'; echo '<div id="content-top" jstcache="0">'; //************************* výpis formuláře ************************ $vypis = mysql_query("SELECT * FROM events where id = '".$clanek."'"); $zobraz = mysql_fetch_row($vypis); echo '<form method="post">'; echo 'Den: <select name="day" class="form" value="'.$zobraz[1].'" type="text"> <option class="form" value="Pondělí" selected="selected">Pondělí</option> <option class="form" value="Úterý">Úterý</option> <option class="form" value="Středa">Středa</option> <option class="form" value="Čtvrtek">Čtvrtek</option> <option class="form" value="Pátek">Pátek</option> <option class="form" value="Sobota">Sobota</option> <option class="form" value="Neděle">Neděle</option> </select><br>'; echo 'Datum: <input name="date" class="form" value="'.$zobraz[2].'" type="date"><br>'; echo 'Název: <input name="name" class="form" value="'.$zobraz[3].'" type="text"><br>'; echo 'Id události: <input name="list" class="form" value="'.$zobraz[4].'" type="text"><br>'; echo 'Odkaz timelinu: <input name="images" class="form" value="'.$zobraz[5].'" type="text)"><br>'; echo 'css extra: <input name="css" class="form" cols="30" value="'.$zobraz[6].'" type="text)"><br>'; echo '<p><b>Příklad:</b> font-family: pieces of eight; font-size: 21</p>'; echo '<p>'; echo '<button type="submit" class="button" name="send">Vložit</button>'; echo '</form>'; echo '</div>'; echo '</div>'; echo '</div>'; ?> |
||
Joker Profil |
#2 · Zasláno: 27. 7. 2013, 22:04:23
nyllo:
A to „nedaří se zprovoznit“ vypadá jak konkrétně? Jinak některé chyby, které tam jsou: • Používají se špatné escapovací funkce, htmlspecialchars() je ošetření pro HTML, ne pro databázi. Tam by mělo být mysql_real_escape_string. • Na přesměrování je efektivnější poslat hlavičku 301 přes header, než vložit do stránky skript na onload. • Většina mysql_* funkcí může vracet false v případě nějaké chyby, skript by s tím měl počítat. |
||
Kajman Profil |
#3 · Zasláno: 27. 7. 2013, 22:06:40
nyllo:
A navíc proměnnou $clanek používáte pro výpis i ve chvíli, kdy nemusí být nastavená. |
||
nyllo Profil |
vše s tagem by mělo vypsat text obsažený v DB
.$zobraz[x]. zde si nejsem jist zda je toto možné echo 'Den: <select name="day" class="form" value="'.$zobraz[1].'" type="text"> <option class="form" value="Pondělí" selected="selected">Pondělí</option> <option class="form" value="Úterý">Úterý</option> <option class="form" value="Středa">Středa</option> <option class="form" value="Čtvrtek">Čtvrtek</option> <option class="form" value="Pátek">Pátek</option> <option class="form" value="Sobota">Sobota</option> <option class="form" value="Neděle">Neděle</option> </select><br>'; Poprosil bych přímé příklady jsem začátečník v PHP |
||
peta Profil |
#5 · Zasláno: 29. 7. 2013, 12:41:26
Select nema hodnotu value, i kdyby jsi na print_r($zobraz); tam mel spravnou hodnotu.
Formuláře » select https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select <select name="day" class="form" value="'.$zobraz[1].'" type="text"> |
||
nyllo Profil |
#6 · Zasláno: 29. 7. 2013, 20:43:49
toto mi bohužel stále neřeší problém s výpisem do .$zobraz[x].
echo 'Datum: <input name="date" class="form" value="'.$zobraz[2].'" type="date"><br>'; |
||
peta Profil |
Tak znova.
print_r($zobraz); ti vypise co? Pokud je tam to, co tam ma byt, pak se radek v [#6] vypise spravne (da se to zkontrolovat treba v prohlizeci, kdyz kliknes na menu Zobrazit zdrojovy kod stranky, co to do html kodu vypsalo). Pokud je tam neco jineho, tak mas chybu v predchozim kodu. Treba jako, kdyz posilas $_POST, proc se snazis ziskat hodnotu clanku z $_GET?
Co treba pridat do kodu vypis chyb error_reporting, vypis mysql chyt mysql_error, vypisovat si sql prikazy echo $query, vypisovat si promenne echo $promenna, print_r($promenna), var_dump($promenna)? |
||
Tori Profil |
#8 · Zasláno: 31. 7. 2013, 13:34:28
nyllo:
Na ř.5 by mělo asi být mysql_query("SET NAMES utf8"); (bez apostrofů).
A přečtěte si ještě jednou [#3]. Chcete vypisovat článek, ale do SQL nepředáváte ID toho článku, takže v proměnné $zobraz bude vždy prázdné pole. (na ověření, jestli dotaz něco našel nebo ne, můžete použít mysql_num_rows)
|
||
nyllo Profil |
tak a už jsem tak zmaten že nevím co dělat.
Znovu podotknu že toto je první php které dělám. mysql_query("SET NAMES utf8"); < toto jsem pochopilecho print_r($zobraz); vypíše pouze 1
|
||
peta Profil |
Sim tem, cele to napis, co ti to vypsalo. Pripadne si to do kodu dej jako
echo '<pre>'; print_r($zobraz); Pokud by se vypsalo array(1), pak mas v poli jeden prvek a to nedava take smysl, protoze sql dotaz mas s * a je pravdepodobne, ze mas vice sloupcu nez 1. Cemuz tez odpovida prikaz update. SELECT * FROM events ... set day='$day', date='$date', name='$name', css='$css', list='$list', images='$images' Radek 38, 39 bych zmenil na $query = "SELECT * FROM events where id = '".$clanek."'"; echo $query; $vypis = mysql_query($query) or die(mysql_error()); $zobraz = mysql_fetch_row($vypis); // bych pouzil radeji mysql_fetch_assoc echo '<pre>'; print_r($zobraz); Nemelo by to vypsat sql chybu. Pokud je ok, tak to jeste vypise obsah pole v $zobraz. a vsechno, co to vypise, cele, by mne zajimalo, pokud si to podle toho neopravis uz sam. |
||
Joker Profil |
#11 · Zasláno: 1. 8. 2013, 10:14:58
peta:
„"1" je string.“ Nebo číslo nebo boolean (pokud je řeč o tom, že print_r vypíše 1). „Print_r na stringu zahlasi error, takze by se 1 nevypsalo.“ Blbost („If given a string, integer or float, the value itself will be printed.“). Kromě čísla 1 a řetězce "1" dá výstup 1 i boolean true. Ale vzhledem k tomu, že mysql_fetch_array standardně nic z toho nevrací, bude nejspíš v $zobraz hodnota něčeho jiného, než toho mysql_fetch_row. |
||
peta Profil |
Joker: Fiha, pravda, dik. To bylo mozna u echo, ze nedokazal vypsat array a misto toho placal nejaky error. Nebo, uz nevim, mozna to opravili. ... jo, echo, napsal Array, ale ne obsah.
|
||
nyllo Profil |
#13 · Zasláno: 1. 8. 2013, 15:40:53
$query = "SELECT * FROM events where id = '".$clanek."'"; echo $query; $vypis = mysql_query($query) or die(mysql_error()); $zobraz = mysql_fetch_row($vypis); // bych pouzil radeji mysql_fetch_assoc echo '<pre>'; print_r($zobraz); kod jsem upravil. Nyní přibylo toto SELECT * FROM events where id = ''
|
||
PostCC Profil |
#14 · Zasláno: 1. 8. 2013, 15:48:55
nyllo:
Takže? Z uvedeného je zřejmé, že proměnná $clanek asi nebude naplněná tím, co očekáváte. Z výše uvedeného mi není jasné, odkud se má vzít. Sestavujete formulář, kde metodou POST odesíláte nějaké hodnoty, nicméně proměnnou $clanek plníte z metody GET, jak vidno zde: $clanek = intval($_GET['clanek']); $day = htmlspecialchars($_POST['day']); $date = htmlspecialchars($_POST['date']); $name = htmlspecialchars($_POST['name']); ... Zkuste si ujasnit čím se dotyčná proměnná má vlastně plnit a odkud ta hodnota pochází. Z formuláře zjevně nepřijde. |
||
nyllo Profil |
#15 · Zasláno: 1. 8. 2013, 15:56:09
$clanek = intval($_GET['clanek']); $day = htmlspecialchars($_POST['day']); $date = htmlspecialchars($_POST['date']); $name = htmlspecialchars($_POST['name']); V řípadě že zde proběhne změna nebudou data odeslána jak mají |
||
Tori Profil |
#16 · Zasláno: 1. 8. 2013, 19:55:31
Tak by mělo stačit, když tenhle řádek
$clanek = intval($_GET['clanek']); vystrčíte před podmínku (tj. před řádek 7 v [#1]).
|
||
nyllo Profil |
#17 · Zasláno: 3. 8. 2013, 01:09:09
echo 'Den: <select name="day" class="form" type="text"> <option class="form" value="Pondělí" selected="selected">Pondělí</option> <option class="form" value="Úterý">Úterý</option> <option class="form" value="Středa">Středa</option> <option class="form" value="Čtvrtek">Čtvrtek</option> <option class="form" value="Pátek">Pátek</option> <option class="form" value="Sobota">Sobota</option> <option class="form" value="Neděle">Neděle</option> </select><br>'; prosím vás jak zde určím výchozí den dle obsahu SQL? Databáze toto vypisuje pod '.$zobraz[2].'
|
||
Tori Profil |
#18 · Zasláno: 3. 8. 2013, 07:08:39
nyllo:
U každé možnosti ( <option> ) porovnáte její hodnotu se $zobraz[2]. Pokud se shodují, přidáte té možnosti selected .
|
||
nyllo Profil |
#19 · Zasláno: 4. 8. 2013, 16:08:10
Tori:
toto ještě neznám |
||
Časová prodleva: 11 let
|
0