Nejste přihlášeni
Stránky 1
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
Offline
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
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
Offline
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
Offline
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
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
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
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
Mockrát Vám děkuji, na to bych sám asi nikdy nepřišel. děkuji
Offline
Není zač, také mi to hned nedošlo... Trvalo mi to asi 10 minut
"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
Určitě to tak předělám
Offline
Stránky 1