Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP, MySQL: tulostetaan TEXT solusta vain pätkä tekstiä

merlin [25.10.2013 23:16:49]

#

Koitin kovasti googlailla, mutta joko minulla oli väärät hakusanat tai tästä ei oikeesti löydy mitään järkevää ohjeistusta vielä :D Haluaisin siis tulostaa tietokannasta tietystä sarakkeesta olevasta tekstistä vaikkapa ensimmäiset 15 sanaa.

"Tällainen esimerkki teksti tässä meneillään. Tämä on yli sen viisitoista, ja tästä tuleekin näkyviin vain osa teksistä jos ymmärrätte!"
= 19 sanaa

Tulostettaisiin vain:
"Tällainen esimerkki teksti tässä meneillään. Tämä on yli sen viisitoista, ja tästä tuleekin näkyviin vain..."

Miten saisin tämän siis toimimaan. Tällä hetkellä koodi, johon tämä pitäisi istuttaa, näyttää tältä:

$kysely = $yhteys->prepare("
SELECT *,
asiakkaat.nimi AS asiakkaan_nimi
FROM tapaukset
INNER JOIN asiakkaat
ON tapaukset.asiakas_id=asiakkaat.id
WHERE tapaukset.hoidettu='0'
ORDER BY tapaukset.kiireellisyys, tapaukset.lahetys_pvm
");
$kysely->execute(array($id));

while ($rivi = $kysely->fetch()) {

echo "<table class=\"taulukko\">";
echo "<tr><td class=\"kysyva\" width=\"30%\">Tilattu</td><td class=\"vastaava\" width=\"70%\">" . $rivi["lahetys_pvm"] . "</td></tr>";
echo "<tr><td class=\"kysyva\">Tilaaja</td><td class=\"vastaava\">";
if ($rivi["asiakas_id"] == 0) { echo $rivi["asiakas_nimi"];}
else { echo $rivi["asiakkaan_nimi"]; }
echo "</td></tr>";
echo "<tr><td class=\"kysyva\">Hevonen/hevoset</td><td class=\"vastaava\">" . $rivi["hevonen_nimi"] . ", <a href=\"" . $rivi["hevonen_url"] . "\" target=\"new\">sivut</a></td></tr>";
echo "<tr><td class=\"kysyva\">Kiireellisyys</td><td class=\"vastaava\">";
if ($rivi["kiireellisyys"] == 0) { echo "ei kiireellinen";}
else { echo "<font color=\"red\">kiireellinen</font>";}
echo "</td></tr><tr><td class=\"kysyva\">Oireet</td><td class=\"vastaava\">" . $rivi["oireet"] . "</td></tr>";
echo "</table><br />";
}

$rivi["oireet"] tietoa tulisi siis rajoittaa sanamäärän suhteen.

Lebe80 [25.10.2013 23:20:24]

#

No pilkot vaikka explodella (koska kaikki kunnon koodarit käyttävät explode-funktioita) merkkijonon 15. välilyönnin kohdalta, ja jos silloinkin on liian monta kirjainta tekstipätkässä, pätkäset suoraan X kirjaimen kohdalta.

merlin [25.10.2013 23:27:04]

#

Lebe80, aijai täällä mää nauran itselleni kun en tuota tullut edes ajatelleeksi vaikka vasta tuolla yhdellä nettikurssilla explodea harjottelin :D Mulla on vaan ongelmana nyt se, että millä mää saan ne ensimmäiset viisitoista valittua? Kun tämä on kaikki mitä sain aikaan.

$lyhenne = explode(" ", $rivi["oireet"]);

Oon niin käsi vielä koodauksessa että ei mitään rajaa.

Grez [26.10.2013 00:40:07]

#

No vaikka jotenkin tälleen

$palat = explode(" ", $rivi["oireet"], 16);
if (count($palat)==16) {
	//Yli 15 sanaa
	unset($palat[15]);
	$tulos = implode(" ", $palat) . "...";
} else {
	//Max 15 sanaa
	$tulos = $rivi["oireet"];
}

Metabolix [26.10.2013 00:40:11]

#

Tämä koodi ottaa 15 ensimmäistä sanaa. Koodi voi kuitenkin toimia väärin, jos teksti sisältää esimerkiksi rivinvaihtoja.

$teksti = "...";
$sanat = explode(" ", $teksti);
$alkusanat = array_slice($sanat, 0, 15);
$alku = implode(" ", $alkusanat);

// Sama kuin...
$alku = implode(" ", array_slice(explode(" ", $teksti), 0, 15));

Sanamäärässä on kuitenkin sellainen ongelma, että sanat voivat olla pitkiä tai lyhyitä. Merkkimäärä on usein hyödyllisempi. Siinä auttavat säännölliset lausekkeet. Alla ovat lausekkeet vähintään ja enintään tietylle merkkimäärälle; tietyissä erityistapauksissa (esim. jos teksti on liian lyhyt tai ei sisällä sopivaa katkaisukohtaa) määristä kuitenkin poiketaan.

$teksti = "...";
$alle_80_merkkia = preg_replace('/(.{1,80})(\\s|$).*/s', '$1', $teksti);
$yli_80_merkkia = preg_replace('/(.{80}.*?)(\\s|$).*/s', '$1', $teksti);

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta