(Array == NULL) = 1 -> ? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

(Array == NULL) = 1 -> ? – PHP – Fórum – Programujte.com(Array == NULL) = 1 -> ? – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Matěj Andrle+1
Grafoman
3. 6. 2014   #1
-
0
-

Dobrý den,
zjišťuji zda se mi z databáze podařilo dostat pole řádků => Array/NULL. Tudíž testuji:
 

if(($result = dotazSQL()) == NULL)


A vychází mi pokaždé 1 - jak je to možné? (echo $result hodí pokaždé "Array")
Děkuji.

Nahlásit jako SPAM
IP: 78.136.188.–
KIIV
~ Moderátor
+43
God of flame
3. 6. 2014   #2
-
0
-

mozna jen vracis prazdne pole ... pak to null asi nebude

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Matěj Andrle+1
Grafoman
3. 6. 2014   #3
-
0
-

Vykonává se NULL část if - tak přeci když mám typeof Array, tak to není NULL...

if(!$result = $databaseUAC->select(array
(
	"email" => $_POST["email"],
	"passwd" => hash("sha256",
	$_POST["passwd"], TRUE)
), array("=", "="), array(" AND ")))
{echo $result;
	$msg = 5;
	$title = "Error";
	break;
}

Echo hází Array - jak se tedy může vykonat ta část if? (to s NULL jsem tam hodil ze zoufalství - také nešlo - se závorkami - kdekoliv...)

EDIT:
NULL si házím při neúspěchu sám - vím, že toto NULL není - dal jsem si break u příslušné části třídy... Přímý test NULL vyjde ve prospěch NULL - přičemž pole je skutečně prázdné. A také by mi echo hodilo NULL a ne Array - ne?

Nahlásit jako SPAM
IP: 78.136.188.–
Kit+15
Guru
3. 6. 2014   #4
-
0
-

#3 Matěj Andrle
Prázdný array() je prázdná kolekce. Kolekce není null, ale může být prázdná.

Zkus testovat sizeOf($array) == 0

Když databáze nenalezne žádný záznam, tak to není chyba.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
3. 6. 2014   #5
-
0
-

Špatně jsi to pochopil. NULL jsem dával při neúspěchu... Jinak pouze informuji, že takový uživatel neexistuje... Tento způsob jsem zavrhnul, jelikož mnohem lepší je výjimka. Jde mi jen o logiku - proč ten test hází 1...

Nahlásit jako SPAM
IP: 78.136.188.–
Řešení
z
~ Anonymní uživatel
268 příspěvků
3. 6. 2014   #6
-
0
-
Vyřešeno Nejlepší odpověď

===

Nahlásit jako SPAM
IP: 78.156.159.–
Matěj Andrle+1
Grafoman
3. 6. 2014   #7
-
0
-

Aha - naštěstí existují výjimky... :)

Nahlásit jako SPAM
IP: 78.136.188.–
Kit+15
Guru
3. 6. 2014   #8
-
0
-

#5 Matěj Andrle 

function select(...) {
    if (sizeOf($array) == 0)
        throw new Exception("Uživatel nenalezen");
    return $result;
}
:
:
$result = $databaseUAC->select(array(
    "email" => $_POST["email"],
    "passwd" => hash("sha256",
    $_POST["passwd"], TRUE)
), array("=", "="), array(" AND ")))


Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
3. 6. 2014   #9
-
0
-

Nechápu...

if(!$query->execute($where))
	throw new Exception("<h3>Connection with database failed!</h3>");

...

try
			{
	$result = $databaseAD->select
	(
		array("author" => $_SESSION["id"]),
		array("=")
	);
}
catch(Exception $e)
{
	$msg = 5;
	$title = "Error";
	break;
}


PDO...

Nahlásit jako SPAM
IP: 78.136.188.–
Kit+15
Guru
3. 6. 2014   #10
-
0
-

#9 Matěj Andrle
Co na tom nechápeš? K té výjimce nedojde. Proč by mělo?

Nahlásit jako SPAM
IP: 37.48.42.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
3. 6. 2014   #11
-
0
-

K mé?

Nahlásit jako SPAM
IP: 78.136.188.–
Kit+15
Guru
4. 6. 2014   #12
-
0
-

#11 Matěj Andrle
Jak?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
4. 6. 2014   #13
-
0
-

Máš to tam - PDO execute selže - throw...

Nahlásit jako SPAM
IP: 78.136.143.–
Kit+15
Guru
4. 6. 2014   #14
-
0
-

#13 Matěj Andrle
Asi máš chybné parametry execute(). Když nenajde žádný záznam, hlásí normálně TRUE. Co kdyby sis vypsal chybu, kterou execute() hlásí? Obvykle to bývá chybný počet parametrů.

BTW: K čemu slouží parametry

array("=", "="), array(" AND ")

?

BTW2: Proč tam máš proměnné $databaseUAC a $databaseAD? Kdo vymyslel tak hloupé názvy?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
4. 6. 2014   #15
-
0
-

where a=b and c=d -- nejspis :)
 

Nahlásit jako SPAM
IP: 2001:718:2601:258:a871:4c...–
Kit+15
Guru
4. 6. 2014   #16
-
0
-

#15 peter
Toho se právě obávám.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
4. 6. 2014   #17
-
0
-

Kdybych to měl špatně, nefungovalo by mi to. Jenže funguje vše - přihlášení, registrace i správa reklam. Funguje i špatné zadání přihlašovacích údajů - to by podle tvé logiky nešlo - jenže jde. Normálně to hodí hlášku, že takové údaje v DB nejsou - mám to správně... Tudíž AD a UAC - nechápu co je špatného na názvech oněch proměnných. $database(tabulka) Dal-li bych jen UAC/AD, hůře bych se v tom orientoval... Vysvětli mi, jak mám dodržet vyhnutí se injekcím a přitom nelepení složitě dotazu... Když musím mít pole "sloupec" => hodnota...

Nahlásit jako SPAM
IP: 78.136.143.–
Matěj Andrle+1
Grafoman
4. 6. 2014   #18
-
0
-

Error!

Email or password was incorrect! Enter the correct login data and resubmit please. If you have forgotten your password, click here.

Jede jak má...  (zadal jsem vymyšlený email a heslo)

Nahlásit jako SPAM
IP: 78.136.143.–
Kit+15
Guru
4. 6. 2014   #19
-
0
-

#17 Matěj Andrle
Když ti to funguje, tak si nestěžuj. Zkratky se v názvech proměnných nemají používat. Netuším, co znamená UAC a AD.

Zkus ten dotaz napsat normálně, třeba takto

$select = $db->prepare("SELECT id FROM user WHERE email=? AND password=?");
$select->execute(array($_POST["email"], hash("sha256", $_POST["passwd"], TRUE)));
$user = $select->fetchColumn();

Jak vidíš, jde to i bez slepování.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
4. 6. 2014   #20
-
0
-

Není to zkratka - znovu - je to název tabulky! O funkci myQuery jsem nevěděl - hned se na do podívám - děkuji. Kdo si kurník stěžuje na něco jiného, než na to, že Array není NULL? Nic jiného jsem neměl v plánu řešit - i když alespoň jsi mi ukázal efektivnější možnost vyhnutí se injekce...

EDIT:

ad - je ad - anglické slovo

UAC - User Account Control - určitě by to byl geniálně dlouhý název tabulky...

Nahlásit jako SPAM
IP: 78.136.143.–
Kit+15
Guru
4. 6. 2014   #21
-
0
-

#20 Matěj Andrle
Název tabulky se přece píše za SELECT. Název metody "myQuery" mi tam zůstal po úpravách, patří tam "prepare". Opravil jsem to. Běžně na to mám vlastní metodu myQuery, kterou jsem se nakonec rozhodl nepoužít. Nyní je to vše ze standardních komponent PHP.

Buď je něco Array nebo NULL. Nikdy současně.

Místo UAC by se mi líbil víc název "user". Názvy tabulek se navíc píší malými písmeny.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
4. 6. 2014   #22
-
0
-

Pak nechápeš proč to mám tak složité - OOP. Vytvořil jsem třídu pro všechny databáze a tabulky... Tudíž potřebuji v proměnné identifikovat název tabulky... Proto ani moc nevyužiji tvé funkce - neumožní mi takovou míru obecnosti - abych mohl aplikovat OOP. Tedy mít třídu DatabaseManager jako mám já... Zbavil jsem se potřeby opakovat již napsané SQL stringy - což je lepší - protože mnohdy se mění jen velmi malé části...

EDIT:

Zase nepochopení - mám to malým pojmemované v databázi! Proměnné - Camel case - databaseUac, Ad - by bylo divné - proto to mám celé velkým...

Nahlásit jako SPAM
IP: 78.136.143.–
Kit+15
Guru
4. 6. 2014   #23
-
0
-

#22 Matěj Andrle
V databázích je přece zvykem používat snake_case.

Takže místo opakování jednořádkového SQL dotazu raději opakuješ pětiřádkové volání metody? Skvělý nápad.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
4. 6. 2014   #24
-
0
-

Těch pět řádků je tam jen pro přehlednost... (vše jsou parametry) Nevšiml-li jsi si, tak právě nic neopakuji... "sloupec" => hodnota - to je celé... (oproti neustálému opakování velkých částí SQL stringů) To tvým způsobem by se sobě jednotlivé aspekty rovnaly - u mě ne... Znovu a zas, v databázi to mám pojmenováno dle pravidel pojmenovávání tabulek databáze.

Nahlásit jako SPAM
IP: 78.136.143.–
Matěj Andrle+1
Grafoman
4. 6. 2014   #25
-
0
-

Vytáhl jsi nejdelší, vytáhnu nejkratší:

$databaseAD->update(array("queue" => date("Y-m-d H:i:s")), $_GET["id"]);
$databaseUAC->select(array("email" => $email), array("="), NULL, "COUNT(*)");
$databaseAD->delete($_GET["id"]);
$databaseAD->update(array
(
	"title" => htmlentities($_POST["title"]),
	"refine" => htmlentities($_POST["refine"]),
	"content" => htmlentities($_POST["content"])
), $_GET["id"]);


Parametry nesnížíš!

Nahlásit jako SPAM
IP: 78.136.143.–
Kit+15
Guru
4. 6. 2014   #26
-
0
-

#25 Matěj Andrle
Co pohledávají HTML entity v databázi? To si děláš srandu? Datum v textovém formátu? WTF?

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
4. 6. 2014   #27
-
0
-

Ano - uvědomil jsem si svůj omyl... Čas dávno získávám z NOW() SQL - starší verze...

Nahlásit jako SPAM
IP: 78.136.143.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

NULL — založil Sss

Realloc a NULL — založil olgo

Rozdíl NULL a nullptr — založil liamlim

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý