Autor | Zpráva | ||
---|---|---|---|
Adam16 Profil |
#1 · Zasláno: 25. 7. 2013, 00:42:26
Zdravim, spravil som si taky jednoduchy profil uzivatela... ale stale sa mi vykona vetva "else". Prosim poradte mi niekto :)
<?php $db_spojenie = mysqli_connect("127.0.0.1", "root", "", "****", "3306"); $vysledok = mysqli_query($db_spojenie, "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."'"); if(mysqli_num_rows($vysledok) == 1) { $info = mysqli_fetch_array($vysledok); echo " <table cellpadding='0' cellspacing='0' width='50%'> <tr> <td> Profil #".$info['id']." </td> </tr> <tr> <td width='160'> <b> Meno: </b> </td> <td> ".($info['meno'] ? $info['meno'] : "Nevyplnené")." </td> </tr> <tr> <td width='160'> <b> Priezvisko: </b> </td> <td> ".($info['priezvisko'] ? $info['priezvisko'] : "Nevyplnené")." </td> </tr> <tr> <td width='160'> <b> E-mail: </b> </td> <td> ".($info['email'] ? $info['email'] : "Nevyplnené")." </td> </tr> <tr> <td width='160'> <b> Pohlavie: </b> </td> <td> ".($info['pohlavie'])." </td> </tr> </table>"; } else { echo "<center><b><font color='red'>!!! Neexistujúci uživateľ !!!</font></b></center>"; } ?> |
||
Actimel Profil |
#2 · Zasláno: 25. 7. 2013, 03:00:28
mrkni, co ti vrací
mysqli_num_rows($vysledok) a pátrej po tom, proč ne jedničku...
|
||
aDAm Profil |
#3 · Zasláno: 25. 7. 2013, 11:38:39
A co ti tedy toto vrátí?
mysqli_num_rows($vysledok) |
||
Manny Profil |
#4 · Zasláno: 25. 7. 2013, 11:41:14
1) Zjisti, jestli proměnná
$_GET['id'] je ve tvaru, který očekáváš
2) případně si vypiš mysql_error()
3) a pak bych možná dal místo if(mysqli_num_rows($vysledok) == 1) něco jako if(!$vysledok) echo "<center><b><font color='red'>!!! Neexistujúci uživateľ !!!</font></b></center>"; a nepotřebuješ větev else
|
||
Adam16 Profil |
#5 · Zasláno: 25. 7. 2013, 12:16:35
Manny:
Ak som spravil ten treti bod co si napisal tak mi vypiše toto Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in ... a spravi mi tabulku ale všetky polozky mi vypise "Nevyplnené" |
||
Actimel Profil |
#6 · Zasláno: 25. 7. 2013, 12:54:56
protože máš máš chbu v tom query...
Jak psal víše Manny - nech si vypsat mysqli_error() hned za query $vysledok = mysqli_query($db_spojenie, "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."'") or die( mysqli_error($db_spojenie) ); |
||
Adam16 Profil |
#7 · Zasláno: 25. 7. 2013, 13:25:54
Actimel:
spravil som to ako ty a vypisalo toto Catchable fatal error: Object of class mysqli could not be converted to string in ... |
||
Actimel Profil |
#8 · Zasláno: 25. 7. 2013, 13:58:20
bylo by fájn, kdyby jsi dopsal to co je za tím in v erroru, ať vím, kde to háže - s mysqli jsem zatím skoro nedělal.. a při té příležitosti tu lupni ten tvůj kód, jak teď vypadá ;)
|
||
Adam16 Profil |
#9 · Zasláno: 25. 7. 2013, 14:02:40
Actimel:
sorry, tu to maš... chybu vypisuje na riadku $vysledok = mysqli_query($db_spojenie, "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."' or die( mysqli_error($db_spojenie)) "); to je ten mysqli_error |
||
Actimel Profil |
#10 · Zasláno: 25. 7. 2013, 14:11:31
[#12] Adam16
protože ti si ten die dal do mysqli_query() mrkni na ten řádek co jsem poslal já a co tam máš ty ;) (a samozřejmě ho nahraď tím mým)
|
||
Manny Profil |
#11 · Zasláno: 25. 7. 2013, 14:16:22
zkus obalit jméno tabulky apostrofy
"SELECT * FROM 'uzivatelia' WHERE id = '".$_GET['id']."'" |
||
Actimel Profil |
#12 · Zasláno: 25. 7. 2013, 14:21:31
[#14] Manny
to by mělo význam, když by ta tabulka měla stejný název jako nějaký MySQLkem vyhrazené slovo. V první řadě tu jde o to že ten or die má v mysqli_query() a ne až za..
|
||
PostCC Profil |
#13 · Zasláno: 25. 7. 2013, 15:41:26
No, hlavně asi v:
$vysledok = mysqli_query($db_spojenie, "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."' or die( mysqli_error($db_spojenie)) "); nebude záměrem posílat tu část PHP jazyka: " or die( mysqli_error($db_spojenie))" jako součást SQL query, ne? Čili lépe: $vysledok = Mysqli_Query($db_spojenie, "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."'") OR Die(Mysqli_Error($db_spojenie)); |
||
Adam16 Profil |
PostCC, Actimel
$db_spojenie = mysqli_connect("127.0.0.1", "root", "", "****", "3306"); $vysledok = mysqli_query($db_spojenie, "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."'") or die( mysqli_error($db_spojenie) ); if(mysqli_num_rows($vysledok) == 1) { $info = mysqli_fetch_array($vysledok); echo " <table cellpadding='0' cellspacing='0' width='50%'> <tr> <td> Profil #".$info['id']." </td> <td> <a href='profil.php?id=".$info['id']."'>REFRESH</a> </td> </tr> <tr> <td width='160'> <b> Meno: </b> </td> <td> ".($info['meno'] ? $info['meno'] : "Nevyplnené")." </td> </tr> <tr> <td width='160'> <b> Priezvisko: </b> </td> <td> ".($info['priezvisko'] ? $info['priezvisko'] : "Nevyplnené")." </td> </tr> <tr> <td width='160'> <b> E-mail: </b> </td> <td> ".($info['email'] ? $info['email'] : "Nevyplnené")." </td> </tr> <tr> <td width='160'> <b> Pohlavie: </b> </td> <td> ".($info['pohlavie'] ? $info['pohlavie'] : "Nevyplnené")." </td> </tr> </table>"; } else { echo "<center><b><font color='red'>!!! Neexistujúci uživateľ !!!</font></b></center>"; } teraz to mam takto a stale sa vykona vetva ELSE... ked sa odkazujem na profil tak postupujem takto... hore v linku by malo vypisat .../profil.php?id=1 to cislo 1 je id uzivatela... ked bude ID take vypise tieto udaje a mne vypise len .../profil.php?id= <a href='profil.php?id=".$info['id']."'><span> " . $_SESSION['login'] . " </span></a> |
||
PostCC Profil |
Adam16:
A ten požadovaný sloupec v databázi se skutečně jmenuje "id"? Nemůže to být třeba "Id" nebo "ID"? Názvy sloupců jsou case sensitive. *** EDIT *** ... míněno pochopitelně při vytváření pole výsledku. Tzn. v poli $info mohou existovat indexy "id", "Id" nebo "ID", je to odvislé od pojmenování sloupce v databázi. Proto je hvězdičková konvence vcelku k ničemu, z DB totiž dostanu pouze přesně to, o co si řeknu. Mnohem lépe tedy např.: SELECT Id AS Id, Jmeno AS Jmeno ... atd. Pokud se pak změní z nějakého důvodu název sloupec, stačí mi jej upravit v SELECTu a není nutné překopat půlku kódu. Nicméně stále nechápu to "stále se vykonává větev ELSE" - pokud je to tak jak zmíněno výše, tak script "umře" už na tom Die() a nic dalšího se nemůže provést... |
||
Adam16 Profil |
#16 · Zasláno: 25. 7. 2013, 16:12:34
PostCC:
v DB mam "id" a ja uz fakt neviem ako to mam inak spravit. |
||
aDAm Profil |
#17 · Zasláno: 25. 7. 2013, 16:35:27
PostCC:
proč by měl umírat na tom die? Adam16: A seš si jistý že pod tím ID 1 je pouze jeden záznam? |
||
Adam16 Profil |
#18 · Zasláno: 25. 7. 2013, 16:40:47
aDAm:
Ano je tam iba jeden zaznam :) co by tam malo este byt ??? |
||
Actimel Profil |
tak se mrkni co ti vrací
mysqli_num_rows($vysledok) jak jsem psal v prvním příspěvku a aspoň se budeš mít od čeho odrazit..
//edit kdyžtak ještě přidej další mysqli_error() za přizazování hodnoty $info
$info = mysqli_fetch_array($vysledok) or die( mysqli_error($db_spojenie) ); |
||
aDAm Profil |
#20 · Zasláno: 25. 7. 2013, 17:00:10
Adam16:
bohužel tvou tabulku nevidím, neznám její strukturu atd, takže opravdu netuším co tam je a zřejmě je tam něco špatně když ti to nevyhoví podmínce co tam máš. |
||
Adam16 Profil |
#21 · Zasláno: 25. 7. 2013, 17:01:08 · Upravil/a: Adam16
Actimel:
co mam spravit stym mysqli_num_rows($vysledok) ?
a spravil som aj $info = mysqli_fetch_array($vysledok) or die( mysqli_error($db_spojenie) ); ale vypiše vetvu ELSE...aDAm: -- -- Štruktúra tabuľky pre tabuľku `uzivatelia` -- CREATE TABLE IF NOT EXISTS `uzivatelia` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `meno` varchar(50) COLLATE utf8_slovak_ci DEFAULT NULL, `priezvisko` varchar(50) COLLATE utf8_slovak_ci DEFAULT NULL, `heslo` varchar(50) COLLATE utf8_slovak_ci DEFAULT NULL, `email` varchar(50) COLLATE utf8_slovak_ci DEFAULT NULL, `pohlavie` varchar(4) COLLATE utf8_slovak_ci DEFAULT NULL, `prava` int(4) DEFAULT NULL, `cas` int(10) unsigned DEFAULT NULL, `ip` varchar(20) COLLATE utf8_slovak_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci AUTO_INCREMENT=12 ; Tu maš tabulku |
||
Actimel Profil |
#22 · Zasláno: 25. 7. 2013, 17:07:03
[#24] Adam16
tak to je jasný, i předtím ti to šlo do else, takže když připíšeš něco do větve if tak to tím nespravíš, nicméně si vypiš co ti vrací mysqli_num_rows($vysledok)
nejlépe před podmínku dej echo 'Vysledek ' . mysqli_num_rows($vysledok);
a uvidíš, buď ti to vrátí jiný číslo a enbo to skončí chybou ;) tabulku bych neřešil to by ti psalo "undefined index $proměnná" |
||
Adam16 Profil |
#23 · Zasláno: 25. 7. 2013, 17:09:46
Actimel:
Vypiše mi "Vysledek 0" a to stou tabulkou som si myslel presne to iste ale tak som to tu dal |
||
Actimel Profil |
#24 · Zasláno: 25. 7. 2013, 17:15:20
tak aspoň teď víš že ti to nic nevytahuje... tak jedině možnost, že uživatel v databázi není... a nebo posíláš špatně
$_GET['id']
mrkni do db na výpis tabulky a nebo si vypiš hodnotu z $_GET['id'] |
||
Adam16 Profil |
#25 · Zasláno: 25. 7. 2013, 21:34:38
Actimel:
skusal som vypisat ID z tabulky a nejde to !!! neviem preco... ale ked som dal prec to $_GET['id'] tak mi to hned vypisalo... |
||
Actimel Profil |
#26 · Zasláno: 25. 7. 2013, 22:00:24
Adam16:
takže když do dotazu napíšeš místo $_GET['id'] jedničku, tak ti to vrátí? jestli jo, tak je potom problém s tím co je v $_GETu
|
||
aDAm Profil |
#27 · Zasláno: 25. 7. 2013, 22:01:42
Tak zřejmě máš blbě poskládaný sql dotaz. Dej si echo toho dotazu na obrazovku a pak si ho spusť přes phpmyadmin etc.
$query = "SELECT * FROM uzivatelia WHERE id = '".$_GET['id']."'"; echo $query; $vysledok = mysqli_query($db_spojenie, $query); |
||
Adam16 Profil |
Actimel:
ked som ta dal moje id tak my vypisalo vsetky udaje do tabulky aDAm: toto co si napisal mi vypise "SELECT * FROM uzivatelia WHERE id Pravdepodobne je nieco s tym GET ! ak ho tam dam hned sa vykona vetva ELSE ! |
||
Actimel Profil |
#29 · Zasláno: 25. 7. 2013, 23:54:36
hm.. jakou zadáváš adresu? takhle to vypadá, jakoby
$_GET['id'] bylo NULL
|
||
Adam16 Profil |
#30 · Zasláno: 26. 7. 2013, 00:02:42
Actimel:
v tabulke mam ID = `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||
Téma pokračuje na další straně.
|
0