| Autor | Zpráva | ||
|---|---|---|---|
| q Profil * |
#1 · Zasláno: 9. 11. 2011, 19:46:38
Dobrý den, snažím se udělat výpis z databáze, který bude předávat data do jednotlivých polí a kde každé pole bude mít číslo o jednu větší, které bude sloužit jako identifikátor.
Nefunkční kód: $identifikator = "1";
while($radek = $vysledek->fetch_assoc())
{
$identifikator++;
$vysledek[$radek[$identifikator]] = $radek;
}
var_dump($vysledek);var_dump by měl vrátit něco takového: array '1' => array 'jmeno' => string 'Petr' (length=4) 'id' => string '1' (length=1) array '2' => array 'jmeno' => string 'Pavel' (length=5) 'id' => string '1' (length=1) Mohou nastat nějaké problémy, pokud použiji výše uvedený příklad jako identifikátor? Napadlo mě ještě jiné řešení: pokud zavolám například fetch("id"), použije se jako identifikátor pole "id" z databáze, pokud ale zavolám fetch() použije se výše uvedený příklad, kde identifikátor bude číslo vždy o jedno větší. Nejsem si ale jistý jestli je to chytré něco takového používat. |
||
| q Profil * |
#2 · Zasláno: 9. 11. 2011, 19:59:09
Omlouvám se, zapomněl jsem přidat chybovou hlášku výše uvedeného kódu:
Notice: Undefined index: 1 in ... |
||
| Dunalnel Profil |
#3 · Zasláno: 9. 11. 2011, 20:13:51
q:
Je to zcela logické, protože v proměnné $radek, máš jen 1 řádku z tabulky a tá má index pravděpodobně id a jmeno, a ty po té řádce žádáš index 1, který logicky neexistuje. |
||
| q Profil * |
#4 · Zasláno: 9. 11. 2011, 20:20:19
Ano, vůbec jsem si toho nevšiml. Děkuji
Mohu se zde ještě zeptat jestli je takovýto kód dobře napsaný nebo to lze napsat ještě lépe (jen v rámci toho aby jsem věděl v čem dělám chyby a co lze napsat lépe)? $vysledek = array();
$identifikator = "0";
while($radek = $vysledek->fetch_assoc())
{
$identifikator++;
$vysledek[$identifikator] = $radek;
} |
||
| Dunalnel Profil |
#5 · Zasláno: 9. 11. 2011, 20:24:50
q:
Takže za 1) $vysledek, přece nemůžeš předefinovat na nové pole, když už v ní máš nějaká data (To odvozuji, z toho že tam máš na řádku 3 $vysledek->fetch_assoc() 2) Čeho chceš docílit? Jen aby si měl ve výsledku pole, které bude mít obsah té tabulky a index na začátku 1 a ne 0? To potřebuji jen pro ujasnění. :-) |
||
| q Profil * |
#6 · Zasláno: 9. 11. 2011, 21:02:01
1, Pokud nepoužiji $vysledek = array(); a dělám 2x select z databáze, tak mi to u druhého selectu přidá k poli na začátek data druhého selectu, ale poté následují data z prvního selectu.
2, Pole chci aby začínalo číslem 1. Zajímalo mě jestli lze tento kód napsal lépe, hlavně kvůli tomu abych příště nedělal zbytečně chyby. |
||
| q Profil * |
#7 · Zasláno: 9. 11. 2011, 21:04:21
oprava 1, Znovu jsem se podíval na var_dump($vysledek); a data se nepřidávají nakonec, ale přepisují ty stará z prvního selectu, která se nesmazala
|
||
| Alphard Profil |
#8 · Zasláno: 9. 11. 2011, 21:26:46
1. Do proměnné na začátku ukládáte "0" (to je řetězec), ale pak pracujete s číslem. To je hloupost, která prochází jen díky benevolenci PHP.
2. Můžete použít přímo $vysledek[++$identifikator], nemusíte to zvětšovat na samostatném řádku.
3. PHP umí samo zvyšovat indexy pole. Tady je komplikace, že to má být od 1 (to mi samo o sobě nepřipadá rozumné). Někdy se to řeší dodáním první hodnoty a jejím následným smazáním, nebo explicitním zadáním jen 1, ale to už nebude jednodušší než současná podoba. Smysl to má v situacích, kdy by byl problém udržovat proměnnou s počítadlem (např. předávání pole mezi funkcemi). |
||
| q Profil * |
#9 · Zasláno: 9. 11. 2011, 21:46:52
Děkuji. Pořád ale nechápu proč musím použít (a jestli je to správně) $vysledek = array(); aby se smazali data z proměnné $vysledek, které se přiřadili při prvním výpisu a nezůstali tam při druhém výpisu.
|
||
| Alphard Profil |
#10 · Zasláno: 9. 11. 2011, 22:05:23
Přiřazením prázdného pole smažete to předchozí.
Na začátku byste měl mít správně také $vysledek = array();
|
||
| Bertram Profil |
#11 · Zasláno: 10. 11. 2011, 06:20:52 · Upravil/a: Bertram
q:
„Mohu se zde ještě zeptat jestli je takovýto kód dobře napsaný nebo to lze napsat ještě lépe (jen v rámci toho aby jsem věděl v čem dělám chyby a co lze napsat lépe)?“ Ahoj, už v prvním příspěvku uvádíš „které bude sloužit jako identifikátor‟. Nebylo by tedy lepší vrátit se k prvnímu způsobu a vybrat si z příslušného řádku záznamu vhodný sloupec popř. kombinaci podle které bude identifikátor opravdu identifikátorem. Protože jinak jde o pořadí v jakém byly záznamy vráceny, nikoli o identifikaci příslušného záznamu. |
||
|
Časová prodleva: 14 let
|
|||
0