Autor Zpráva
Terina
Profil *
Ahoj. Vypisuji obsah z DB (mysql) a mezi každým záznamem mám /. Oštřila jsem si aby lomítko bylo pouze pokud je více jak 1 záznam. Ale ještě bych potřebovala poradit jak ošetřit aby se lomítko už nepsalo po posledním záznamu z DB? Teď mi to vypíše např. : zlatá / červená / modrá /
No a zatím modrá už prostě nechci to lomítko...

while($arbarva = mysql_fetch_array($prbarva)){
            if($prbarvaPocet > 1){
            $zapis.="
            ".$arbarva[hodnota]." / 
            ";
        }}

Děkuji moc za radu
Ikki
Profil
$vysledek = rtrim($vypsany_obsah, ",");

By mohlo stačit.
Kajman
Profil
Ikki:
Druhý parametr by měl být spíše něco jako
" \t\n\r/"
Ikki
Profil
Omlouvám se, má chyba. Přehlédl jsem se. Díky za doplnění.
Terina
Profil *
Toto mi ale odebere prázdné znaky a nebo řetězec na konci, já ale chci dosáhnout abych ty údaje z DB měla oddělené lomítkem (/) ale při výpisu toho posledního údaje aby tam lomítko už nebylo.
V DB mám uloženo první řádek: zlatá
V DB mám uloženo druhý řádek: červená
V DB mám uloženo třetí řádek: modrá

a vypsat bych to chtěla takto: zlatá / červená / modrá


 while($arbarva = mysql_fetch_array($prbarva)){
            if($prbarvaPocet > 1)
              {
                $vysledek = rtrim($arbarva[hodnota], " \t\n\r/");
                $zapis.="$vysledek";
              }}

pokud použiju takto mám zápis: zlatá červená modrá
Terina
Profil *
Toto mi ale odebere prázdné znaky a nebo řetězec na konci, já ale chci dosáhnout abych ty údaje z DB měla oddělené lomítkem (/) ale při výpisu toho posledního údaje aby tam lomítko už nebylo.
V DB mám uloženo první řádek: zlatá
V DB mám uloženo druhý řádek: červená
V DB mám uloženo třetí řádek: modrá

a vypsat bych to chtěla takto: zlatá / červená / modrá


 while($arbarva = mysql_fetch_array($prbarva)){
            if($prbarvaPocet > 1)
              {
                $vysledek = rtrim($arbarva[hodnota], " \t\n\r/");
                $zapis.="$vysledek";
              }}

pokud použiju takto mám zápis: zlatá červená modrá
Kajman
Profil
Odstranění zbytečného oddělovače na konci má být až po cyklu
while($arbarva = mysql_fetch_array($prbarva)){
            $zapis.="
            ".$arbarva[hodnota]." / 
            ";
        }
$zapis = rtrim($zapis, " \t\n\r/");        
Terina
Profil *
Ale takto mi to vypíše pouze první údaj z DB a pak už nic


Zřejmě to tedy osekne hned za tím prvním lomítkem a mám potom vypsanou pouze první barvu


Tak ne osekne to jenom lomítko, ale vypisuje to jenom tu první barvu když si za cyklem vypíšu hodnotu bez rtrim, tak je zde pouze první barva s lomítkem
Kajman
Profil
Cyklus jsem použil Váš. Buď je chyba v něm, nebo v dotaze nebo v datech, ale nebude v řádku s rtrim, když to vypíše jednu barvu, i když rtrim zakomentujete.
Terina
Profil *
Když to vypisuji v cyklu tak vidím vše bez problému, ale jakmile proměnou vypíši mimo cyklus tak vidím pouze tu první, takže cyklus by měl být v pořádku ne?
Kajman
Profil
V uvedeném kódu nic v cyklu nevypisujete, jen rozšiřujete proměnnou. Napsala jste sem stejný kód, který zkoušíte?
blaaablaaa
Profil
Terina:
Máte v cyklu opravdu $zapis.= (i s tou tečkou před rovnítkem)?
Terina
Profil *
Máte pravdu v cyklu to nevypisuji, pouze přiřazuji data k dalším datům, proto ta tečka. Celkový výpis je až na konci za všemi cykly echo $zapis;

Zde je ořezaný kód pouze na ty barvy, když to mám až za tím cyklem tak vypíše pouze jednu barvu, když to dám do cyklu tak vypisuje vše:

$zapis='<?xml version="1.0" encoding="utf-8"?>';
$zapis.='<SHOP xmlns="http://www.zbozi.cz/ns/offer/1.0">';
$prProdukt=mysql_query("select * from ".$dbnazev."_produkty where nezobrazovat<1 and length(nazev)>0 order by id desc limit 10");
  while($ar=mysql_fetch_array($prProdukt)){
  list($ar[dodani_pocet_dnu])=@mysql_fetch_row(mysql_query("select dodani_pocet_dnu from ".$dbnazev."_produkty_sklad where id='$ar[sklad]' limit 1"));
    $prbarva = mysql_query("SELECT intelshop_produkty_parametry_barva.hodnota FROM intelshop_produkty_parametry_barva left join intelshop_produkty_parametry_barva_prirazeni on  intelshop_produkty_parametry_barva.id=intelshop_produkty_parametry_barva_prirazeni.hodnota where intelshop_produkty_parametry_barva_prirazeni.produkt='$ar[id]'");
    $prbarvaPocet=mysql_num_rows($prbarva);

    $zapis.="<SHOPITEM>";

    if ($prbarvaPocet > 0){
        $zapis.="
        <PARAM>
        <PARAM_NAME>Barva</PARAM_NAME>
        <VAL>";
        while($arbarva = mysql_fetch_array($prbarva))
            {
                $z="
                ".$arbarva[hodnota]." / 
                ";
            }
            $zapis.= rtrim($z, " \t\n\r/"); 
        $zapis.="
        </VAL>
        </PARAM>  
        ";
    }
$zapis.="</SHOPITEM>";
}
$zapis.="</SHOP>";
echo $zapis;
blaaablaaa
Profil
Terina:
Chtělo by to trochu zapracovat na čitelnosti kódu. Každopádně vy v cyklu si do proměnné $z uložíte barvu a v dalším kroku ji přepíšete.
Správně tedy takto:
$z = "";
while($arbarva = mysql_fetch_array($prbarva))
{
    $z .= $arbarva["hodnota"]." / ";
}
$zapis .= rtrim($z, " \t\n\r/"); 
Terina
Profil *
Děkuji moc toho jsem si nevšimla.

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