Autor | Zpráva | ||
---|---|---|---|
gruh54 Profil * |
#1 · Zasláno: 16. 6. 2008, 18:55:04
Mam takuto funkciu na pripojenie k databaze:
function pripojenie() { $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); if (!$mysqli ) echo 'Chyba!'; else { return $mysqli; } } Ked su vsetky udaje spravne, ok vsetko ide ale ako spravit to, ze ked je napr zle heslo tak jednoducho vypise ze Chyba a aby nevypisovala Fatal errory a podobne... Poradite? Dakujem moc krat. |
||
ShiraNai7 Profil |
#2 · Zasláno: 16. 6. 2008, 18:56:10
použít zavináč před funkcí nebo dočasně vypnout error_reporting..?
|
||
gruh54 Profil * |
#3 · Zasláno: 16. 6. 2008, 19:00:56
to nechcem, tym sa skryju vypisy ale neodstrania sa.
Ja cchem aby vypisalo to moje: if (!$mysqli ) echo 'Chyba!'; |
||
ShiraNai7 Profil |
#4 · Zasláno: 16. 6. 2008, 19:23:37
A jakou chybu to píše?
|
||
srigi Profil |
#5 · Zasláno: 16. 6. 2008, 19:27:00
Ja cchem aby vypisalo to moje
No vsak prave preto pouzi ten zavinac. Zablokujes std. chybove hlasenie na vystupe a vsetko si zariadis v tom IFe. |
||
gruh54 Profil * |
#6 · Zasláno: 16. 6. 2008, 19:41:34
lenze ked dam zavinas tak nevypise nic.
vypisuje chybu mysqli ze je zle heslo ale ja chcem aby vypisalo to co ja chcem, len neviem ako. Poradite? |
||
suky Profil |
#7 · Zasláno: 16. 6. 2008, 19:44:33
gruh54
Jenze timto zapisem ($mysqli = new mysqli(HOST, USER, PASSWORD, NAME);) vytvoris odkaz na objekt, tak je logicke, ze podminka nebude platit vzdy. |
||
srigi Profil |
#8 · Zasláno: 16. 6. 2008, 22:30:41
Jenze timto zapisem ($mysqli = new mysqli(HOST, USER, PASSWORD, NAME);) vytvoris odkaz na objekt
Co potom to dat do try/catch bloku? Vid tento moj post. |
||
gruh54 Profil * |
#9 · Zasláno: 16. 6. 2008, 22:36:23
Fajn, len ako to teraz pretrasformovat to PDO na mysqli? Ako sa to urobi?
function pripojenie() { try { $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); return $mysqli; } catch (????) { echo 'Chyba!'; } } Takto nejako? |
||
joe Profil |
#10 · Zasláno: 16. 6. 2008, 23:13:06
Co třeba takhle?
<?php function pripojenie() { $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); if (mysqli_connect_errno()) { // nova vyjimka throw new Exception(mysqli_connect_error()); return false; } else { // vrat pripojeni return $mysqli; } } ?> Ale nevím, s mysqli jsem nikdy nedělal :-) |
||
gruh54 Profil * |
#11 · Zasláno: 16. 6. 2008, 23:34:29
Nie, nefunguje to :((
Pise: Warning: mysqli::mysqli() [function.mysqli-mysqli]: .... Fatal error: Uncaught exception 'Exception' with message 'Access denied for user... Vedeli by ste to niekto? |
||
srigi Profil |
#12 · Zasláno: 17. 6. 2008, 12:01:51
No jasne, tak ako pise joe, len to treba dopisat chybajuce casti.
try { $db = pripojenie(); } catch (Exception $e) { // spracovanie chyby pripojenia k DB echo $e->getmessage(); } |
||
gruh54 Profil * |
#13 · Zasláno: 17. 6. 2008, 13:32:48
A kam to mam dopisat? Pretoze mi to nefunguje stale :(
Mam: Includnem funkciu <?php function pripojenie() { $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); if (mysqli_connect_errno()) { // nova vyjimka throw new Exception(mysqli_connect_error()); return false; } else { // vrat pripojeni return $mysqli; } } ?> a Potom v kazdom subore spustam: try { $db = pripojenie(); } catch (Exception $e) { // spracovanie chyby pripojenia k DB echo $e->getmessage(); } Ale jednoducho stale vypisuje tie iste chyby ak su zle prihlasovacie udaje. Poradite? |
||
joe Profil |
#14 · Zasláno: 17. 6. 2008, 13:59:55 · Upravil/a: joe
Ale jednoducho stale vypisuje tie iste chyby ak su zle prihlasovacie udaje.
Kód je dobře, ale když ti to píše, že máš špatné údaje, tak je máš asi špatné:) Ale asi by bylo lepší <?php function pripojenie() { try { $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); return $mysqli; } catch(Exception $e) { echo $e->getmessage() } return false; } ?> a všude pak psát jenom $db = pripojenie(); |
||
nightfish Profil |
#15 · Zasláno: 17. 6. 2008, 14:00:48
řešením je třeba vlastní error handler (viz níže) a nebo zakázat zobrazování varování (error_reporting(E_ALL & ~E_WARNING);)
function myErrorHandler($errno, $errstr, $errfile, $errline) { switch ($errno) { case E_WARNING: // s warningy nedelej nic break; default: // tady si osetri ostatni mozne chyby break; } } set_error_handler("myErrorHandler"); |
||
gruh54 Profil * |
#16 · Zasláno: 17. 6. 2008, 16:28:00
Dakujem,
ale ja jednoducho chcem, v pripade ak je zle zadane heslo, tak aby nepisalo ziadne errory ale jednoducho aby vypisalo, ze 'Lutujeme, ale je chyba.'a nasledne cista stranka. Da sa to? |
||
joe Profil |
#17 · Zasláno: 17. 6. 2008, 16:39:19
<?php
function pripojenie() { try { $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); return $mysqli; } catch(Exception $e) { //echo $e->getmessage(); echo "Lutujeme, ale je chyba."; } return false; } ?> |
||
gruh54 Profil * |
#18 · Zasláno: 17. 6. 2008, 17:17:42
Ale ono to nefuguje, naozaj...robito to iste...nevypise sa to...
Ako je to mozne? |
||
srigi Profil |
#19 · Zasláno: 18. 6. 2008, 19:24:39 · Upravil/a: srigi
Pouzi tento kod, vyskusany, funguje, pomocou switch si mozes customizovat error hlasky. Joe a ostatni, problem je, ze mysqli() nevyhadzuje vynimku typu Exception, preto som vzor try/catch zavrhol. Tu je ten slubovany kod:
function db_connect() { @$mysqli = new mysqli('localhost', 'user', 'secret', 'test'); //echo mysqli_connect_errno()."<br>"; // for debug if (mysqli_connect_errno()) { switch (mysqli_connect_errno()) { case 1045: echo "unable to connect<br>"; break; case 1049: echo "unknown database<br>"; break; case 2005: echo "unknown db server<br>"; break; } die; } else return $mysqli; } $db = db_connect(); |
||
gruh54 Profil * |
#20 · Zasláno: 18. 6. 2008, 21:29:44
Wow, je to super!
Dakujem Ti moc krat, velmi si mi pomohol a som rad, ze sme to nakoniec vyriesili. Problem je uspesne vyrieseny, vdaka srigi. Dakujem! |
||
srigi Profil |
#21 · Zasláno: 18. 6. 2008, 23:40:06
Vidis, uz na zaciatku som tvrdil, ze ten zavinac tam potrebujes.
BTW neni za co. :D |
||
Časová prodleva: 16 let
|
0