#1 2016-03-23 12:25:58

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Problém s dotazem do databáze

Zdravím,
mám problém - nevím jestli s dotazem do databáze, protože v phpMyAdmin funguje bez problému.
Chci vypsat pocet_navstev_kraj (typu int), který má v databázi hodnotu 0, pomocí proměnné $dotaz_kraj
Název kraje v databázi - nazev_kraj - by měl tedy odpovídat proměnné $kraj.
Nicméně to nefunguje. Celý dotaz jsem si i vypsal pomocí echo a je vpořádku, když ale přidám echo $dotaz_kraj;
dotaz už se vypíše pomocí echa špatně, takto: SELECT pocet_navstev_kraj FROM kraj WHERE nazev_kraje = "HlavnĂ­ mÄ›sto Praha"
Asi v tomto bude háček, jenže nevím co s tim, jsem začátečník, budu rád za každou radu.

Toto je můj kód:

        define("SERVER","localhost");
    define("UZIVATEL","*****");
    define("HESLO","*****");
    define("DB","*****");

    session_start();
    $jmeno = $_GET['jmeno'];
    $pohlavi = $_GET['pohlavi'];
    $kraj = $_GET['kraj'];
   
    if ($jmeno && $pohlavi && $kraj) { /*existuje-li jmeno, pohlavi a kraj*/
        $connect = @mysqli_connect(SERVER, UZIVATEL, HESLO, DB) or die ("Nepodařilo se připojit k databázi"); /*pripoji se vporadku*/
        mysqli_set_charset($connect,"utf-8");
        if (mysqli_connect_errno())
        {
          echo "Nepodařilo se připojit k MySQL: " . mysqli_connect_error();
        }
        echo $jmeno;echo "<br />"; /*vypisuje vporadku*/
        echo $pohlavi;echo "<br />";  /*vypisuje vporadku*/
        echo "SELECT pocet_navstev_kraj FROM kraj WHERE nazev_kraje = \"$kraj\" ";  /*vypisuje vporadku jen kdyz nepouziji: echo $dotaz_kraj;    !!! */
       
       
        $dotaz_kraj = mysqli_query($connect," SELECT pocet_navstev_kraj FROM kraj WHERE nazev_kraje = \"$kraj\" ");
        echo "<br />";
        echo $dotaz_kraj; /*nevypisuje*/

        /*mysqli_close($connect);*/
    }

Offline

#2 2016-03-23 13:02:47

JF
Endora rádce
Místo: ....nice u Plzně
Registrován: 2010-06-22
Příspěvky: 11,941

Re: Problém s dotazem do databáze

Premenná $dotaz_kraj je pole (array), pred vypísaním ho musíte spracovať napríklad pomocou fetch assoc alebo fetch row


Ján Fačkovec - Endora.cz by Webglobe
Email, Web, Webadmin, Webmail, Nápověda, Ceník

Offline

#3 2016-03-23 13:40:31

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Re: Problém s dotazem do databáze

Děkuji za radu, doplnil jsem tedy toto:
                $pocet_radku_kraj = mysqli_num_rows($dotaz_kraj);
        echo $pocet_radku_kraj; /*vypise 0*/


        if($pocet_radku_kraj != 0){
            while($radek_kraj = mysql_fetch_assoc($dotaz_kraj)) {
                echo "id:" . $radek_kraj["id_kraje"] . "<br />";
                echo "kraj" . $radek_kraj["nazev_kraje"] . "<br />";
                echo "pocet navstev: " . $radek_kraj["pocet_navstev_kraj"] . "<br />";
            }
        } /*nic nevypisuje*/
        else {
            echo "tabulka kraj žádné odpovídající hodnoty (řádky) nemá";
        }
vypisuje se mi hláška: "tabulka kraj žádné odpovídající hodnoty (řádky) nemá", je to však divné, v databázi hodnoty v tabulce mám, je jich tam 14 (14 krajů čr)

předělal jsem i dotaz, předtím jsem tam neměl hvězdičku, každopádně pořád nefunguje:
$dotaz_kraj = mysqli_query($connect," SELECT * FROM kraj WHERE nazev_kraje = \"$kraj\" ");

EDIT:
Zjistil jsem že tabulka neexistuje, což je opravdu podivné, v databázi přes phpMyAdmin ji vidím, i její hodnoty ..tak, jak to?
        $result = mysqli_query("SHOW TABLES LIKE 'kraj'");
        if (mysqli_num_rows($result) > 0) {
            echo "tabulka kraj existuje";
        }   
        else if (mysqli_num_rows($result) == 0) {
            echo "tabulka neexistuje";
        }

Upravil apelt (2016-03-23 14:24:07)

Offline

#4 2016-03-23 15:34:25

JF
Endora rádce
Místo: ....nice u Plzně
Registrován: 2010-06-22
Příspěvky: 11,941

Re: Problém s dotazem do databáze

mysql_fetch_assoc nevypíše nič z dôvodu že máte aktívne pripojenie mysqli nikoliv mysql
SHOW TABLES LIKE 'kraj' nevypíše nič pretože žiadna tabuľka neobsahuje medzi dátami presnú frázu kraj. Aby to hľadalo správne, mali by ste doplniť znak percentá pred kraj, tj SHOW TABLES LIKE '%kraj' keďže v databáze máte celú frázu napríklad Plzeňský kraj


Ján Fačkovec - Endora.cz by Webglobe
Email, Web, Webadmin, Webmail, Nápověda, Ceník

Offline

#5 2016-03-23 16:13:35

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Re: Problém s dotazem do databáze

obojí jsem tedy upravil ale výsledek stále stejný, nic se nevypíše, a tabulka (řádek) neexistuje:
                $result = mysqli_query("SHOW TABLES LIKE '%kraj' ");
        if (mysqli_num_rows($result) > 0) {
            echo "tabulka existuje";
        }   
        else if (mysqli_num_rows($result) == 0) {
            echo "tabulka neexistuje";
                        echo mysqli_num_rows($result); /*nic nevypise*/
        }

Upravil apelt (2016-03-23 16:24:58)

Offline

#6 2016-03-23 16:42:32

JF
Endora rádce
Místo: ....nice u Plzně
Registrován: 2010-06-22
Příspěvky: 11,941

Re: Problém s dotazem do databáze

Už som prišiel na chybu, zápis má vyzerať: mysqli_query($connect, "SHOW TABLES LIKE 'kraj'") - chýbalo tam to $connect


Ján Fačkovec - Endora.cz by Webglobe
Email, Web, Webadmin, Webmail, Nápověda, Ceník

Offline

#7 2016-03-23 17:34:39

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Re: Problém s dotazem do databáze

Děkuji moc, už mi to píše že tabulka existuje. Nevíte ještě proč když vyberu všechny řádky z tabulky, píše mi to že jich tam je 0? (echo $pocet_radku_kraj;).
Za proměnnou $kraj dosazuji: Hlavní město Praha , což v tabulce kraj v databázi mám. Ve výsledku mi to píše že "tabulka je prazdna"

$dotaz_kraj = mysqli_query($connect," SELECT * FROM kraj WHERE nazev_kraje = \"$kraj\" ");
		echo "<br />";
		
		
		$pocet_radku_kraj = mysqli_num_rows($dotaz_kraj);
		echo $pocet_radku_kraj; /*vypisuje 0*/
		echo "<br />";
		
		if($pocet_radku_kraj != 0){
			while($radek_kraj = mysqli_fetch_assoc($dotaz_kraj)) { 
				echo "id:" . $radek_kraj["id_kraje"] . "<br />";
				echo "kraj:" . $radek_kraj["nazev_kraje"] . "<br />";
				echo "pocet navstev: " . $radek_kraj["pocet_navstev_kraj"] . "<br />";
			}
		} /*nic nevypisuje*/
		else if ($pocet_radku_kraj == 0) {
			echo "tabulka je prazdna";
		}
		else {
			echo "nepodarilo se nic vypsat";
		}

Offline

#8 2016-03-23 18:13:30

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Problém s dotazem do databáze

Co vypíše:

echo " SELECT * FROM kraj WHERE nazev_kraje = \"$kraj\" ";

Na jaké doméně? Popř. jaký konkrétní soubor?


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#9 2016-03-23 18:38:54

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Re: Problém s dotazem do databáze

Vyzkoušet si to můžete zde: http://apelt.jecool.net/index5.php
Kód je vypisován po zadání vstupu uživatele do formuláře, což po potvrzení spustí soubor formAction.php
Formulář zatím nevykonává to co má, nejdřív se pokouším vypisovat proměnné, abych věděl co funguje.

Offline

#10 2016-03-23 19:58:38

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Problém s dotazem do databáze

Problém je v nevhodně zvoleném selectu, resp. option. Zadáváte textový výraz včetně mezer, který odesíláte GETem => PROBLÉM

Vytvořil jsem Vám nový kraj (testovací) a tam to funguje, protože v předaném řetězci nejsou mezery ani jiné bílé znaky.

Důrazně doporučuji také ošetřit uživatelské vstupy, zejména s kterými pracujete v databázi.


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#11 2016-03-23 20:31:39

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Re: Problém s dotazem do databáze

Mockrát Vám děkuji, na to bych sám asi nikdy nepřišel. děkuji smile

Offline

#12 2016-03-23 21:10:25

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Problém s dotazem do databáze

Není zač, také mi to hned nedošlo... Trvalo mi to asi 10 minut big_smile

"Standardní" způsob je do VALUE udávat číslo (id položky) a textovou část vyčítat z tabulky.
Pokud nějaký kraj zanikne či nově vznikne, přejmenuje se, atd. pak budete muset opravovat php soubor.

EDIT:
Další hrubou chybou je uvádět citlivé informace (přihlašovací údaje) do spouštěného souboru. V případě chyby by totiž mohlo dojít k výpisu tohoto souboru včetně citlivých údajů a útočníkovi by jste umožnil jednoduchý přístup k takovým informacím.
Soubor s citlivými údaji se do spouštěného includuje a může se také znepřístupnit "zvenku" např. pomocí .htaccess.


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#13 2016-03-23 22:22:58

apelt
Endora uživatel
Registrován: 1970-01-01
Příspěvky: 8

Re: Problém s dotazem do databáze

Určitě to tak předělám smile

Offline

Zápatí

Založeno na FluxBB | CZ a SK