Autor Zpráva
michal454454
Profil
Zdravim potřeboval bych prosim radu jak uložit komenty do DB podle id článku ke kterému koment píši.. zatím mám vložení do DB jen přes insert.. v DB mám tabulku KOMENTARE(id,komentar,id_clanku,id_uzivatele), takže se mi ukládají do DB zatím ukládají všechny komenty nezávisle na článku.. který jsem zatím jen k jednomu komentu napsal ručně v DB..
lionel messi
Profil
michal454454:
Ak prenášaš id článku ako parameter v url adrese (čiže example.com/index.php?clanok=1, nájdeš ho v superglobálnom poli $_GET["clanok"], čo už bez problémov uložíš do db.
michal454454
Profil
Ok a kam toto napisu když mám soubor
koment.php
<?php
 class koment{
     private $db;
public function __construct(&$db){

session_start();
//session_regenerate_id(true);
$this->db = $db;

}
    public function pridejKoment($koment) {
    
    
if($this->db->insert('komentare',['komentar' => $koment])){
return "<p>Komentář byl úspěšně přidán !</p>";

} else {
return "<p>Chyba databáze</p>";
}

}
    

}
?>
index.php
$k= new koment($db);
case 'zobrazClanek': 
        if(isset($_GET['id'])){
            if(isset($_POST['forum'])){
            echo $k->pridejKoment($_POST["forum"]);
            }
            
            
            $clanek = $db->get('clanky','*',['id' => $_GET['id']]);
                include_once "./articleViewer.php";
            if($u->checkLogin($referer) === true){
            if($_GET['action']== 'zobrazClanek'){
                echo "<form action='./index.php?action=zobrazClanek&id=".$_GET['id']."' method='POST'>
                                   Napište váš komentář<br />
                                  <input type='text' name='forum' /><br />
                                  <input type='submit' value='odeslat'/>
                                 </form>";
    
    }
            }
Micruss
Profil
To je hodně divoký :D...

Přeskočím tu třídu a řeknu ti problém...

Přijde mi, že blbě předáváš paremetry nevím jak máš postavený formulář... ale ty vložíš do databáze jen sloupec "komentar" a chybí ti tam id_clanku, id_uzivatele.. takze se tam doplní defaultní hodnota tipuju NULL/0, buď předej metodě více parametrů a nebo celej $_POST... a pak to z toho dostaň co chceš samozřejmě by jsi to měl ošetřit pomocí escape funkcí

Každopádně bych opravil to $_GET['id'] třeba na $clanek_id = (int)$_GET['id']; a dále pracoval s touto proměnou
michal454454
Profil
tak ted to mám takto.. TABULKA komentare(id,komentar,id_clanku,id_uzivatele)
index.php
case 'zobrazClanek': 
        if(isset($_GET['id'])){
                      
            
            
            $clanek = $db->get('clanky','*',['id' => $_GET['id']]);
        include_once "./articleViewer.php";
            if($u->checkLogin($referer) === true){
            if($_GET['action']== 'zobrazClanek'){
                
                include_once "./pridejKoment.php";
                }
            }
            }
pridejKoment.php
<?php
include_once './class/medoo.php';
include_once './class/koment.php';

$db = new medoo();
$k = new koment($db);

if(isset($_POST["forum"],$_POST["id_clanku"],$_POST["id_uzivatele"])){
echo $k->pridejKoment($_POST["forum"],$_POST["id_clanku"],$_POST["id_uzivatele"]);
}
$koment=$db->select("komentare","*",["id_clanku" => $_GET["id"]]);

foreach($koment as $kom){

echo "<table>
<th><td>Komentář</td><td>Článek_id</td></th>
<tr><td>". $kom["komentar"]."</td><td>". $kom["id_clanku"]."</td></tr>

</table>";
}
echo "<form action='pridejKoment.php' method='POST'>
<textarea name='forum'></textarea>
<input type='text' name='id_clanku'/>
<input type='text' name='id_uzivatele'/>
<input type='submit' value='Odeslat'/>
</form>";
?>
koment.php(trida s funkci pro pridani do DB)
<?php
 class koment{
     private $db;
public function __construct(&$db){


$this->db = $db;

}
    public function pridejKoment($koment,$id_clanku,$id_uzivatele) {
    
    $id_clanku=(int)$_GET["id"];
if($this->db->insert('komentare',['komentar' => $koment,'id_clanku'=>$id_clanku,'id_uzivatele'=>$id_uzivatele])){
return "<p>Komentář byl úspěšně přidán !</p>";

} else {
return "<p>Chyba databáze</p>";
}

}
    

}
?>
michal454454
Profil
Neporadil by teda někdo jak dostat ID clanku ne kterým pisu komentar dostat do tabulky komentaru do sloupce id_clanku? nevím jak to mám teď napsat
Diky
Dan Charousek
Profil
Udělej to pomocí skrytého inputu:
echo '<input type="hidden" name="id_clanku" value="' . htmlspecialchars($_GET['id']) . '">';
Nemusíš to ID poté vypisovat ruč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: