Autor Zpráva
quickspider
Profil
Dobrý den,
mohli byste mi, prosím, proradit. Snažím se už několik hodin přepsad kód stránek do php 7 a nedaří se mi načítání dát z databáze. V databázi dotaz funguje, ale v kódu se neprovede.

<?php
/*hlavička*/
$title = 'Kobra &raquo; Informace &raquo; 2020';
include('hlavicka.php');
echo '<h1 id="nahoru">Informace &raquo; 2020</h1>
</div><div class="obal">';
/*menu*/
include('menu.php');
//obsahy
echo '<div class="obsah2">
<h2>Aktualizace webu</h2>';
$pripojeni=mysqli_connect('localhost', 'jmeno' , 'heslo') or die('Bohužel se nepodařílo připojit k serveru s databázi.<br>Zkuste to prosím později nebo kontaktujte správce na <a href="mailto:admin@?subject=chyba na webu">admin@</a>.<br>Děkuji.<br>'); // adresa, uživatel, heslo
$novinky=Array(1=>"kobra", "web");
$vysledek = mysqli_query($pripojeni, 'select date_format(datum, "%d. %m. %Y") datum_f, k11, web from news where date_format(datum, "%Y")=2020 order by datum desc'); //Připojení do DB serveru
if(!$vysledek){
echo "<br><b>chyba dotazu 1</b><br>";
}
while ($zaznam = mysqli_fetch_array($vysledek)) 
{    
/* Cyklem procházím řádky výsledku a vytahuju z něj hodnoty do nového pole $zaznam*/
echo '<div class="informace"><span>'.$zaznam["datum_f"]."</span><br></div>";
if ($zaznam["k11"]) {
    echo '<b>'.($novinky [1]).': </b>'.$zaznam["k11"]."<br>";
    }
if ($zaznam["web"]) {
    echo '<b>'.($novinky [2]).': </b>'.$zaznam["web"]."<br>";
    }
    echo '<div class="nahoru"><a href="#nahoru">nahoru ^</a></div>';
}
chybová informace je:

chyba dotazu 1

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in D:\programy\xampp\htdocs\kobra\index.php on line 18

Také se mi nedaří odkazovat na samostatný soubor s údaji o připojení a musí to být napsáno na začátku stránky.

Děkuji Vám za pomoc
lionel messi
Profil
quickspider:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in D:\programy\xampp\htdocs\kobra\index.php on line 18

Pridaj mysqli_connect 4. parameter - názov databázy.

Také se mi nedaří odkazovat na samostatný soubor s údaji o připojení a musí to být napsáno na začátku stránky.

Ako naň odkazuješ? Na 99,99% bude chyba v ceste.
quickspider
Profil
lionel messi:
Aha, díky moc.

Dříve fungovalo
include('pripojeni.php');
pripojeni_db();
v části menu
lionel messi
Profil
quickspider:

1. Čo vráti:

var_dump(is_file('pripojeni.php'));

na vylúčenie problému s cestou?

2. Ak false, rieš cestu, ak true, čo presne je obsahom funkcie pripojeni_db();?

3. Ak aj vo funkcii pripojeni_db voláš mysqli_connect() s 3 parametrami, je problém jasný.
quickspider
Profil
lionel messi:

ad 1: true
ad 3:
doplnil jsem tam 4 parametr a když smažu řádek s mysqli_connect z index.php tak mi pak píše, že mám definovat proměnnou připojení :

bool(true)
Notice: Undefined variable: pripojeni
function pripojeni_db()
{// pripojeni k serveru s db
$pripojeni=mysqli_connect('localhost', '' , '', '') or die('Bohužel se nepodařílo připojit k serveru s databázi.<br>Zkuste to prosím později nebo kontaktujte správce na <a href="mailto:admin@?subject=chyba na webu">admin@</a>.<br>Děkuji.<br>'); // adresa, uživatel, heslo
mysqli_set_charset($pripojeni,"utf8");
if(!mysqli_select_db($pripojeni, ''))// výběr DB
{
echo 'Bohužel se nepodařílo připojit k databázi.<br>Zkuste to prosím později nebo kontaktujte správce na <a href="mailto:admin@?subject=chyba na webu">admin@</a>.<br>Děkuji.<br>'; 
}
} 
lionel messi
Profil
quickspider:
doplnil jsem tam 4 parametr a když smažu řádek s mysqli_connect z index.php tak mi pak píše, že mám definovat proměnnou připojení :

www.pehapko.cz/zakladni-kurz/14-rozsah-platnosti

Vo funkcii nastav $pripojeni ako návratovú hodnotu a potom ju v stránke, kde pripojeni.php includuješ, zavolaj $pripojeni = pripojeni_db();
quickspider
Profil
lionel messi:
super, už to jde.

Dá se do sql dotazu vložit proměnná (2019). Př.:'select date_format(datum, "%d. %m. %Y") datum_f, text from news where date_format(datum, "%Y")=2019 order by datum desc'
lionel messi
Profil
quickspider:

Dá se do sgl dotazu vložit proměnná

Niekedy je rýchlejšie si veci rovno vyskúšať. Odpoviem aspoň nepriamo: Z hľadiska PHP (a tvojej otázky) je SQL dotaz iba obyčajný reťazec ako každý iný.
quickspider
Profil
lionel messi:
Díky moc za pomoc.
Už to funguje, zřejmě jsem tam zapomněl při pokusech zapsat tečky.
lionel messi
Profil
quickspider:

Super.

Ešte nezabudni na správne escapovanie, prečítaj si čosi o SQL Injection a funkcii mysqli_real_escape_string.
Kajman
Profil
Pokud bude nad sloupcem datum index a v tabulce bude hodně záznamů, tak bude mnohem rychlejší použít v dotaze podmínku

where datum between '2019-01-01' and '2019-12-31 23:59:59'

Pro ošetření vstupů můžete také použít bindování proměnných. Něco jako
$rok = 2019;
$stmt = $pripojeni->prepare("select date_format(datum, "%d. %m. %Y") datum_f, text from news where datum between ? and ? order by datum desc");
$stmt->bind_param('ss', $rok.'-01-01', $rok.'-12-31 23:59:59');
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array())
        { ... }
$stmt->close();

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:

0