Máte chvilku na pomoc začínajícímu s PHP a MySQL?

Zdravim vsechny. Uz mi prestalo stacit pouzivani XHTML a jedineho prikazu z php (include), tak jsem si rekl, ze se doucim vice o php, databazich a tak.. Krom toho, ze pro me zatim bylo prakticky nemozne najit na netu KLOUDNY a dostatecne aktualni navod (ja nechci databaze ovladat rucne, chci php skript a s formularem na vkladani dat online, jinak je mi to k nicemu), tak se mi po dloooooouhem hledani (a spouste omylem stahnutych knizek v cinstine, polstine apod.) podarilo sehnat knizku, ktera vysvetluje presne to co potrebuju (ne zbytecne slozitejsi veci a ne jenom tak maly zaklad, ze bych to mel na nic :-P ). Problem je v tom, ze i kdyz je knizka (relativne ke vsem navodum na netu) celkem nova (rok 2006), tak mi jakekoliv skripty, ktere komunikuji s databazi proste nefunguji. Uz vim, ze je to v syntaxi, protoze se mi nejakym zazrakem podarilo pri RUCNIM zalozeni tabulky v phpmyadmin vytahnout nejaky sileny kod pro php a s nim to tu tabulku (samozrejme zatim prazdnou) vytvorilo. Ale kdyz jsem uplne ten samy kod pouzil na druhou tabulku, tak uz to neudelalo nic...
Jen pro zajimavost, ten kod co mi vyhodil phpmyadmin je:
<?
// pripojeni k databazi "nazevdatabaze"
$hostitel = "mysql.webzdarma.cz";
$uživatel = "uzivatel";
$heslo = "heslo";
$spojení = mysql_connect( $hostitel, $uživatel, $heslo ) or die ( "Chyba připojení k serveru." );

mysql_select_db( "nazevdatabaze" );

// vytvarim novou tabulku "prodej"
$prodej = 'CREATE TABLE `prodej` ('
. ' `prodej_id` INT(255) UNSIGNED NOT NULL AUTO_INCREMENT, '
. ' `prodej_kategorie` VARCHAR(255) NOT NULL, '
. ' `prodej_fotka` VARCHAR(255) NOT NULL, '
. ' `prodej_nadpis` VARCHAR(255) NOT NULL, '
. ' `prodej_popis` TEXT(10000) NOT NULL,'
. ' PRIMARY KEY (`prodej_id`),'
. ' INDEX (`prodej_kategorie`)'
. ' )';

// odesílám příkaz na server
$výsledky = mysql_query( $prodej ) or die ( mysql_error() );

// druhá tabulka kategorií
$kategorie = 'CREATE TABLE `kategorie` ('
. ' `kategorie_id` INT(255) UNSIGNED NOT NULL AUTO_INCREMENT, '
. ' `kategorie_nazev` VARCHAR(255) NOT NULL, '
. ' PRIMARY KEY ( kategorie_id )'
. ' )';

// opět odesílám další příkaz na server ...
$výsledky = mysql_query( $prodejkategorie ) or die( mysql_error() );
?>


Tu druhou tabulku uz to nevytvorilo a nechapu, proc tam je tolik znaku navic... Tohle jsem ale napsal jen pro pochopeni me logiky, proc uz jsem v koncich... Podle knizky to melo byt totiz (ten usek s vlozenim nove tabulky) takhle (mimochodem prihlasovaci udaje k databazi mam dobre, jsou zamerne v tomhle nahledu kodu zmeneny):

<?
// pripojeni k databazi "nazevdatabaze"
$hostitel = "mysql.webzdarma.cz";
$uživatel = "uzivatel";
$heslo = "heslo";
$spojení = mysql_connect( $hostitel, $uživatel, $heslo ) or die ( "Chyba připojení k serveru." );

// nastavuju hlavni databazi jako pracovni
mysql_select_db( "nazevdatabaze" );

// vytvarim novou tabulku "prodej"
$prodej = "CREATE TABLE prodej (
prodej_id int( 8 ) unsigned NOT NULL auto_increment,
prodej_kategorie varchar( 255 ) NOT NULL,
prodej_fotka varchar( 255 ) NOT NULL,
prodej_nadpis varchar( 255 ) NOT NULL,
prodej_popis blob (10000) NOT NULL,
PRIMARY KEY ( prodej_id ),
KEY prodej_kategorie ( prodej_kategorie )
)*;

// odesílám příkaz na server
$výsledky = mysql_query( $prodej ) or die ( mysql_error() );

// druhá tabulka ještě jednou pro kategorie
$prodej_kategorie = "CREATE TABLE prodej_kategorie (
prodej_kategorie_id int( 1000 ) NOT NULL auto increment,
prodej_kategorie_nazev varchar( 255 ) NOT NULL,
PRIMARY KEY ( prodej_kategorie_id )
)*;

// opět odesílám další příkaz na server ...
$výsledky = mysql_query( $prodej_kategorie ) or die( mysql_error() );

// luxus - tedy hláška o tom, že to zatím funguje jak má :-)
echo "Databáze byla úspěšně vytvořena!";
?>
Tak a ted co vlastne potrebuju....
Jasně, že ti to tu druhou tabulku nevytvořilo. Nejdrříve vytvoříš proměnnou:
$kategorie = 'CREATE TABLE ...
a pak zavoláš:
$výsledky = mysql_query( $prodejkategorie ) ...

A vůbec, proč toto řešíš? Tabulku si na začátku vytvoř ručně v phpMyAdminovi a pak už vkládej data přes PHP skript.
Potreboval bych co nejjednodussim zpusobem (proste staci kdyz to bude umet zaklad, ne nic navic :-) ), abych mel formular s polema:
- Kategorie
- Fotka
- Nadpis
- Popis

s tim ze sloupec prodej_id v tabulce jsem pochopil, ze se bude nastavovat sam porad o jedno vyssi a tak dal..., takze se nemusi projevovat ve formu.

Kategorie si do formulare vypisu do rozbalovaci nabidky
Pole fotka bude obsahovat cestu k fotce k dane polozce (fotky se zatim ukladaji do slozky "zbozi", takze to bude obsahovat text "zbozi/empty.jpg" napriklad..). Pokud by byla moznost v jine casti formulare i primo uploadovat fotku k te polozce na server do slozky "zbozi" v rootu, tak by to bylo uplne ideal :-)
Nadpis je jasnej
Popis jako pole textarea.

Tohle vypada jako ta jednodussi cast toho co potrebuju, ale pokud by to nekomu nevadilo a provedl by me timhle postupem od zacatku, byl bych hodne vdecny, uz jsem trocha v koncich..
ajo, ja jsem to tam neopravil :-) Diky za upozorneni, ted uz tomu aspon rozumim. Ano, tabulky jsem si vytvoril, ted bych je potreboval naplnit z formulare, ale nefunguje mi ani skript na naplneni predem urcenymi daty, natoztak, abych se takhle naslepo poustel do formulare, ja doufam, ze se tady najde nekdo, kdo bude ochotny mi venovat chvilku casu, prosim o to. Vim, ze jsou tu lidi, kteri se v tom vyznaji dobre a hadam, ze to co potrebuju je otazka pul hodinky dohromady. Ja jsem na tohle asi totalne natvrdlej, ale internetovy navody a knizky jsou v tomhle proste proti me. A neznam nikoho, kdo by me mohl timhle zakladem provest, tak to beru tak, ze zaklady a teorie uz neco vim, proste ze kdyz to vidim napsane, tak pochopim o co jde a proc to tak je. Ale nefunguje mi to ve spojenim, abych ja neco napsal potom dobre, proste nejlepsi by pro me bylo kdyby byl nekdo tak hodny a ukazal mi to presne tady na tom jednoduchem praktickem prikladu, ktery potrebuju udelat a ja uz si to do priste zapamatuju..
Pak jsem to teda pochopil tak, ze formular se musi odeslat pres dalsi skript do databaze do tech patricnych casti tabulky a s timhle uz jsem v koncich..

Treti vec kterou k tomu potrebuji je, aby se pak na strance, kde bude dotaz na databazi, zobrazovaly jen zaznamy z urcite KATEGORIE (popr. kategorii) a to s nejakym strankovanim (rekneme 10 zaznamu na stranku). Kazdy zaznam bude diky pouzitym promennym ve svem vlastnim (castecne grafickem) ramecku, ktery v soucasne dobe bez vyuziti PHP vypada takhle:

<table align="center" cellpadding="0" cellspacing="0" width="730" height="8">
<tr>
<td width="730" height="8" background="web/prodejtop.png" style="background-repeat:no-repeat; border-style:none;">
</td>
</tr>
</table>

<table align="center" cellpadding="0" cellspacing="0" width="730" bgcolor="#ffffff">
<tr>
<td width="200" style="border-top-style:none; border-right-style:none; border-bottom-style:none; border-left-style:solid; padding:0px 0px 0px 10px; border-width:0px 0px 0px 1px; border-color:#000000; bgcolor="#ffffff" align="center" valign="center">

<!-- FOTKA SEMKA -->
<img src="zbozi/empty.jpg" width="180" height="180" style="float:center; margin:0px;">

</td>
<td width="530" style="padding:0px 10px 0px 20px; border-width:0px 1px 0px 0px; border-color:#000000; border-top-style:none; border-right-style:solid; border-bottom-style:none; border-left-style:none;" bgcolor="#ffffff" align="left" valign="top">

<!-- POPIS SEMKA - H4 je nadpis a mezi tagy P se dava popis. Kazdy novy P je novy odstavec -->

<h4>Nadpis</h4>
<p style="font:12px tahoma;">popis polozky</p>

</td>
</tr>
</table>

<table align="center" cellpadding="0" cellspacing="0" width="730" height="8">
<tr>
<td width="730" height="8" background="web/prodejbottom.png" style="background-repeat:no-repeat; border-style:none;">
</td>
</tr>
</table>
<p> </p>
To je vlastne vsechno. Tyhle 3 veci mi zajisti, ze se bude mit jak jednoduse a rychle plnit databaze polozkama v tabulce (protoze to bude delat i nekdo jiny, kdo internet pouziva tak akorat na prohlizeni stranek a posilani mejlu), ze se nova polozka, ktera se zada prida do tabulky a ze se podle kategorii (kazda kategorie bude mit vlastni stranku, vypis podle kategorii budu vyvolavat primo skritem ve strance, NE pres URL, je to z toho duvodu, ze nektere stranky nekterych kategorii maji nejdriv nejaky odstavecek textu a teprve pak budou zobrazene polozky z tabulky) zobrazovat tam kde ma.. Tot vse, nic vic nepotrebuju a pokud se naucim tohle tak taky hodle dlouho nic jineho ani nebudu potrebovat (a pravdepodobne z toho pochopim i to, jak si mam upravovat i dalsi skripty z ty knizky co mam, aby slapaly - proste jsem nepochopil, proc se mi treba ten prvni skript na pridani tabulky rozchodil az kdyz jsem tam pridal milion teček a apostrofu i kdyz v knizce se o tom nic nepsalo a ten kod co jsem pouzil puvodne a nefungoval byl primo urceny do souboru .php. Asi nejaka zmena mezi verzemi mysql nebo php. Pak jsem si jeste rikal ze php 5 se dneska bude pouzivat uz vsude a tak jsem byl rad, ze knizka z roku 2006 uz je o php5 a ted jsem se dovedel ze na wz na vetsine serveru php5 neni a kde jo, tak to pry nestoji za moc tak nevim... Ja teda ted cekam na registraci domeny na placenym hostingu, ale wz vyuzivam uz dlouhy roky a rozhodne budu vyuzivat i nadale, tak chci mit vsechno tak, aby to chodilo i tady. To jsou problemy, co? :-)
Na začátek si zkus něco takového: http://www.tvorba-webu.cz/php/formulare.php

Až to rozchodíš, tak se ozvi. Následně zaměníme metodu GET za POST a místo výpisu dat na obrazovku je vložíme do databáze.
Ok, zatim diky, za chvilku semka hodim co budu mit. Diky ze se o to zajimas. Myslim, ze pokud se mi to tady podari dotahnout do konce a celou tu historii nejak zpatlam do clanku, tak by z toho mohl byt celkem uzitecny navod presne pro takovy tragedy, jako jsem ja. A co tak vidam po diskuzich, tak nas neni malo a vam, co se v tom vyznate by tohle do budoucna mohlo usetrit dost odpovedi :-D

Je jasne, ze kdyz pro me nekdo neco udela, nejak mi pomuze a ja vim, ze to muze pomoct i ostatnim, tak si to nenecham pro sebe, tak jak to dela vetsina lidi, kdyz nekdo pomuze ji :-)
Takze formular momentalne vypada takhle:


<form action="prodej_pridat_polozku.php" method="POST">
Kategorie:
<select name="kategorie">
<option value="1">Housle</option>
<option value="2">Violy</option>
</select><br />
Název souboru s fotkou (včetně .přípony):
<input type="text" name="fotka" /><br />
Nadpis nové položky:
<input type="Nadpis" name="nadpis" /><br />
Popis položky:
<input type="Popis" name="popis" /><br />
<input type="submit" />
</form>




S estetickou upravou uz si pak poradim, to udelam nakonec. Mam do toho formulare pridat i rovnou pole, pres ktere se uploaduje fotka na server? Formular se bude otevirat primo s rootu a fotky se budou ukladat do slozky "zbozi", ktera je primo v rootu. Pokud by to bylo moc slozite, tak to muzem pripadne zkusit dodelat na konci a nebo se proste fotky budou uploadovat rucne.. Zatim to jde dobre diky :-)
Predpokladam spravne, ze dennim chlebem pro me do kazdeho souboru php, ktery pristupuje do databaze (at uz do ni uklada nebo z ni bere informace), je, ze na zacatku useku s php kodem bude tohle?

// pripojeni k databazi "nazevdatabaze"
$hostitel = "mysql.webzdarma.cz";
$uživatel = "uzivatel";
$heslo = "heslo";
$spojení = mysql_connect( $hostitel, $uživatel, $heslo ) or die ( "Chyba připojení k serveru." );

// nastavuju hlavni databazi jako pracovni
mysql_select_db( "nazevdatabaze" );



Pokud ano, tak bych si tohle hodil do souboru zvlast a pak uz jenom pouzival stary znamy include... doporucili byste to tak?
Jo přesně tak. Přihlašovací sekvenci k db hoď do samostatného souboru a pak použij include.

Formulář vypadá OK (ale nezkoušel jsem). Teď musíš vytvořit soubor prodej_pridat_polozku.php, kam se nasměrují hodnoty z toho formuláře:

<?php
include ("prihlaseni.php");
//Teď data vložíš do databáze
$dotaz = "INSERT INTO prodej (prodej_kategorie,prodej_fotka,prodej_nadpis,prodej_popis) VALUES ('".$_POST['kategorie']."',".$_POST['fotka']."',".$_POST['nadpis']."',".$_POST['popis']."'");
$proved = mysql_query( $dotaz) or die ( mysql_error() );
?>

No a pak se podívej do phpMyAdmina, co se ti objevilo v databázi.
http://www.hudebnibazar.unas.cz/test/prodej_formular.php

Ten formular mam nahrany tady momentalne

Mimochodem nasel jsem pry celkem solidni kod na upload souboru:

<?php
$koncovky = array('jpg', 'jpeg', 'png', 'gif');

$chyba = "";
if (!$_FILES || $_FILES["obrazek"]["error"] == UPLOAD_ERR_INI_SIZE) {
$chyba = "Soubor je příliš velký, maximální velikost je " . ini_get('upload_max_filesize') . ".\n";
} elseif ($_FILES["obrazek"]["error"] == UPLOAD_ERR_NO_FILE) {
$chyba = "Nevybrali jste soubor, který chcete nahrát.\n";
} elseif ($_FILES["obrazek"]["error"]) {
$chyba = "Soubor se nepodařilo nahrát, kontaktujte prosím správce serveru.\n";
} elseif (!in_array(strtolower(pathinfo($_FILES["obrazek"]["name"], PATHINFO_EXTENSION)), $koncovky)) {
$chyba = "Koncovka souboru musí být jedna z: " . implode(", ", $koncovky) . ".\n";
} elseif (!($imagesize = getimagesize($_FILES["obrazek"]["tmp_name"])) || $imagesize[2] > 3) {
$chyba = "Typ obrázku musí být JPG, PNG nebo GIF.\n";
} else {
move_uploaded_file($_FILES["obrazek"]["tmp_name"], "data/$id-" . $_FILES["obrazek"]["name"]);
}
?>



Ale tady se teda v nekterych prikazech nevyznam a teda hlavne v prvni rade nevidim, kde bych mu nastavil, aby ty soubory ukladal do (ROOT)/prodej/

A taky nevim, jestli to muzu bez problemu, aby se to nejak nekousalo, hodit pod ten prvni formular nebo treba ze to bude dalsi moznot, ktera se zobrazi hned pod vystupem po odsouhlaseni toho prvniho formulare. Co byste poradil? Mám to radeji vyresit az na konci? :-)
Takze stav je momentalne nasledujici:

Mam vytvorene 3 soubory. (trochu jsem prejmenoval neco, tak at je v tom prehled):

pripojenidodatabaze.php (samozrejme prihlasovaci udaje jsou tam moje)


// pripojeni k databazi "nazevdatabaze"
$hostitel = "mysql.webzdarma.cz";
$uživatel = "uzivatel";
$heslo = "heslo";
$spojení = mysql_connect( $hostitel, $uživatel, $heslo ) or die ( "Chyba připojení k serveru." );

// nastavuju hlavni databazi jako pracovni
mysql_select_db( "nazevdatabaze" );



další soubor je: prodej_formular.php (trochu jsem ho uz opravil)

<form action="zpracovani_formulare.php" method="POST">
Kategorie:
<select name="kategorie">
<option value="1">Housle</option>
<option value="2">Violy</option>
</select><br />
Název souboru s fotkou (včetně .přípony):
<input type="text" name="fotka" /><br />
Nadpis nové položky:
<input type="text" name="nadpis" /><br />
Popis položky:
<textarea name="popis" rows="10" cols="40" />Pro více informací se prosím obraťte na nás přes <a href="mailto:bagar.r@seznam.cz" target="_blank">e-mail</a>, telefon (<b>+420 728 700 528</b>) či osobně na naší <a href="provozovna.php" target="_blank">provozovně</a>.</textarea><br />
<input type="submit" />
</form>




a posledni soubor je na zpracovani: zpracovani_formulare.php

<?
include ("pripojenidodatabaze.php");
//Teď data vložíš do databáze
$dotaz = "INSERT INTO prodej (prodej_kategorie,prodej_fotka,prodej_nadpis,prodej_popis) VALUES

('".$_POST['kategorie']."',".$_POST['fotka']."',".$_POST['nadpis']."',".$_POST['popis']."' ");
$proved = mysql_query( $dotaz) or die ( mysql_error() );
?>



nicmene pri tehle konfiguraci (mam to na zkousku nahrane - a prubezne tam nahravam kazdou zmenu - http://www.hudebnibazar.unas.cz/test/prodej_formular.php a samozrejme i s ostatnima dvouma souborama) mi to vyhazuje chybu: Parse error: parse error in /3w/unas.cz/h/hudebnibazar/test/zpracovani_formulare.php on line 4


Coz me napada jestli tam neni jenom nejaka chyba v syntaxi, kterou akorat ja jeste neodhalim..
Finální jméno souboru se nastavuje ve druhém argumentu move_uploaded_file. Momentálně tam máš adresáš data.

Ještě se musíš rozmyslet, jak ty fotky budeš pojmenovávat, aby ses vyhnul duplikovaným názvům. Já bych asi zvolil formát <cislo>.<pripona>, kde cislo bude hodnota prodej_id.

Jinak struktura tvého programu by mohla vypadat takto:
- prihlaseni k databázi
- vypis aktualnich polozek z db
- odkazy na strankovani výpisu
- pokud byl odeslan formular, tak vloz nove udaje do databaze
- formular
OPRAVA. Lepší bude tato posloupnost:
- prihlaseni k databázi
- pokud byl odeslan formular, tak vloz nove udaje do databaze
- vypis aktualnich polozek z db
- odkazy na strankovani výpisu
- formular
dulezita poznamka: Formular na pridavani bude dostupny jenom me a jeste jednomu clovekovi, hodim ho pod kontrolu hesla (ale az nakonec, to uz jsem si driv zkousel). Formular neslouzi pro zadavani do databaze uzivately, ale spravci. Takze vlastne slouzi jenom jako jednoducha obdoba redakcniho systemu :-)



Nicmene ted je dulezitejsi jina vec - porad jeste se mi nepodarilo rozchodit to odeslani formulare, porad to tam hlasi tu chybu na ctvrtem radku
<HTML>Nemám rád tyhlety dlouhé série dlouhých SMSek.

1) Zkus psát s háčky a čárkami, bude se to lépe číst
2) Zkus psát stručněji, případně to trošku členit do odstavců
3) !$_FILES... co to je? $_FILES není proměnná obsahující true nebo false, podle mě je lepší se ptát na !empty($_FILES) nebo isset($_FILES['obrazek'])
4) ('".$_POST['kategorie']."',".$_POST['fotka']."',".$_POST['nadpis']."',".$_POST['popis']."' ");

Máš v tom hodně chyb, nejen syntaktických. Podívej se jednak na mysql_real_escape_string a druhak na to, kam patří ta koncová závorka.</HTML>