Autor Zpráva
skrepyKOKO
Profil *
ahoj,dělám si kategorie,a potřeboval bych pomoct...
jde nějak udělat aby ten výběr kategorie byl v jednom souboru?
myslím že bych udělal kategorie.php,a pak podle databáze by bylo
kategorie.php?id=auta
pak např
kategorie.php?id=motorky apod...?
tohle bych jako dokázal ještě,ale jde o to,že kdybych v administraci přidal např 3 další kategorie tak aby se tam v tom souboru objevily?...
já jsem nejdřív přemejšel že bych to dělal vše ručně,např pro auta SELECT auta pro všechny kategorie SELECT * apod..
ale takhle bych potřeboval aby to dělalo automaticky,když zjistí že se v databázi objevila další kategorie tak aby se to tam prostě samo přidalo:)
pak bych udělal asi require_once pod menu kde by bylo v jaké kategorii se nachází...
dám příklad,mám kategorie.php,v administraci vytvořím článek kde přiřadím ten článek do kategorie novinka a auto
v článek se přidá ten nový článek s kategorii auta a novinky,ted když budu chtít v adminsitraci přidat další kategorii kterou ještě v administraci nemám,tak aby se prostě v tom kategorie objevil až přiřadím ten článek k té kategorii..
Doufám že jste mě pochopily,jelikož tohle se mě docela špatně vysvětluje písemně...
PS:prominte za nějaké chyby:)(pravopisne:D)
Spectator
Profil
Dobrej hlavolam. :-)
Než to přelouskám, nechceš tu otázku zjednodušit?
Připadá mi, ovšem nejsem si jist jestli jsem to přelouskal do správné podoby, že si pleteš databázi a php soubory. Kategorie ani auta, motorky, apod nejsou uloženy v souboru php, ale v tabulkách databáze. Pomocí funkcí PHP si o data v tabulkách říkáš a databáze ti je na základě správných příkazů vrací.
skrepyKOKO
Profil *
tak znova:D
mám databázi a v ní tabulku články a kategorie,
to jak nastavit kategorie vím,
potřeboval bych pomoct akorát s php když přidám do databáze novou kategorii tak aby si jí php našla sama a zařadila se do kategorie.php?id=nova kategorie
dám další příklad..
mám 2 kategorie,novinky a např auta
udělám článek kde přiřadím ke kategorii auta
v administraci chci přidat další kategorii např motorky
a přiřadím jí k tomu článku..
jde mě o to,abych ty kategorie měl v jednom souboru,a to kategorie.php
když přidám novou kategorii tak abych to nemusel dělat manualně že to tam dopíšu,tak aby si to našlo prostě samo:)
udělal bych tam select *,ale zas kdybych klikl na nějakou kategorii tak chci aby se mě zobrazily články s tou určitou kategorii,
php
Profil *
Tak jestli to chápu dobře, tak bys v DB potřeboval teda 3 nebo 2 tabulky, záleží jestli můžeš mít článek kterej může mít 2 kategorie třeba, pak by byli potřeba 3 tabulky, pokud ovšem máš pravidlo, že jeden článek = jedna kategorie, pak stačí jen 2 tabulky.

takže příklad pro 3 tabulky v DB
1 tabulka: kategorie, sloupečky ID(int) a name(varchar)
2 tabulka: clanky, sloupečky ID(int) a obsha(text)
3 tabulka - spojovací: kat_clan, slopečky ID_kat a ID_clan

tak a teď teda když založím novou kategorii, přidám jí teda do tabulky kategorie
na stránce pak můžu mít teda někde
<select>
, který bude obsahovat všechny kategorie z tabulky kategorie

když pak přidávám nový článek zvolím si teda ze
<select>
potřebnou kategorii napíšu článek a do DB ukládám článek a pak pro něj vytvořím propojení v tabulce kat_clan tím, že do ní pomocí INSERT vložím záznam s ID článku a ID kategorie

když pak budu chtít vybrat teda všechny články který budou mít kategorii, třeba ty motorky, tak musím vědět jaký ID kategorie motorky má
př:
vím že kategoriie motorky má ID=3
pak by dotaz moh vypadat takhle
SELECT c.* FROM clanky AS c, kat_clan AS k WHERE k.ID=3 AND c.ID=k.ID_clan - vyber všechny sloupečky z tabulky clanky které mají v tabulce kat_clan propojení s kategorií 3

tohle má jednu malou nevýhodu, musím znát předem jaký ID bude mít nový článek, ale to zas není takový problém.

Snad sem to napsal logicky správně :) za případné chyby se omlouvám a dofám, že mně někdo opraví, pokud tam nějaké budou.
skrepyKOKO
Profil *
př:
vím že kategoriie motorky má ID=3
pak by dotaz moh vypadat takhle
SELECT c.* FROM clanky AS c, kat_clan AS k WHERE k.ID=3 AND c.ID=k.ID_clan - vyber všechny sloupečky z tabulky clanky které mají v tabulce kat_clan propojení s kategorií 3

tohle má jednu malou nevýhodu, musím znát předem jaký ID bude mít nový článek, ale to zas není takový problém. 

právě tohle co si napsal bych chtěl aby to našlo to ID samo,a přidalo to do kategorie?id=něco samo...ostatní bych nějak udělal,ale prostě aby to id našlo samo když přidám novou kategorii....
a to s databází bych udělal takhle..
mám tabulku články,kde mám ID,jméno apod..
a tak bych udělal kategorii kde bych dal ID,IDc(id clanku) jmeno kategorie,
a pak bych to nějak dodělal,ale prostě aby to vše bylo v tom kategorie.php..pokud by to šlo:)
php
Profil *
hmm, tak asi takhle

mám 3 tabulky

tabulka s kategoriema:

CREATE TABLE 'test'.'kategorie' (
'ID' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'name' VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
) ENGINE = InnoDB;


tabulka s článkama:

CREATE TABLE 'test'.'clanky' (
'ID' INT( 10 ) NOT NULL ,
'clanek' TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( 'ID' )
) ENGINE = InnoDB;


a spojovací tabulka:

CREATE TABLE 'test'.'spojovaci_tabulka' (
'ID_kategorie' INT( 10 ) NOT NULL ,
'ID_clanku' INT( 10 ) NOT NULL ,
PRIMARY KEY ( 'ID_kategorie' , 'ID_clanku' )
) ENGINE = InnoDB;



new_kategorie.html

<!--soubor s formulářem pro odeslání nový kategorie-->

<form id='new_kategorie' action='save_kategorie.php' method='post'>
<input type='text' id='kategorie' name='kategorie'/>
<input type='submit' value='ulož' />
</form>


save_kategorie.php
//soubor pro uložení nový kategorie

$link = mysql_connect(DB_NAME, ACC , PASS );
mysql_select_db('test');
mysql_query("INSERT INTO 'test'.'kategorie' ('ID', 'name') VALUES (NULL, '$_POST[kategorie]') "); //uložení nové kategorie
mysql_close($link);
header("Location: někam na hlavní stránku třeba") //přesměrování nevím kam :)



a teď teda jako první budu potřebovat prvně přidat nějaký článek abych měl co zobrazovat, takže formulář pro přidání článku:

<?php
pridej_clanek.php

function laod_kategorie(){//funkce co mi vybere všechny kategorie z databáze a vrátí jejich pole

  $link = mysql_connect(DB_NAME, ACC, PASS);
  mysql_select_db('test');
  $query = mysql_query("SELECT * FROM 'test'.'kategorie'");

  while( $result = mysql_fetch_assoc($result) ){
    $ret[$result['ID']] = $result['name'];
  }
   mysql_close($link);
  return $ret;
}
?>
<form action='save_clanek.php' method='post' id='new_clanek'>
  <textarea name='clanek'></textarea>
  <select name='kategorie'>
  <?php
    foreach( load_kategorie() as $key => $val ){
    echo "<option value='$key'>$val</option>";
    }
  ?>
  </select>
  <input type='submit' value='ulož článek'>
</form>



<?php
//save_clanek.php - soubor pro uložení článku


$link = mysql_connect(DB_NAME, ACC, PASS); 
mysql_select_db('test');
$result = mysql_query("SELECT ID FROM 'test'.'clanky' ORDER BY ID DESC LIMIT 1") //vybere největší ID
while ($row = mysql_fetch_array($result, MYSQL_ASSOC) ){
  $nejvissi_id_clanku = (int) $row['ID'];
}

$new_id = ++$nejvissi_id_clanku; //a už vím ID nového článku, takže ho můžu propojit s odeslanou kategorií

//no a teď už jenom potřebuju vložit teda záznamy do tabulky
$ko = 0
mysql_query('BEGIN');

$result = mysql_query("INSERT INTO 'test'.'clanky' ('ID', 'clanek') VALUES ($new_id, '$_POST[clanek]') "); //vložení článku
if(!$result) $ko++;

$result = mysql_query("INSERT INTO 'test'.'spojovaci_tabulka'('ID_kategorie','ID_clanku')VALUES(".(int) $_POST['kategorie'].", $new_id)");
if(!$result)$ko++;

if( $ko != 0 ) mysql_query('ROLLBACK');
else mysql_query('COMMIT');

mysql_close($link);
header("Location: třeba na výpis článků"); 

?>



a nakonec teda výpis článků a to už se mi nechce psát tak jen okrajově, když budu teda chtít vypsat články pro danou kategorii tak akurát provedu dotaz na DB, který by moh vypadat nějak takhle:

$query = "SELECT 'c'.* FROM 'test'.'clanky' AS 'c', 'test'.'spojovaci_tabulka' AS 'st' WHERE 'st'.'ID_kategorie'=$_POST[id_kategorie] AND 'st'.ID_clanku='c'.'ID'";
//přičemš $_POST['id_kategorie'] získám z něčeho podobnýho jako je o kus víš  <select> v souboru 'pridej_clanek.php' u přidávání nového článku


možností je samozřejmě mnohem víc a tohle berte spíš jako takový návrh, spousta věcí tu není ošetřených a dořešených, takže než to do písmene kopírovat, tak to je spíš taková pomůcka jak by to teoreticky mohlo fungovat :)
skrepyKOKO
Profil *
mno...ty si udělal přesně to co už mám,a to co nemám si nedodělal:D já nepotřebuju (samozřejmě díky) vytvoření kategorie nebo článků,já potřebuju prostě jen výpis toho článku...
jak jsem psal..když přidám novou kategorii,tak prostě aby se tam objevila a už na 100% fungovala...
php
Profil *
Tak teď teda moc nechápu, takže potřebuješ, aby se ti někde vygenerovali odkazy na jednotlivé kategorie z DB nebo aby ti to vypsalo teda všechny články a k nim automaticky přiřadilo kategorie? Trochu víc upřesnit by to chtělo. Z těch prvních 2 komentářů sem moc moudrý nebyl totiž :)
skrepyKOKO
Profil *
a chyba..blbě jsem to napsal...potřebuju jen výpis těch kategorii...
aby to bylo ve formatu kategorie.php?kat=jmeno kategorie
když na to kliknu,tak se otevře určitá kategorie kde budou články které byly určeny tou kategorii...
např kategorie auto a v té kategorii budou články s kategorii auto
a když přidám novou kategorii tak abych to nemusel manualně natavovat že to tam musím dopsat,tak aby se to tam dávalo automaticky..(Asi přes SELECT *,)
php
Profil *
ach tak, no tak použiješ něco jako sem použil já, načtení všech kategorií z DB
function laod_kategorie(){//funkce co mi vybere všechny kategorie z databáze a vrátí jejich pole

  $link = mysql_connect(DB_NAME, ACC, PASS);
  mysql_select_db('test');
  $query = mysql_query("SELECT * FROM 'test'.'kategorie'");

  while( $result = mysql_fetch_assoc($result) ){
    $ret[$result['ID']] = $result['name'];
  }
   mysql_close($link);
  return $ret;
}


no a teď už jen stačí vygenerovat jednotlivý linky:

/*********vygeneruje odkazy na jednotlivý kategorie a rouvnou je vypíše**************/
foreach( laod_kategorie() as $key => $val ){
  echo "<a href='./kategorie.php?kat=$key' >$val</a>";
}
/************************************************************************/
$default_kat = 1;
if(isset($_GET['kat'])) $kat = $_GET['kat'];
else                            $kat = $default_kat;

//třída por načtení článků k daný kategorii - může být umístěna kdekoliv nejlíp ale někde na začátku úplně
class Load_clanky{

  public $kategorie, $clanky = array(); //stanovení proměnných
  
  public function __construc($kat){ //konstrukt funkce volá se automaticky při zápisu $clanky_dle_kategorie = new Load_clanky($kat);
    $this->kategorie = $kat;
    $this->load_clanky();
  }
  
  private function load_clanky(){ //privátní funkce třídy, která mi načte články k daný kategorii podle toho jakou mám proměnou $kat a uloží je do pole $this->clanky
  
   $link = mysql_connect(DB_NAME, ACC,PASS);
   mysql_select_db('test');
   $query = "SELECT 'c'.'clanek' FROM 'test'.'clanky' AS 'c', 'test'.'spojovaci_tabulka' AS 'st' WHERE 'st'.'ID_kategorie'=$this->kategorie AND 'st'.ID_clanku='c'.'ID'";
   $result = mysql_query($query);
   
    while( $result = mysql_fetch_assoc($result) ){
      $ret[] = $result['clanek'];
    }
    
    $this->clanky = $ret;
    
  }
  
  public function vypis_clanky(){//funkce kterou když zavolám ve scriptu - $clanky_dle_kategorie->vypis_clanky(); tak mi vypíše teda všechny články k daný kategorii
    
    foreach( $this->clanky as $clanek ){
      echo $clanek . "<br/><br/>";
    }    
    
  }

}

$clanky_dle_kategorie = new Load_clanky($kat);
$clanky_dle_kategorie->vypis_clanky();



snad sem na nic nezapoměl :)
skrepyKOKO
Profil *
seš si jestej že ta databáze je napsaná správně?
píše mě to při vytvoření tabulky tohle
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'.'kategorie' ( 'ID' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 'nam' at line 1


CREATE TABLE 'test'.'kategorie' (
'ID' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'name' VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
) ENGINE = InnoDB;
php
Profil *
CREATE TABLE 'test'.'kategorie' (

to 'test' je název databáze u mně na localhostu, ty si tam dej svůj vlastní název databáze, 'kategorie' je název tabulky už,

ale jestli to chceš celý opsat, tak upozorňuju předem, že tam je spousta nedořešených věcí, jako ošetřování když nastanou chyby při spojení DB, když DB vrátí prázdný výsledek nebo chybu atd...
skrepyKOKO
Profil *
php:
nějak nechápu ten php kod...ta první část má bejt kategorie.php a ta druhá třba index.php?
nebo dohromady?...zkouším to nějak připojit ale nějak to nejde
skrepyKOKO
Profil *
hm..nějak mě to nejde i celkově..
když chci vytvořit kategorii,nejde,když dám vytvořit kategorii manualně(v db) tak se neobjeví v přidej_clanek
je to opravdu správně?
<?php
function laod_kategorie(){
  $link = mysql_connect(localhost, alan, omfglol);
  mysql_select_db('sotek');
  $query = mysql_query("SELECT * FROM kategorie");

  while( $result = mysql_fetch_assoc($result) ){
    $ret[$result['ID']] = $result['name'];
  }
   mysql_close($link);
  return $ret;
}
?>
<form action='save_clanek.php' method='post' id='new_clanek'>
  <textarea name='clanek'></textarea>
  <select name='kategorie'>
  <?php
    foreach( load_kategorie() as $key => $val ){
    echo "<option value='$key'>$val</option>";
    }
  ?>
  </select>
  <input type='submit' value='ulož článek'>
</form>

když se vybírá kategorie,kde je proměnná key? a val? nemělo by tam bejt ret a result?
php
Profil *
Ach jo, potřebuješ prostudovat maunál hele, tohle sou základy.

Každopádně ti porádím ještě pár věcí: když chceš zjistit co ti frací funkce nebo proměnná tak použij funkci var_dump(mixed);
takže pokud chci vědět co mi vrátí funkci load_kategorie() tak to napíšu takhle
var_dump(load_kategorie());

a pak si nech třeba vypsat ty proměnný $key a $val a srovnej si je stím co ti vypsala ta funkce var_dump();

Každopádně, když vidím, že to kopíruješ celý, tak tě ještě jednou upozorním, že sem to tady sesmolil jen tak co mně napadlo = nezkoušel sem to, netestoval.

Ale tak tady je ještě pár oprav kódu
 public function __construc($kat)
// tady má být tohle zprávně
 public function __construct($kat)
 
a u:
$query = "SELECT 'c'.'clanek' FROM 'te.....;
dopiš
$query = "SELECT 'c'.'clanek' AS 'clanek' FRO....;


každopádně sem spíš napiš chybový hlášky co ti to píše, než komentáře tipu

skrepyKOKO:
hm..nějak mě to nejde i celkově..

takhle ti moc lidi nepomůžou ;)

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:

0