Autor Zpráva
Furling
Profil
Dobrý den,
chtěl bych poradit. Vypisuji si z databáze data na stránky do tabulky. První dva řádky vypíše bez chyby a u třetího řádku zahlásí chybu pak ale zase jede v pořádku. Nějak to nechápu, protože výpis mám ve smyčce, tak proč to hlásí chybu jen v jednom cyklu? Data jsou určitě v pořádku...
Tori
Profil
Můžete ukázat ten dotaz + cyklus, kde čtete data?
Furling
Profil
Tori:
include 'config.php';
  $link=mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
 
  mysql_select_db(SQL_DBNAME,$link);
  
  mysql_query("SET NAMES 'utf8'");
      $prikaz = "select id_pr, nazev, kategorie ,krat_popis, odkaz, prezdivka  from prispevky, uzivatele where autor=id"; 
      $table =  mysql_query($prikaz,$link);
      $pocet = mysql_num_rows($table);
          echo($pocet);
          echo('<table border="1px" width="100%">');
          echo('<tr>');
          echo("<td>");
          echo("id"); 
          echo("</td>"); 
          echo("<td>");
          echo("nazev"); 
          echo("</td>");
          echo("<td>");
          echo("kategorie"); 
          echo("</td>");
          echo("<td>");
          echo("popis"); 
          echo("</td>");
          echo("<td>");
          echo("odkaz"); 
          echo("</td>");
          echo("<td>");
          echo("autor"); 
          echo("</td>");
          echo('</tr>');
          for($i=0;$i<$pocet;$i++)
           {
            echo($i);
            $radek = @mysql_fetch_array($table, $i);
            echo(mysql_errno($link));
            echo('<form enctype="multipart/form-data" action="upravp.php" method="post">');
            echo('<tr>');
            echo("<td>");
            echo('<input type="text" name="id_pr" value="'.$radek["id_pr"].'" />');    
            echo("</td>"); 
            echo("<td>"); 
            echo('<input type="text" name="nazev" value="'.$radek["nazev"].'" />');    
            echo("</td>");  
            echo("<td>"); 
            echo('<input type="text" name="kategorie" value="'.$radek["kategorie"].'" />');    
            echo("</td>");   
           
           
            echo("<td>");
            echo('<textarea name="krat_popis">'.$radek["krat_popis"].'</textarea>');    
            echo("</td>"); 
           
           
            echo("<td>");
            echo('<input type="text" name="odkaz" value="'.$radek["odkaz"].'" />');  
            echo("</td>"); 
            echo("<td>");
            echo('<input type="text" name="prezdivka" value="'.$radek["prezdivka"].'" />');  
            echo("</td>"); 
            echo("<td>");
            echo('<input type="submit" name="aktualizovat" value="Aktualizovat" />');
            echo("</td>");  
            echo("<td>");
            echo('<input type="submit" name="odstranit" value="Odstranit" />');
            echo("</td>");  
            echo('</form>');
            echo('</tr>');
           }         

 echo('</table>');
Tori
Profil
Chyba je tady: $radek = @mysql_fetch_array($table, $i); - koukněte se do manuálu, druhý parametr rozlišuje, jestli funkce vrátí asoc.pole, číslované, nebo kombinaci obojího. Pokud vrátí jen číslované pole, logicky nefungují všechny řetězcové indexy.

Btw proč vypisujete HTML po kouskách místo celé dohromady?
Furling
Profil
Aha takže jestli to správně chápu, z nějakého důvodu to v tom třetím případě nevrací asociativní pole. Takže bych to měl napsat takle:mysql_fetch_array($table, MYSQL_ASSOC, $i) ? Nebo ten spůsob výpisu jakým to dělám nejde použít. Ve škole se učíme sql a moc daleko jsme se nedostali takže jsem takový samouk mysql...


hm..tak takle to taky nefunguje..sice nehlasí chybu ale nenačte to do těch inputů
Tori
Profil
Druhý parametr úplně vyhoďte, případně rovnou použijte $radek = mysql_fetch_assoc($table);
Furling
Profil
Napadlo mě tohle řešení:
if(isset($radek["id_pr"]))
{
//stejný způsob jakým jsem to dělal
}
else
{
//vypisovat přes číselné indexy
}

ALE to tvoje je jednodušší...
Takže díky moc už to vypisuje jak má. Díky tomu jsem i teď pochopil princip téhle funkce...
Tori
Profil
Furling:
Napadlo mě tohle řešení:
To je zbytečné, použijte to z [#6].

Já jsem např. _fetch_array v životě nepoužila, protože mi vadí, že může vracet různou strukturu pole v závislosti na nějakém parametru (= možný zdroj náhodných chyb). Neumím si představit situaci, kdy bych mohla chtít přepínat mezi číslovaným a asoc.polem - přece jsou i nějaké další závislosti, jiné části programu pracují s těmi daty, a těm je potřeba předávat jasně definovanou strukturu. Třeba print_r je z tohoto pohledu taky principielně špatně (dělá dvě různé věci), ale tam se to dá do jisté míry ospravedlnit rozlišením mezi produkčním a vývojovým prostředím (= ladicí hlášky zobrazit nebo ne).
Furling
Profil
Tak většinou kratší správně fungující kod je lepší. :) Díky moc za pomoc. Super že tu nemusím čekat nějak dlouho ale že odpověd na dotaz se dostaví v řádu minut,:) Co se ještě týče vypisování toho html po kouskách..potřebuji aby se mi to zobrazilo jen když je přihlášen...takže tam mám if...a moc jsem nepochopil jak funguje <?if()?>....<?elseif()?>...<?endif?>takže jsem to dal všechno do php no...
Tori
Profil
Furling:
Jen jsem byla zvědavá, proč jste to psal po kouskách, a ne třeba takhle:
echo '<table border="1px" width="100%">
  <tr>
    <td>id</td>
    <td>nazev</td>
    <td>kategorie</td>
    <td>popis</td>
    <td>odkaz</td>
    <td>autor</td>
  </tr>';
Kdyžtak se koukněte i na heredoc zápis řetězců.
Furling
Profil
:D No tak to asi proto, že mi to nikdo neukázal že to tak jde. :D Díky za tip.
Zechy
Profil
Tori:
Ono je prej údajně jedno jestli je to jedno dohromady nebo postupně, více výpisů se prý provede jako jeden při zpracování.
Furling
Profil
Zechy:
Myslím že měla na mysli, že bych se nemusel zdržovat neustálým vypisováním echa...:D
Tori
Profil
Zechy:
Zajímavé, máte odkaz na zdroj té informace? Jinak myslela jsem to jen kvůli přehlednosti (a taky 15x za sebou psát to samé, to je jak za trest po škole). :)
Zechy
Profil
Tori:
No, těžko odkážu na učitele prográmka :-), ale prej co si četl o vypisování, tak v každym programovacím jazyce to prý funguje tim stylem, že se pokud je output několikrát za sebou, tak se provede jako jeden.
peta
Profil
U php zalezi na nastaveni nebo pouziti ob_start. Obvykle se posila kazde echo hned uzivateli a brzdi cely program.
Davex
Profil
peta:
Obvykle se posila kazde echo hned uzivateli a brzdi cely program.
Už jsem ti jednou psal, že je to nesmysl. Definuj, jak často znamená „obvykle“.

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: