Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:20.1.2013 19:19

Zdravím všechny, dnes jsme se konečně dokopal k tomu začít se učit pracovat s databázemi a s php vůbec. A narazil jsem na první problém. Připojení k databázi dojde v pohodě ale nemůžu už vybrat tabulku. Zasílám kód, který je čistě na zkoušku a je poměrně šílený. Nevím proč, ale rovnou si to zkouším trochu objektově i když ke správné architektuře to má daleko :D.

<?php
class MyDatabaze
{
        private $spojeni;
        private $databaze;
        function ConnectDatabaze($hostitel,$login,$pass)
        {
            $spojeni=mysqli_connect($hostitel,$login,$pass);
                return $spojeni;
        }

        function SelectDB()
        {
           $databaze=mysqli_select_db($spojeni,'zirkoadmin');
           if($databaze)
           {return true;}
           else {return false;}
        }


        function CreateTable()
        {
                $OK=mysqli_query('CREATE TABLE pocitadlo(id CHAR(1), hodnota INT UNSIGNED)',$databaze);
                if($OK)
                return true;
                else return false;
        }
}


$myDb=new MyDatabaze();

$connectDb=$myDb->ConnectDatabaze('localhost','zirkoAdmin','admin');

if(!$connectDb)
{Die('Error - databaze nenalezena');}

$db=$myDb->SelectDB();

if($db)
echo "Databaze zvolena";
else Die('Databaze nezvolena');


$ok=$myDb->CreateTable();

if($ok)
 echo "Bingo tabulka vytovřena";
else Die('Tabulka nevytvořena');
?>

Všechny údaje tu nechávám otevřeně, stejně se jedná o localhost. Zvolená jména jsou také nešťastně, jak říkám, pouze zkouším.

Jméno databáze: zirkoadmin
Uživatel: zirkoAdmin
Heslo: admin

Uživatel má nstavená všechna práva k databázi.
Nyní už očekávám jenom vlnu rad a kritiky :) Děkuji

Odpovědět 20.1.2013 19:19
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Don
Člen
Avatar
Odpovídá na Petr Nymsa
Don:20.1.2013 20:50

Databázi si vyber rovnou při připojení jako další parametr.

 
Nahoru Odpovědět 20.1.2013 20:50
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Don
Petr Nymsa:20.1.2013 21:09
<?php
class MyDatabaze
{
        private $spojeni;

        function ConnectDatabaze($hostitel,$login,$pass)
        {
            $spojeni=mysqli_connect($hostitel,$login,$pass,'zirkoadmin');
                $databaze='zirkoadmin';
                return $spojeni;
        }


        function CreateTable()
        {
                $OK=mysqli_query('CREATE TABLE pocitadlo(id CHAR(1), hodnota INT UNSIGNED)','zirkoadmin');
                if($OK)
                return true;
                else return false;
        }
}


$myDb=new MyDatabaze();

$connectDb=$myDb->ConnectDatabaze('localhost','zirkoAdmin','admin');

if(!$connectDb)
{Die('Error - databaze nenalezena');}

/*$db=$myDb->SelectDB();

if($db)
echo "Databaze zvolena";
else Die('Databaze nezvolena');
*/

$ok=$myDb->CreateTable();

if($ok)
 echo "Bingo tabulka vytovřena";
else Die('Tabulka nevytvořena');
?>

Dostal jsem jeden warning
Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdoc­s\Test\index.php on line 16

Jedná se o jakýsi result_mode a nevím co tam patří.
A tabulka se stále nevytvoří. Nečekal jsem že se zaseknu takhle rychle :D

Nahoru Odpovědět 20.1.2013 21:09
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Don
Člen
Avatar
Odpovídá na Petr Nymsa
Don:20.1.2013 21:16
mysqli_query($spojeni,'CREATE TABLE pocitadlo(id CHAR(1), hodnota INT UNSIGNED)','zirkoadmin');

jelikož to nemáš objektový tak tam musíš všude cpát proměnou s číslem spojení k databázi

 
Nahoru Odpovědět 20.1.2013 21:16
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:21.1.2013 20:03

Nechci vytvářet nové vlákno, tak píšu sem.

Mám formulář

<form name="formular" action="send.php" method="post">
           <table class="formular">
           <tr>
           <td><label for="name">* Vaše jméno:</label> </td>
           <td><input class="inputText" type="text" name="name"/></td>
           </tr>
           <tr>
           <td><label for="email">* Váš e-mail:</label> </td>
           <td><input class="inputText" type="text" name="email" /></td>
           </tr>
           <tr>
           <td><label for="zprava">* Vaše zpráva</label></td>
           <td><textarea name="zprava"></textarea></td>
           </tr>
           <tr>
           <td><label for="antispam">* Kolik je 0*5+2</label></td>
           <td><input class="inputText" type="text" name="antispam" />(antispamová ochrana)</td>
           </tr>
           <tr>
           <td></td>
           <td><input type="submit" class="inputButton" value="Odeslat zprávu" name="ok" /></td>
           </tr>
           </table>
           </form>

a k němu patřičný velmi primitivní php kód

<?php
$name=$_POST['name'];
$email=$_POST['email'];
$zprava=$_POST['zprava'];
$antispam=$_POST['antispam'];






         if (isset($name) && isset($email) && $zprava && isset($antispam) && ($antispam =='2') )
        // && isset($_POST['hidespam'])==false)
         {

                mail([email protected]',$_POST['predmet'],$_POST['od'].': '.$_POST['zprava']);
                echo "Odesláno";
         }
         else//chyby
         {
           echo "Neodesláno";
         }

        //header('Location: http://localhost/Zirko/#Kontakt');

?>

Píše mi to že $zprava není definovaná, repsketive v poli $_POST není index $zprava. Ale nemůžu přijít na to proč. Poradí někdo prosím ?

Nahoru Odpovědět 21.1.2013 20:03
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
albertpatera
Redaktor
Avatar
albertpatera:21.1.2013 21:24

mozna mas policko ZPRAVA v databazi pojmenovany jinak

Editováno 21.1.2013 21:24
 
Nahoru Odpovědět 21.1.2013 21:24
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na albertpatera
Petr Nymsa:21.1.2013 21:29

Nemám to vůbec v databázi ale posílám ty data metodou pos přes formulář, ostatní data jako jméno, email, antispam přijdou v pořádku

Nahoru Odpovědět 21.1.2013 21:29
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
albertpatera
Redaktor
Avatar
albertpatera:21.1.2013 21:32

ja si to vzdycky delam pres databazi a funguje mi to

 
Nahoru Odpovědět 21.1.2013 21:32
Avatar
Pavel Vosyka
Člen
Avatar
Odpovídá na Petr Nymsa
Pavel Vosyka:21.1.2013 21:59

Moc jsem to nezkoumal, ale na první pohled bych řekl, že ti tám chybí "isset($zprava)" - máš jenom "$zprava"...Tedy bez "isset()" by to asi mělo vracet true/false, takže by to mohlo fungovat, ale když všude jinde isset() máš..

Nahoru Odpovědět 21.1.2013 21:59
"nikdy nepiš nic 2x"
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Pavel Vosyka
Petr Nymsa:22.1.2013 8:49

Jak jsem psa, do $zprava se ani nic neuloží protože není $_POST vložená hodnota z formuláře, i když by měla

Nahoru Odpovědět 22.1.2013 8:49
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Pavel Vosyka
Člen
Avatar
Pavel Vosyka:22.1.2013 9:50

To se mi nějak nezdá... zkus dát var_dump($_POST) ať vidíš, co ti to pošle.. Mě to html normálně funguje a var_dump($_POST) mi vrátilo:

array(5) { ["name"]=> string(12) "Pavel Vosyka" ["email"]=> string(21) "[email protected]" ["zprava"]=> string(20) "zpráva, zprávička" ["antispam"]=> string(1) "2" ["ok"]=> string(15) "Odeslat zprávu" }
Nahoru Odpovědět 22.1.2013 9:50
"nikdy nepiš nic 2x"
Avatar
Odpovídá na Petr Nymsa
Martin Konečný (pavelco1998):22.1.2013 13:18

Je to tím, že se proměnné snaží deklarovat i v případě, že formulář neodešleš. Z toho vyplývá, že pokud neodešleš formulář, pole $_POST v sobě nemá žádné prvky. Proto ti to hlásí, že $_POST['zprava'] neexistuje.

 
Nahoru Odpovědět 22.1.2013 13:18
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Petr Nymsa:22.1.2013 13:45

Ostatní proměnné se zaregistrují v pohodě, resp. odešlou.

Nahoru Odpovědět 22.1.2013 13:45
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:22.1.2013 14:00

Nebylo by špatné, kdybys sem konečně poslal požadovaný výstup příkazu

var_dump($_POST);
Nahoru Odpovědět 22.1.2013 14:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:22.1.2013 15:58

jo omlouvám se, no var_dump mi vypsal a ukázalo se že proměnná zpráva je odeslána. A nevím proč, ale to náhle funguje. V k´du jsem nic neměnil, jediný co jsme udělal, bylo že jsme restartoval Apache

Nahoru Odpovědět 22.1.2013 15:58
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.