Autor Zpráva
Dot@z
Profil *
Zdravím, mám soubor index.php do něho includuji:

include "db.php";
$......promene

$mysqli = new mysqli($mysqlhost, $mysqluser, $mysqlpwd, $mysqldb);
if ($mysqli->connect_errno) {
    printf("Chyba spojeni s DB: %s\n", $mysqli->connect_error);
    exit();
}
$mysqli->select_db($mysqldb);
$mysqli->set_charset('utf8');
include "fce.php";
Function FCE_html_formToken ($jmeno, $token) {
    $vyraz  = "INSERT INTO `t_formtokenu` (`IDformtokenu`,`jmeno`,`zapsano`) VALUES('".$token."','".$jmeno."',NOW())";
    $dotaz  = $mysqli->query($vyraz);
    $zdroj  = "<input type=\"hidden\" name=\"form_token\" value=\"".$token."\" />\n";
return $zdroj;
}

v indexu.php zavolám:

echo FCE_html_formToken("yyyyyyyy", "xxxxxxxx");
Vypíše chybu: Notice: Undefined variable: mysqli na řádku 5 v souboru fce.php
Objektové mysqli se teprve začínám učit, můžete mi prosím poradit jak zviditelnit objekt $mysqli i ve všech funkcích (tedy pokud si to myslím správně, kde je chyba)
Děkuju
Kajman
Profil
Proměnná $mysqli není videt uvnitř funkce. Můžete si ji např. předat parametrem.
Dot@z
Profil *
Řešením má tedy být toto?

Function FCE_html_formToken ($jmeno, $token, $sql = $mysqli) {
    $vyraz  = "INSERT INTO `t_formtokenu` (`IDformtokenu`,`jmeno`,`zapsano`) VALUES('".$token."','".$jmeno."',NOW())";
    $dotaz  = $mysqli->query($vyraz);
    $zdroj  = "<input type=\"hidden\" name=\"form_token\" value=\"".$token."\" />\n";
return $zdroj;
}

Je toto řešení správné? Nedá se to řešit jinak?
Dokud jsem programoval procedurálně a mysql extenzi, tak jsem si ve funkcích mohl volat příkazy do databáze, bez jakéhokoliv propojování proměnných, jednou zavolaný connect na stránce mi umožnil do DB přistupovat odkudkoliv. Je toto rozdíl v procedurálním a OOP přístupem k DB, nebo to lze řešit elegantněji?
Kajman
Profil
Ne, tak to nepůjde, šlo by ($jmeno, $token, $mysqli)

Můžete použít i to, na co jste zvyklý, tedy mysqli_query()
Dot@z
Profil *
Stále tedy vždy platí, že v předávaných paramtrech funkcí (ve kterých mysli příkazy chci použít) se musí předati i proměná pro připojení k DB?
Ať ve funkci použiji procedurální nebo OOP přístup k DB.
Kajman
Profil
Ne. Je to jedna z možností.

Můžete využít i vlastnosti objektu programované metody, vlastní třídu vracející vytvořený objekt spojení, globální proměnnou, ...
Marko_
Profil *
"Můžete využít i vlastnosti objektu programované metody, vlastní třídu vracející vytvořený objekt spojení, globální proměnnou, ..."

Jak to udělat?
Extenze mysqli oproti původní mysql se v tomto přístupu liší (že již není vidět v celém projetku vč. funkcí)?
Marko_
Profil *
Je toto v pořádku po stránce bezpečnosti?
Nebo je lepší (bezpečnější) předávat v každé funkci i link na DB connect?

Function nejaka_funkce ($parametr1, $parametr2) {
    $mysqli = $GLOBALS['mysqli'];
    // nyni mohu pouzivat mysqli dotazy do DB
return $neco;
Kajman
Profil
Marko:
že již není vidět v celém projetku vč. funkcí)?
Funkce vidět je, ale je u ní vyžadován identifikátor spojení. Případně je potřeba ji volat jako metodu.

Je toto v pořádku po stránce bezpečnosti?
Z hlediska bezpečnosti asi ano.

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: