Beste,
Voor mijn script moet ik de laatste '100 characters' uit een db halen.
Nu ziet mijn database er zo even uit:
naam, email, bericht
Naam en email mogen beide meer dan 100 characters bevatten, maar bericht mag er maar 100 bevatten.
Weten jullie hoe ik dit het beste kan doen, en als het uberhaupt mogelijk is.
Alvast bedankt,
Robin
- Laatste 100 characters mysql
-
07-09-2010, 10:20 #1Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
Laatste 100 characters mysql
-
07-09-2010, 10:48 #2
- Berichten
- 297
- Lid sinds
- 15 Jaar
Wat wil je nu net bereiken? Wil je data invoeren in je database of uitvoeren uit je database?
Indien je wilt invoeren kan je met bvb php controleren of de lengte van de string max 100 karakters is en deze indien nodig afkappen.
Als je veld beperkt is tot 100 karakters vervolgens kan je er dus ook nooit meer dan 100 uithalen :D
-
07-09-2010, 10:58 #3Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
Bij het invoeren. Ik wil dan 100 tekens, en daarachter [lees meer...] en dat dan op een nieuwe pagina de hele tekst komt. Dat is al allemaal gelukt, ook heel erg simpel. Alleen de 100 tekens niet.
-
07-09-2010, 11:06 #4
- Berichten
- 7
- Lid sinds
- 15 Jaar
Ik neem aan dat je dan de eerste 100 tekens wilt hebben, in plaats van de laatste 100 tekens?
Op de pagina met de verkorte versie gebruik je dan een code als:
Code:<?php if( strlen($result['bericht']) > 100 ) { echo substr($result['bericht'], 0, 100); //Laat alleen de eerste 100 tekens zien } else { echo $result['bericht']; //Bericht is korter dan 100 tekens dus gewoon tonen. } ?>
Als je dat wilt voorkomen kun je bijvoorbeeld gebruik maken van deze functie: http://www.php.net/manual/en/function.substr.php#90724
-
07-09-2010, 11:13 #5Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
Ik gebruik idd ook html, ik ga het even proberen. Als ik het goed zie moet ik bij die van php
$len = 100 zetten
$text = omschrijving
robin
-
07-09-2010, 11:30 #6
- Berichten
- 7
- Lid sinds
- 15 Jaar
Ja dat klopt: echo substrws($text, 100); (En de functie natuurlijk even ergens plaatsen in je script, indien je dat nog niet gedaan had)
-
07-09-2010, 11:37 #7Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
Nu ik dit heb haalt die maar 100 tekens uit de db, maar dat moet ik bij ieder kopje hebben.
Ik heb een while voor de laatste gastenboekberichten, en daarvan wil ik de eerste 100 tekens laten zien per bericht
Weten jullie hoe ik dit het beste kan oplossen?
-
07-09-2010, 11:57 #8
- Berichten
- 7
- Lid sinds
- 15 Jaar
Binnen de while die functie gebruiken? Plaats je code van de while hier andere even. Dan kan ik je makkelijker helpen.
-
07-09-2010, 12:02 #9Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
Zo heb ik het momenteel uit zien:
<?php
/**
* Copyright WMwinkel *
* */
$sql = mysql_query("SELECT * FROM layouts");
while($show = mysql_fetch_object($sql)) {
$afbeelding = $show->afbeelding;
$naam = $show->naam;
$text = $show->omschrijving;
$id = $show->id;
echo '<div class="blok">
<div class="img"><a href="'.$afbeelding.'" rel="lytebox"><img src="'.$afbeelding.'" width="75px" height="75px" alt="'.$naam.'" /></a></div>
<div class="textblok">';
function substrws( $text, $len=130 ) {
if( (strlen($text) > $len) ) {
$whitespaceposition = strpos($text," ",$len)-1;
if( $whitespaceposition > 0 )
$text = substr($text, 0, ($whitespaceposition+1));
// close unclosed html tags
if( preg_match_all("|<([a-zA-Z]+)>|",$text,$aBuffer) ) {
if( !empty($aBuffer[1]) ) {
preg_match_all("|</([a-zA-Z]+)>|",$text,$aBuffer2);
if( count($aBuffer[1]) != count($aBuffer2[1]) ) {
foreach( $aBuffer[1] as $index => $tag ) {
if( empty($aBuffer2[1][$index]) || $aBuffer2[1][$index] != $tag)
$text .= '</'.$tag.'>';
}
}
}
}
}
return $text;
}
echo substrws($text, 130);
echo ' <a href="'.$domein.'/layouts_meer/'.$id.'.html">[lees meer...]</a></div>
</div>';
}
?>Laatst aangepast door Robin C : 26-01-2012 om 12:19
-
07-09-2010, 12:09 #10
- Berichten
- 7
- Lid sinds
- 15 Jaar
De functie kun je beter buiten de while loop laten:
Code:<?php function substrws( $text, $len=130 ) { if( (strlen($text) > $len) ) { $whitespaceposition = strpos($text," ",$len)-1; if( $whitespaceposition > 0 ) $text = substr($text, 0, ($whitespaceposition+1)); // close unclosed html tags if( preg_match_all("|<([a-zA-Z]+)>|",$text,$aBuffer) ) { if( !empty($aBuffer[1]) ) { preg_match_all("|</([a-zA-Z]+)>|",$text,$aBuffer2); if( count($aBuffer[1]) != count($aBuffer2[1]) ) { foreach( $aBuffer[1] as $index => $tag ) { if( empty($aBuffer2[1][$index]) || $aBuffer2[1][$index] != $tag) $text .= '</'.$tag.'>'; } } } } } return $text; } /* Script by: Robin Conjour * * Copyright WMwinkel * * */ $sql = mysql_query("SELECT * FROM layouts"); while($show = mysql_fetch_object($sql)) { $afbeelding = $show->afbeelding; $naam = $show->naam; $text = $show->omschrijving; $id = $show->id; echo '<div class="blok"> <div class="img"><a href="'.$afbeelding.'" rel="lytebox"><img src="'.$afbeelding.'" width="75px" height="75px" alt="'.$naam.'" /></a></div> <div class="textblok">'; echo substrws($text, 130); echo ' <a href="'.$domein.'/layouts_meer/'.$id.'.html">[lees meer...]</a></div> </div>'; } ?>
Laatst aangepast door Mark de Voogd : 07-09-2010 om 12:29
-
07-09-2010, 12:09 #11
- Berichten
- 289
- Lid sinds
- 16 Jaar
Je kan het ook gewoon in je query afhandelen i.p.v. met PHP zelf;
Zo zou het bv kunnen;
PHP Code:SELECT
naam,
email,
CASE WHEN (LENGTH(bericht) > 100) THEN
CONCAT(LEFT(RTRIM(bericht),100),'...')
ELSE
bericht
END bericht
FROM
berichten
Laatst aangepast door J. Buitenhuis : 07-09-2010 om 12:16
-
07-09-2010, 12:22 #12Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
@Mark :
Met jouw code krijg ik helaas een witte pagina.
@J. Buitenhuis:
Deze werkt goed, enkel doet die hem niet afmaken van geopende html tags zoals de <a href of de p tag.
-
07-09-2010, 12:44 #13
- Berichten
- 1.265
- Lid sinds
- 16 Jaar
Deze is echt een aanrader:
http://www.sitemasters.be/scripts/1/...tring_inkorten
Code:<?php /** * Functie om een string in te korten * * Deze funtie kort een string in en houd daarbij rekening met html tags. * Html tags nemen geen ruimte in in de gereturnde string en ze worden * ook niet afgebroken als de maximale lengte bereikt is. De lengte van * de ingekorte string en de string waarmee die beëindigt wordt kan zelf * worden bepaald. * * @author Rik Veenboer * @param string $data de string die verkort moet worden * @param int $length de lengte die de string moet krijgen * @param string $endString de string waarmee de verkorte string beëindigt wordt * @return string een string met de ingekorte $data **/ function shorten($data, $length = 20, $endString = '...') { // De regexes voor de open en close html tags $regex = array( 'open' => '/^\<[ ]*([a-z]+)[ ]*(?:[a-z]*[ ]*\=[ ]*\"[^\"\'<>]*\")*[ ]*(\/?)[ ]*\>$/', 'close' => '/\<[ ]*\/[ ]*%s+[ ]*\>/s' ); $short = ''; // De lengte van de nieuwe string is inclusief de puntjes op het einde behalve als de invoer al kort genoeg is $isShortString = strlen(strip_tags($data)) <= $length; $length -= $isShortString ? 0 : strlen($endString); $free = $length; // Elk teken afgaan totdat ze op zijn of totdat er geen meer nodig zijn for ($i = 0; $i < strlen($data) && $free > 0; $i++) { // Controleren of het huidige teken een < is en of er ook nog een > achter staat if ($data{$i} == '<' && ($pos = strpos($data, '>', $i + 1)) !== false) { // De open tag in een string zetten $open = substr($data, $i, ($pos - $i + 1)); // Controleren of de opentag geldig is if (preg_match($regex['open'], $open, $match)) { // Tags waarvan geen sluit tag bestaat detecteren if (isset($match[2]) && $match[2] == '/') { $short .= $open; // De pointer voorbij deze tag zetten en verder gaan $i += strlen($open) - 1; continue; } // Sluittag opzoeken if (preg_match(sprintf($regex['close'], $match[1]), substr($data, $pos), $match)) { $close = $match[0]; // De waarde tussen de open en sluit tag vandaan halen en apart parsen $value = shorten(substr($data, $pos + 1, strpos($data, $close, $pos) - $pos - 1), $free, ''); $free -= strlen($value); // Het geheel toevoegen aan de verkorte string $short .= $open . $value . $close; // Pointer voorbij de sluit tag zetten $i += strlen($open . $value . $close) - 1; } else { // Als er geen geldige sluit tag is gevonden voegen we open tag beveiligd toe $short .= htmlentities($open, ENT_QUOTES); $i += strlen($open) - 1; } // Ga verder met het volgende teken continue; } } // Het huidige teken beveiligd toevoegen $short .= htmlentities($data{$i}, ENT_QUOTES); $free--; } // Alleen puntjes toevoegen als de invoer langer dan de opgegeven lengte is return $short . ($isShortString ? '' : $endString); } ?>
-
07-09-2010, 13:07 #14
- Berichten
- 488
- Lid sinds
- 15 Jaar
Je kan ook "bericht" als `varchar` instellen met een max van 100 tekens. Dan gebeurt alles automatisch.
Groeten,
Tim
-
07-09-2010, 13:24 #15Particulier
- Berichten
- 2.202
- Lid sinds
- 15 Jaar
Dankzij het script van robin is het gelukt! hartelijk bedankt
@tim, dat gaat niet, dan heb je op de lees meer pagina niets ;)
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic