Já začal knihou Programování WWW stránek pro úplné začátečníky od Computer Press, kde je všechno skvěle vysvětleno. :) Je to už sice celkem stará kniha, a některé věci tam řeší tak, že... Ale i tak je to na ty začátky dobrý. :)
Příspěvky odeslané z IP adresy 86.59.150.–
To už tu několikrát bylo. http://programujte.com/…ak-na-kosik/
Normálně hodíš do session ID-čko zboží:
Tabulka MySQL
-------------
| ID: 1
| Jméno: Acer Aspire
<?php
$_SESSION["zbozi"][] = 1;
// Výpis košíku
foreach($_SESSION["zbozi"] as $zbozi)
{
$good = // Dotaz do db pro zboží
echo $good["jmeno"]; // Výpis zboží
}
?>
Dost zjednodušená verze, jen tak pro představu.
Buď v SESSION nebo v databázi. Při session jen házíš do pole id-čka zboží, která jsou v databázi. Když chceš košík přes databázi, uděláš si tabulku se sloupcem odkazující na id-čko zboží v jiné tabulce.
Asi jsem nepochopil dotaz, ale proč údaje nezadáš v prvním souboru do SESSION, a pak v druhém nevypíšeš?
Abych se taky zapojil - já osobně mám config v proměnných, který se automaticky zařadí jako data do Registru, které pak volám
Registry::getSetting("klíč")
Toto je spíš takové diskutabilní téma. Jak tedy tvoříte config (samozřejmě v čistém PHP, nemyslím neon v Nette. )
Jo, pokud vypíšu "i" přes FUNKCI print, tak to funguje normálně. ( print(i) ).
Zdravím,
narazil jsem na zvláštní chybu - když chci vypsat text, vypisuje to, že na konci řádku je chyba.
Například v konzoli:
>>> print "Hello world"
Vrátí chybu SyntaxError: invalid syntax, s označením poslední uvozovky.
>>> i = 14
>>> print i
Vrátí tu samou chybu na proměnné "i". Nevíte čím to může být?
Pokud ti jde o SQL dotaz, tak k určení maximálního počtu dat, a k uspořádnání slouží LIMIT a ORDER BY.
Příklad:
SELECT * FROM `tabulka` LIMIT 4 ORDER BY id
Jestli ne, tak jsem asi špatně pochopil otázku.
Pardon, už jsem to vyřešil.
Zřejmě se tu teď ztrapním, ale stáhl jsem si ze stránek pygame "pygame-1.9.2a0.win32-py3.2.msi". Nainstaloval jsem, ale ve stažených souborech se mi jen objevili složky "import" a "lib". Napadá mě, jestli to nemám instalovat v určité složce?
#5 PeterA
Obecně stačí přidat ORDER a LIMIT. Zkus si přečíst toto: http://www.junext.net/mysql/
Metoda Authenticator::calculateHash()
public function calculateHash( $password, $salt = null )
{
$salt = $salt == NULL ? '$2a$07$' : $salt;
return hash( 'sha1', $password . $salt );
}
Zas tak blbí ještě nejsem. :D $old obsahuje nejprve $_POST s htmlspecialchars, a pak se v podmínce hashuje.
Tak tu mám další problém. Mám dvě proměnné, které porovnávám, jestli jsou stejné. Napíšu raději ten kód:
<?php
public function beforeRenderPassword() {
if(isset($_POST["changePasswordSubmit"]))
{
$old = htmlspecialchars($_POST["old_password"]);
$new = htmlspecialchars($_POST["new_password"]);
$identity = mysql_fetch_array($this->users->getIdentity($_SESSION["logged"]));
if(Authenticator::calculateHash($old) == $identity["password"])
{
$this->users->changePassword($_SESSION["logged"]);
} else
{
$this->tpl->assign("message", array(
"type" => "error",
"text" => "Zadané heslo se neshoduje se současným."));
}
}
}
Když vypíšu obě proměnné ($old, $identity["password"]), zdají se být stejné, ale PHP vrací false. Nevíte co s tím?
Edit:
Mimochodem proměnné mají hodnoty:
$old = f67e16b6017a46bd241279eb7684b5710544425f
$identity["password"] = f67e16b6017a46bd241279eb7684b5710544425f
Zdravím,
jsem PHP programátor na úrovni středně pokročilý. Můžu napsat třídu jakou si řeknete, a pak vám ji poslat. Tedy různé třídy, ale můžu to i rovnou zaimplementovat do vašich aplikací.
Kontakt: hacker0@atlas.cz
Tak už jsem to vyřešil:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?presenter=$1
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ index.php?presenter=$1&view=$2
RewriteRule ^([a-zA-Z0-9]+)$ index.php?presenter=$1
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?presenter=$1&view=$2
V registru jsem měl přesměrování.
Mimochodem, to mám takto:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?presenter=$1&view=$2 [L,QSA]
</IfModule>
Zdravím,
potřeboval bych .htaccess kód, který by převedl obvyklé URL (?presenter=homepage&view=...) na "hezké" URL (/homepage/default/). Zapsal jsem to obvyklím způsobem, ale pokaždý mě to přesměruje na index.
Chybu máš na tomhle řádku:
echo "<tr><td><b>$jmeno</b></td> <td rowspan="2">$text</td></tr><tr><td>$datum</td></tr>";
<td rowspan="2"> musíš escapovat: <td rowspan=\"2\">, jinak ti uvozovky ukončí řetězec.
Tak tohle je šílený kód. :D
Mno každopádně: možná jsem špatně pochopil, ale jestli správně, tak bych to udělal asi takto:
<?php
$query = mysql_query( "SELECT * FROM fotky" );
while( $fotka = mysql_fetch_array( $query ) )
{
$rozmery = getimagesize( "cesta/" . $fotka['nazev'] . ".jpg" );
echo "<img src=\"" . $fotka['nazev'] . "\" width=\"" . $rozmery[0] . "\" height=\"" . $rozmery[1] . "\" />";
echo "<p>" . $fotka["popis"] . "</p>";
}
Samozřejmě si to musíš upravit tak jak potřebuješ, ale podstata vyplývá.
Děkuji. Rozhodl jsem se, že to Nette zkusím, ikdyž to za týden stejně nejspíš vzdám, podle toho jak vypadá dokumentace. Nejspíš se to budu učit pokus/omyl, je to lepší než jet podle quickstartu, kdyžtak fórum snad poradí. Takže ještě jednou děkuju.
Ale zkontroluje, jen se obnoví stránka. Sám na to radši používám ajax, takže samozřejmě doporučuji tvou radu.
Mno, tohle je trochu "prasárna", je to udělané na rychlo, takže by to chtělo ještě upravit. Ale podstata zůstává.
$user = mysql_fetch_array( mysql_query( "select ..." ) );
...
<p>
<label for="username">Username</label>
<input type="text" name="username" id="username" <?if(isset($user["id"])): echo "class=\"error\""; endif;?>>
</p>
Jak říkám, v praxy by se tohle asi nevyužilo, takže si to budeš muset trochu upravit.
Jinak z JS a jQuery umím jen základy, ale teoreticky by jsi měl odeslat dotaz pomocí $.ajax() někde ho odchytit, a pak poslat zpátky. A do callbacku napíšeš jen:
<script>
...
function callback()
{
$("#username").addClass("error");
}
...
</script>
Doporuču na to jQuery, Ajax. Poslat dotaz, a jestli jsou údaje špatné, přidat k elementu třeba třídu "error". Ale dalo by se to udělat i v PHP třeba přes if.
Asi jsem se špatně vyjádřil. Objektově orientované programování zvládám v pohodě, a klasické procedurální používám už jen velmi minimálně. Objektový přístup teď vlastně používám u všech svých aplikacích, jen teď ze všech stran narážím na připomínky typu: "S frameworkem by's už to měl", nebo "Přes framework to jde jednodušeji".
Ale mě připadá, že použít nějaký framework je ještě těžší než klasický čistý objektový přístup. Zvlášť když jejich struktrura je postavená na nových pravidlech jako jsou například metody v prezenterech: render<view>, atd...
Jediné, co mě na Nette přitahuje je šablonovací systém, debugger a rychlost, a to mi přijde jako malá odměna za další rok učení.
Už dlouho jsem ignoroval dneska už hotové (pouze slovo - frameworky nejsou hotové nikdy) frameworky, stejně jako jsem kdysi ignoroval OOP. Jenže stejně jsem se přesunul na frontu OOP, a nejen proto bych se chtěl naučit jeden z PHP frameworků.
Už dříve jsem nadtím uvažoval, ale když tak vidím nepřehledný quickstart Nette, přechází mě chuť. A není to jen o quickstartu. Při čistém PHP si prostě sednu a napíšu si program, který potřebuji, ale v Nette se odradí dlouhé tvoření prezenterů či modelů, a po hodině psaní se na obrazovku stejně nic nevykreslí, a máme jen program, který by nám měl "ulehčit práci".
Slyšel jsem, že Nette je dokonce i rychlejší než čisté PHP. Ale vážně to stojí za to kvůli těm několika milisekund? Myslím, že pokud bych se měl naučit framework, tak až poté co si budu jist, že budu pracovat v týmu, není to tak? Frameworky jsou z velké části stavěny na to, aby dobře rozdělili práci mezi programátory a webdesignéry. Jenže když si stránku naprogramuju a nakóduji sám, nemá to smysl.
Kdybych žádal o práci, očekával bych, že po mě budou chtít znalost některého z frameworků, jako je Zend, Nette, atd... (vlastně je mi teprve čtrnáct, takže myslím, že to stejně ještě chvíli potrvá) Ale obejdu se do té doby bez frameworku?
Já blbec, join() mě vůbec nenapadl. :D Děkuju.
Tedy mám tam jednu chybu, opravím:
foreach( $data as $column => $value )
{
$where .= "`" . $column . "` = \"" . $value . "\" AND";
}
Potřebuju sestavit dotaz do databáze. Pro "select" využívám metodu getRow, která v tuto chvíli vypadá takto:
/**
* Vytvoří dotaz SELECT
* @param String $table: Tabulka
* @param String $data: WHERE
* @param String $key: Klíč, pod kterým se dotaz uloží
* @return void
*/
public function getRow( $table, $data, $key )
{
$query = "SELECT * FROM `" . $table . "` ";
$where = "WHERE ";
foreach( $data as $column => $value )
{
$where .= "`" . $column . "` = `" . $value . "` AND";
}
$query .= $where;
echo $query;
$this->queries[ $key ] = $this->activeConnection->query( $query );
}
Jenže při procházení pole u foreach potřebuju nějak zjistit, jestli jsou v poli ještě další položky, jestli ano, vypsat "AND", jestli ne, nic nevypsat. Dá se to nějak zjistit?