Toon posts:

[php] echo max aantal woorden

Pagina: 1
Acties:
  • 218 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik heb een scriptje, en uit de database zou ie alleen de zoveel eerste woorden uit een nieuwsbericht moeten halen.
Ik heb daarvoor dit scriptje, mede dankzij phpfreakz ed.
Ik dacht dat het zo aardig zou meoten kloppen.
Alleen als ik het script bekijk, krijg ik een geheel wit scherm, geen enkele foutmelding dus.
Dit is het scriptje:
PHP:
1
<?$query = "SELECT id, bericht, titel FROM nieuws ORDER BY id DESC LIMIT 0, 5"; $resultaat = mysql_query($query) or die ("query mislukt"); while ($obj = mysql_fetch_object($resultaat)){ $aantal = count(preg_split('/\s+/', $row['bericht']));     $max=25;     if ($aantal <= $max){print($row['bericht']); }     else{     $string = explode(" ", $row['bericht']);     $synopsis ="";     for ($i=0;$i<$max;$i++) {     $synopsis = $synopsis . " " . $string[$i];     } print $synopsis.".......";    } }?>

Verwijderd

is simpeler, split je newsitem gewoon op woorden met split :)

en dan de 1e zoveel woorden weer aanelkaar zetten :)

Verwijderd

Topicstarter
en hoe zou dat moeten dan?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Bovenstaande code zou moeten werken.

Zet er es error_reporting(E_ALL); voor en ga het regel voor regel debuggen.

Verwijderd

Topicstarter
Undefined variable: row in ====.php on line 11

Hmmzz dan zou dat met dat titel niet helemaal goed kloppen

$aantal = count(preg_split('/\s+/', $row['titel']));

Dat is vaag....lijkt mij, want de row bestaat wel?

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
PHP:
1
<?while ($obj = mysql_fetch_object($resultaat)){?>

Hier is het $obj en daarna wordt het opeens $row
PHP:
1
<?$aantal = count(preg_split('/\s+/', $row['bericht']));?>

Lijkt mij dat daar het probleem zit :?

[edit & off-topic]
TimD, we waren tegelijk :)
[/edit & off-topic]

Verwijderd

Op zondag 07 juli 2002 20:12 schreef PC_verslaafde het volgende:
Undefined variable: row in ====.php on line 11

Hmmzz dan zou dat met dat titel niet helemaal goed kloppen

$aantal = count(preg_split('/\s+/', $row['titel']));

Dat is vaag....lijkt mij, want de row bestaat wel?
je fetched hem als een object en gebruikt het als een array met de verkeerde naam
PHP:
1
<?while ($obj = mysql_fetch_object($resultaat)){ $aantal = count(preg_split('/\s+/', $row['bericht'])); ?>

==>
PHP:
1
<?while ($row = mysql_fetch_object($resultaat)){ $aantal = count(preg_split('/\s+/', $row['bericht'])); ?>

edit damn was der weer 1 eerder

Verwijderd

Topicstarter
Nu wordt het steeds vreemder want, zelfs met die error tekst erbij krijg ik een leeg scherm:
PHP:
1
<?$query = "SELECT id, bericht, titel FROM nieuws ORDER BY id DESC LIMIT 0, 5"; error_reporting(E_ALL);// Voer query uit $resultaat = mysql_query($query) or die ("query mislukt"); while ($row = mysql_fetch_object($resultaat)){ $aantal = count(preg_split('/\s+/', $row['bericht']));    $max=25;     if ($aantal <= $max){print($row['bericht']); }     else{     $string = explode(" ", $row['bericht']);     $synopsis ="";     for ($i=0;$i<$max;$i++) {     $synopsis = $synopsis . " " . $string[$i];     } print $synopsis.".......";    } }?>

Verwijderd

Topicstarter
Ik zit al van alles te proberen maar ik kom er echt niet uit.
Ik blijf een wit scherm houden, zelfs met error script.
Zeker weten dat zoals jullie aangaven dan deze regel goed was?

while ($row = mysql_fetch_object($resultaat))

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Debug versie van je code:
PHP:
1
<?$query = "SELECT id, bericht, titel FROM nieuws ORDER BY id DESC LIMIT 0, 5";$resultaat = mysql_query($query) or die ("query mislukt");while ($row = mysql_fetch_object($resultaat)) {$aantal = count(preg_split('/\s+/', $row['bericht']));$max=25;if ($aantal <= $max) {echo "If-statement 1";print($row['bericht']);} else {echo "Else van if-statement 1";$string = explode(" ", $row['bericht']);$synopsis = "";for ($i=0;$i<$max;$i++) {echo "For-loop 1, i = ".$i;$synopsis = $synopsis . " " . $string[$i];}print $synopsis.".......";}}?>

Kijk eens of hij deze echo's laat zien. Zo weet je zeker dat je if-else en for werkt.

Edit: klote [ php][/php functie hier, bij edit alles op 1 lijn gooien :( |:( :r
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$query = "SELECT id, bericht, titel FROM nieuws ORDER BY id DESC LIMIT 0, 5";
$resultaat = mysql_query($query) or die ("query mislukt");
while ($row = mysql_fetch_object($resultaat)) {
$aantal = count(preg_split('/\s+/', $row['bericht']));
$max=25;
if ($aantal <= $max) {
echo "If-statement 1";
print($row['bericht']);
} else {
echo "Else van if-statement 1";
$string = explode(" ", $row['bericht']);
$synopsis = "";
for ($i=0;$i<$max;$i++) {
echo "For-loop 1, i = ".$i;
$synopsis = $synopsis . " " . $string[$i];
}
print $synopsis.".......";
}
}
?>

Verwijderd

Topicstarter
hij laat er inderdaad 5 zien

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Raar probleem dit. Je krijgt dus geen For-loop echo te zien (want anders heb je minstens 25 echo's). Klopt print($row['bericht']); wel?

Verwijderd

Topicstarter
hoe bedoel je of dat klopt?
De naam van het veld, bericht klopt gewoon

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Nou ik bedoel dus of die überhaupt wel iets zou printen (werk nooit met objecten in PHP, gebruik altijd mysql_fetch_row).

Edit 1: heb je fout al gevonden. Je gebruikt mysql_fetch_object, maar werkt volgens mysql_fetch_array.
Het is dus print($row->bericht); ipv print($row['bericht']);
Je kunt ook mysql_fetch_array gebruiken natuurlijk ;)

Edit 2:
Op zondag 07 juli 2002 23:10 schreef PC_verslaafde het volgende:
ik snap het niet zo meer eigelijk.
Ze hebben net deze regel aangepast:
while ($row = mysql_fetch_object($resultaat)){

Zonder t scriptje met dat tellen liet ie idd de laatste berichten zien.
Huh? Dus het werkte al die tijd wel?

MSN me anders ff op loeffen@hotmail.com

Verwijderd

Topicstarter
Zou je het scriptje mischien even kunnen posten?
Want moet ik het nu ook veranderen, bij de eerste row?

En hij geeft al een error aan als ik het verander zoals jij aangeeft

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$query = "SELECT id, bericht, titel FROM nieuws ORDER BY id DESC LIMIT 0, 5";
$resultaat = mysql_query($query) or die ("query mislukt");
while ($row = mysql_fetch_object($resultaat)) { // Methode 1
while ($row = mysql_fetch_array($resultaat)) { // Methode 2
$aantal = count(preg_split('/\s+/', $row->bericht)); // Methode 1
$aantal = count(preg_split('/\s+/', $row['bericht'])); // Methode 2
$max=25;
if ($aantal <= $max) {
print($row->bericht); // Methode 1
print($row['bericht']); // Methode 2
} else {
$string = explode(" ", $row->bericht); // Methode 1
$string = explode(" ", $row['bericht']); // Methode 2
$synopsis = "";
for ($i=0;$i<$max;$i++) {
$synopsis = $synopsis . " " . $string[$i];
}
print $synopsis.".......";
}
}
?>

Als je methode 1 kiest, regels met methode 2 wegcommenten (en andersom).

Edit: probleem is opgelost volgens methode 1. Iedereen bedankt voor de hulp :D

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 02-09 09:38
Ik gebruik voor dit soort dingen gewoon een scriptje dat zoekt naar de locaties van spaties in de string, en met een if-statement kun je dan precies opgeven bij welk aantal spaties hij de locatie moet nemen. Vervolgens de string knippen met substr() en voila je hebt precies dat aantal woorden. Scheelt aardig wat lijnen als ik de scriptjes hier zie!

  • Grum
  • Registratie: Juni 2001
  • Niet online
PHP:
1
<?print implode(' ', array_splice(split('\s+', $theString), 0, 25));?>

....

Verwijderd

Topicstarter
Het werkt al op de manier methode 1 van FlamerX :Y)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

FlamerX:
Gebruik liever mysql_fetch_assoc.

mysql_fetch_array gooit namelijk voor zowel numerieke als named indexen de veldwaarden in de array.

vb:
code:
1
2
3
4
$q = "SELECT a,b FROM table";
$res = mysql_query ( $q );

$arr = mysql_fetch_array ( $res );

Nu heb je zowel $arr [ 0 ] als $arr [ 'a' ]. (en bevatten dezelfde waarde). Als je dan eens een keer een foreach gebruikt met een array die je met mysql_fetch_array hebt binnengehaald, dan vraag je je eerst een halfuur af, waarom hij nou alles 2x langsgaat :+

en mysql_fetch_assoc is een pietsie sneller

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 02-09 09:38
Op maandag 08 juli 2002 08:39 schreef Grum het volgende:

_code_
Jahjah dat had ik ook wel gezien maar toch gebruik ik een andere methode zonder de arrays... zoveel scheelt het niet maar goed kvond dat makkelijker.

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
drm, bedankt voor het advies :)
Gebruik zelf nooit fetch_object of array, altijd fetch_row. Wou hier dus ook alleen ff een voorbeeld geven (en mogelijke oplossing). En die 2 ns snelheidswinst merk ik nu toch niet :+

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

FlamerX:
die 2 ns snelheidswinst merk ik nu toch niet :+
Da's waar, en daarom zei ik 't ook heel zachtjes :*
't is soms handig om te weten :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Op maandag 08 juli 2002 09:47 schreef drm het volgende:
FlamerX:
Gebruik liever mysql_fetch_assoc.

mysql_fetch_array gooit namelijk voor zowel numerieke als named indexen de veldwaarden in de array.

vb:
code:
1
2
3
4
$q = "SELECT a,b FROM table";
$res = mysql_query ( $q );

$arr = mysql_fetch_array ( $res );

Nu heb je zowel $arr [ 0 ] als $arr [ 'a' ]. (en bevatten dezelfde waarde). Als je dan eens een keer een foreach gebruikt met een array die je met mysql_fetch_array hebt binnengehaald, dan vraag je je eerst een halfuur af, waarom hij nou alles 2x langsgaat :+

en mysql_fetch_assoc is een pietsie sneller
Praat me dr niet van :( |:(

Toen ik eenmaal de variabele MYSQL_NUM of MYSQL_ASSOC had meegegeven werkte het natuurlijk wel; mysql_fetch_assoc() is natuurlijk weer korter, precies wat drm zoekt :+
Pagina: 1