+ Reply to Thread
Results 1 to 7 of 7

Thread: Editace záznamu v databázi

  1. #1

    Editace záznamu v databázi

    Zdravím Vás již delší dobu řeším jeden problém, a to ten že se nenačtou údaje z databáze do formuláře. Tedy načtou, ale načte se jen titulek článku. Kde by mohl být problém?

    Zde je kód:

    PHP Code:
    <?php
    include("../connect.php");

    $id $_GET['id'];

    $clanky $_GET['id'];
    $id['id'];

    $clanky mysql_query ("SELECT * FROM clanky WHERE id = $id");
        
    $id mysql_fetch_array($clanky) or die(mysql_error());
       
    echo 
    '<form method="post" action="">
            <table>
            <tr><td>Název článků:</td><td><input type="text" name="nazev" value="'
    .$id["nazev"].'"></td></tr>
            <tr><td>Popis článků:</td><td><textarea name="popis" value="'
    .$id["popis"].'" style="width:90%;height:50px;"></textarea></td></tr>
            <tr><td>Text článků:</td><td><textarea name="clanek" value="'
    .$id["clanek"].'" class="mceEditor" style="width:40%;height:350px;">
            </textarea></td></tr>
            <tr><td></td><td><input type="submit" value="Vložit článek"></td></tr></table>
     </form>'
    ;
    ?>

  2. #2
    No v tomto kode sa nachadza viacero chyb. Ak som to spravne pochopil tak mas formular kde chces aby ludia vyplnili Nazov clanku, Popis clanku a Text clanku. Nasledne dane udaje vlozili do databazy. Nasledne sa mozu niekam zalogovat a tam budu moct dany clanok editovat(kde budu uz vpisane hodnoty daneho clanku).

    Vkladanie:

    Code:
    if(isset($_POST['submit']))
    {
        $sql = "INSERT INTO clanky(nazev,popis,clanek) VALUES("'.$_POST['nazev'].'","'.$_POST['popis'].'","'.$_POST['clanek'].'")";
        $query = mysql_query($sql);
    }
    else
    {
    echo '<form method="post" action=""> 
            <table> 
            <tr><td>Název článků:</td><td><input type="text" name="nazev"></td></tr> 
            <tr><td>Popis článků:</td><td><textarea name="popis" style="width:90%;height:50px;"></textarea></td></tr> 
            <tr><td>Text článků:</td><td><textarea name="clanek" class="mceEditor" style="width:40%;height:350px;"> 
            </textarea></td></tr> 
            <tr><td></td><td><input type="submit" name="submit" value="Vložit článek"></td></tr></table> 
     </form>';
    }
    Je to jednoduche a neosetrene ale malo by to fungovat. Teraz na editaciu.

    Code:
    $id = $_GET['id'];
    $query = "SELECT * FROM clanky WHERE id = $id";
    $result = mysql_query($query) or die(mysql_error());
    
    while($row = mysql_fetch_array($result)) 
    {
    echo '<form method="post" action=""> 
            <table> 
            <tr><td>Název článků:</td><td><input type="text" name="nazev" value="'.$row["nazev"].'"></td></tr> 
            <tr><td>Popis článků:</td><td><textarea name="popis" value="'.$row["popis"].'" style="width:90%;height:50px;"></textarea></td></tr> 
            <tr><td>Text článků:</td><td><textarea name="clanek" value="'.$row["clanek"].'" class="mceEditor" style="width:40%;height:350px;"> 
            </textarea></td></tr> 
            <tr><td></td><td><input type="submit" value="Vložit článek"></td></tr></table> 
     </form>';
    }
    Hlavny problem bol ze si to nevlozil do cyklu. Ale aj tak, v kode ktory som sem napisal nieje riesene co sa stane ak clovek stlaci submit. Ak by ti nieco neslo daj vediet, lebo to pisem sem priamo do fora a netestoval som to tak ze syntax errory su pripustne
    Všetko o hrách a novinkách s herného sveta nájdete na http://the-guild.cz/.

  3. #3
    1) Vkládání mi funguje, jen jsem nepřepsal value v input na Editovat článek, ale to je drobnost.
    2) Články vkládám jen já přes administraci, a ne návštěvníci stránky.
    3) Skript který si napsal nechce fungovat, nevypíše ani žádný error, prostě nic, jen čistá stránka se vzhledem, a bez formuláře.

  4. #4

    Textarea nemá atribút value

    Ja si myslím, že tvoj hlavný problém je ten, že element textarea nemá atribút value, ale jej obsah sa píše priamo do tela elementu:
    Code:
    <?php
      include("../connect.php");
    
      $_GET['id'] = (int)$_GET['id']; // !! pretypovanie na číslo
    
      $clanky = mysql_query ("SELECT * FROM `clanky` WHERE id=$_GET[id]");
      $clanok = mysql_fetch_assoc($clanky); // mysql_fetch_array() je náročnejšie na pamäť
    
      // ochrana pred XSS
      $nazevClanku = htmlspecialchars($clanok['nazev'], ENT_QUOTES, 'UTF-8');
      $popisClanku = htmlspecialchars($clanok['popis'], ENT_QUOTES, 'UTF-8');
      $textClanku = htmlspecialchars($clanok['clanek'], ENT_QUOTES, 'UTF-8');
    ?>
    <form method="post" action="">
      <table>
        <tbody>
          <tr>
            <td>Název článků:</td>
            <td><input type="text" name="nazev" value="<?php echo $nazevClanku; ?>"></td>
          </tr>
          <tr>
            <td>Popis článků:</td>
            <td><textarea name="popis" style="width:90%;height:50px;"><?php echo $popisClanku; ?></textarea></td>
          </tr>
          <tr>
            <td>Text článků:</td>
            <td><textarea name="clanek" class="mceEditor" style="width:40%;height:350px;"><?php echo $textClanku; ?></textarea></td>
          </tr>
          <tr>
            <td colspan="2"><input type="submit" value="Vložit článek"></td>
          </tr>
        </tbody>
      </table>
    </form>;
    A k tým tvojim bodom:
    1) ok, to len WereWolf chcel zamachrovať :-p
    2) Nikdy nevieš kto sa ti do administrácie dostane. A hlavne ak to nebudeš striktne ošetrovať všade tak je väčšia šanca, že na to niekedy zabudneš.
    3) To bude možno tým, že nemáš zapnuté chyby, alebo ich máš zapnuté na nejakú slabú úroveň. Aj keď na 1. pohľad to vyzerá ok

    Inak chybu by si našiel hneď ak by si to zvalidoval. Ja používam HTML validator Add-on do FF, a hneď mi ukáže ak je na stránke niečo zle.
    Last edited by m-> 29; 17.04.2011 at 15:45.

  5. #5
    Code:
    $id = (int)$_GET['id'];
    $query = "SELECT * FROM clanky WHERE id = $id";
    $result = mysql_query($query) or die(mysql_error());
    if(!$result)
    {
        print "Neprebehla query";
    }
    while($row = mysql_fetch_array($result)) 
    { 
    ?>
    Neviem preco ale nemozem napisat suvisli kod tak do delin na dva.
    Code:
            <form method="post" action=""> 
            <table> 
            <tr><td>Název článků:</td><td><input type="text" name="nazev" value="<?php echo $row["nazev"]; ?>"></td></tr> 
            <tr><td>Popis článků:</td><td><textarea name="popis" style="width:90%;height:50px;"><?php print $row["popis"]; ?></textarea></td></tr> 
            <tr><td>Text článků:</td><td><textarea name="clanek" class="mceEditor" style="width:40%;height:350px;"><?php echo $row["clanek"]; ?>
            </textarea></td></tr> 
            <tr><td></td><td><input type="submit" value="Vložit článek"></td></tr></table> 
     </form>
    <?php
     } ?>
    ?>
    Ok tento kod som otestoval a pekne zbehne, aj ked id som dal na pevno. V hornom kode som zabudol ukoncit cyklus tak preto to neslo. m->29 ma pravdu mysql_fetch_assoc je menej narocnejsie na pamäť ale ja mam použil som tam fetch_array, to je na tebe čo si vyberieš. A na zaver, ja nemachrujem
    Last edited by Werewolf; 17.04.2011 at 18:35.
    Všetko o hrách a novinkách s herného sveta nájdete na http://the-guild.cz/.

  6. #6
    m-> 29: Díky, jsem blb že jsem to nezjistil dříve

  7. #7
    m-> 29 zese si mi dal na frak
    Všetko o hrách a novinkách s herného sveta nájdete na http://the-guild.cz/.

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts