« 1 2 »
Autor Zpráva
Adam16
Profil
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
mrkni, co ti vrací mysqli_num_rows($vysledok) a pátrej po tom, proč ne jedničku...
aDAm
Profil
A co ti tedy toto vrátí?
mysqli_num_rows($vysledok)
Manny
Profil
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
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
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
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
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
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
[#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
zkus obalit jméno tabulky apostrofy
"SELECT * FROM 'uzivatelia' WHERE id = '".$_GET['id']."'"
Actimel
Profil
[#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
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
PostCC:

v DB mam "id" a ja uz fakt neviem ako to mam inak spravit.
aDAm
Profil
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
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
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
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
[#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
Actimel:

Vypiše mi "Vysledek 0" a to stou tabulkou som si myslel presne to iste ale tak som to tu dal
Actimel
Profil
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
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
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
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
hm.. jakou zadáváš adresu? takhle to vypadá, jakoby $_GET['id'] bylo NULL
Adam16
Profil
Actimel:

v tabulke mam ID = `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
« 1 2 »

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: