Autor Zpráva
nyllo
Profil
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
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
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
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
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
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 pochopil


echo 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);
"1" je string. Print_r na stringu zahlasi error, takze by se 1 nevypsalo.
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);
Melo by to vypsat sql dotaz. muzes si tak zkontrolovat, zda je ok, zda by jel ten samy dotaz i v phpmyadminu. Pokud je chybny, napise to podobnou chybu jako v phpmyadminu.
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
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
 $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
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
$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
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
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
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
Tori:
toto ještě neznám

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: