Autor Zpráva
kikinet
Profil
Zdravím,
mám klasický jednoduchý dotaz pro získání informací z db.
Tento funguje v pořádku
    $query = "SELECT `url_orig`,`url_thumb` FROM `group` WHERE `ID_g`=".$group.";";
    $result = mysql_query($query, $db);                    
    $url[] =  mysql_fetch_assoc($result); 
A stejně napsaný kousek kódu, teď už ale nefunkční
   $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";";    
    $result = mysql_query($query, $db);
    $photos[] = mysql_fetch_assoc($result);                                     
Druhý kousek kódu vrátí pouze jeden řádek (v tomto případě jen jeden název) z db. Už nevím jak to upravit, aby to fungovalo...
Fisir
Profil
Reaguji na kikineta:
Kolik řádků vrací SQL dotaz spuštěný v nějakém adminovi? Můžeš si zkusit vypsat mysql_num_rows($result);, schválně, kolik ti to vrátí. PHP rozšíření mysql_* je zastaralé, příště použij raději MySQLi.
Micruss
Profil
$photos = array();
while($photo = mysql_fetch_assoc($result)) {
$photos[] = $photo;
}

když jich chceš získat víc než 1
kikinet
Profil
Fisir:
Vím, že novější je novější je MySQLi. Celý web mi jede na MySQL a nebudu to předělávat kvůli jednomu dotazu, který nefunguje

Micruss:
To už jsem taky zkoušela, marně. Pořád vrací jen jeden výsledek (místo 3 požadovaných)
Tori
Profil
kikinet:
Je potřeba přesněji určit, kde vlastně je chyba - jestli v dotazu/datech, nebo ve skriptu. Nejjednodušší způsob radil Fisir [#2]: Když si spustíš samotný dotaz v PhpMyAdmin, měl by vracet ty tři řádky. Pokud ne, chyba je v dotazu nebo v datech; v opačném případě je ve skriptu.
peta
Profil
Nevidim tam povolene error_reporting().
Nevidim tam u dotazu or die mysql_error(). Ale dotaz projde, kdyz vrati 1 radek.
Nevidim tam echo $query;, ktere by pak stacilo zkopirovat do phpmyadmina.

Muj predpoklad je, ze kdyz to vrati 1 radek a ne 3, tak zhlediska sql je dotaz spravny, funkcni. Ale zhlediska pozadavku na 3 radky je chybne sestaveny, tudiz nemuze 3 radky vracet. Proc? Je mozne, ze promenna $group neni definovana (pak tam vlozi prazdnou hodnotu nebo selze dotaz). Je mozne, ze v db v tom sloupci jsou jine hodnoty group_ID nez v $group.

1) $query = "SELECT `url_orig`,`url_thumb` FROM `group` WHERE `ID_g`=".$group.";";
2) $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";";
Ty dva dotazy jsou rozdilne, nemusi vracet stejny pocet radku. (1) pracuje s tabulkou group, (2) s tabulkou photos. Ja bych si zkusil zobrazit obe tabulky, cele a zameril se na hodnoty v ID_g a group_ID.
SELECT * FROM `group`
SELECT * FROM `photos`
kikinet
Profil
Tori:
Vrací 3 řádky pokud to vložím do admina :) takže je to spíše z hlediska scriptu

peta:
Error_reporting je povoleno - nehlásí nic
V $group je určitě zadaná správná hodnota (od 1 do 4), vypisuju ji pro kontrolu společně s polem $photos
Samotný dotaz v phpMyAdmin je funkční a vrací 3 řádky
ID_g a goup_ID mají stejný datový typ (int(1)). ID_g je ID tabulky group a group_ID je cizí klíč v tabulce photos
Kajman
Profil
kikinet:

Když pole naplníte podle [#3], jak s ním pak pracujete? Třeba bude chyba i tam.
peta
Profil
Kdyz ten dotaz, udelas echo a to, co echo vypise, das do phpmyadmina, tak ti zobrazi 3 radky, ano? Pak je dotaz v poradku.

Pokud pouzijes (tvuj kod)
 $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";";    
    $result = mysql_query($query, $db);
    $photos[] = mysql_fetch_assoc($result);   // 1x fetch vytahne z $result pouze jeden radek
Pak to do pole $photos na dalsi volnou pozici, ktra je na zacatku 0 ($photos[0]) ulozi prvni radek z $result, ktery ziskas pomoci mysql_fetch_assoc. Pokud chces vice radku, pak viz Micruss nebo priklad v manualu, pouzij cyklus while
http://cz2.php.net/mysql_fetch_assoc
$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}
kikinet
Profil
Kajman:
Potom uz ho jen vypisuju pomoci print_r($photos), coz mi vrati jeden radek.
peta:
Ano, teorii chapu. Snazim se hodnoty nahrat z db do pole pres cyklus while tak, jako to psal [#3] Micruss. Ale take vraci pouze jeden radek. A ano, dotaz samotny je funkcni
Kajman
Profil
kikinet:

Ukažte současný kód s while cyklem od dotazu až po výpis.
kikinet
Profil
Kajman:
if ($group>0 && $group<5){                              //ošetření špatně zadaných hodnot do url
  require('script/dblogin.php');                            //přihlášení k db
  $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";";      //získání názvů fotek podle zvolené kategorie
  $result = mysql_query($query, $db);
  $photos = array();
  while($photo = mysql_fetch_assoc($result)) {
    $photos[] = $photo;
  };
  print_r($photos);
};
peta
Profil
<?php

$SQL    = array();
$SQL['host']   = "localhost";    //server (host)
$SQL['user']   = "root";        //MySQL user
$SQL['psw']    = "";        //MySQL password
$SQL['dbname'] = "test";        //MySQL DB name

$SQL['connect'] = mysql_connect($SQL['host'],$SQL['user'],$SQL['psw']) or die(mysql_error());
$SQL['db']     = mysql_select_db($SQL['dbname'],$SQL['connect']) or die(mysql_error());

$group = 3;

if ($group>0 && $group<5){                              //ošetření špatně zadaných hodnot do url
//  require('script/dblogin.php');                            //přihlášení k db
  $query = "SELECT `name_p` FROM `photos` WHERE `group_ID`=".$group.";";      //získání názvů fotek podle zvolené kategorie
echo '<hr>'.$query.'<hr>';
  $result = mysql_query($query) or die(mysql_error());
  $photos = array();
  while($photo = mysql_fetch_assoc($result)) {
    $photos[] = $photo;
  };
echo '<pre>';
  print_r($photos);
};


/*
CREATE TABLE `test`.`photos` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name_p` TEXT NOT NULL ,
`group_ID` INT NOT NULL ,
INDEX ( `group_ID` )
) ENGINE = MYISAM ;

INSERT INTO `test`.`photos` (
`id` ,
`name_p` ,
`group_ID`
)
VALUES (
NULL , 'aaa', '3'
), (
NULL , 'bbb', '3'
);

INSERT INTO `test`.`photos` (
`id` ,
`name_p` ,
`group_ID`
)
VALUES (
NULL , 'ccc', '2'
), (
'', 'ddd', '3'
);
*/
?>

Vypise to spravne, cili netusim, kde mas chybu. Bud spatna hodnota v $group nebo v databazi group_ID. Nemas treba v db group_ID jako string? ' 3' je neco jineho jako '3'. Pro jistotu jsem pridal ke kodu i strukturu tabulek a data, ktera jsem tam vlozil.
SELECT `name_p` FROM `photos` WHERE `group_ID`=3;

Array
(
    [0] => Array
        (
            [name_p] => aaa
        )

    [1] => Array
        (
            [name_p] => bbb
        )

    [2] => Array
        (
            [name_p] => ddd
        )

)

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