Nur bestimme Anzahl der Wöter anziegen?
Claudia
- php
Hi,
hab da ein Problem, ich lass meine Texte aus einer Datenbank auslesen. Jetzt wollte ich eine erweiterung machen, dass ich nur die ersten angenommen 5 Wörter ausgeben lasse und dann kommt >>< mehr und dann geht ein PopUp auf. Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.
hier mal der Code wie ich das mache:
<?php // aus der DB auslesen
$sql = "SELECT
id,
SUBSTRING_INDEX(inhalt
, ' ', 50)
FROM
Test
";
$return = mysql_query($sql) OR die(mysql_error());
?>
<?php
while($data = mysql_fetch_assoc($return))
{
?>
</p>
<blockquote>
<p><?php echo $data['inhalt']; ?><br>
<a href="details.php?id=<?php echo $data['id']; ?>" onclick="window.open('details.php?id=<? echo $data['id']; ?>', 'confirm', 'width=800, height=600'); return false;">..Mehr Lesen</a> </p>
</blockquote>
</body>
</html>
<?php
}
?>
Gruß Claudia
Hi,
hab da ein Problem, ich lass meine Texte aus einer Datenbank auslesen. Jetzt wollte ich eine erweiterung machen, dass ich nur die ersten angenommen 5 Wörter ausgeben lasse und dann kommt >>< mehr und dann geht ein PopUp auf. Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.
Und was heißt "geht nicht"?
Fehlermeldung?
<?php
while($data = mysql_fetch_assoc($return))
{
?>
[...]
</body>
</html>
<?php
}
?>
Wenn Du mehrere Datensätze aus der Datenbank ausliest, hast Du dann auch mehrfach </body></html> im Dokument stehen, was natürlich unsinnig ist.
Also die beiden tags raus aus der Schleife!
cu,
Andreas
Hallo Andreas,
Und was heißt "geht nicht"?
Fehlermeldung?
Na ja das schlimme ist ja es kommen keine Fehlermeldungen es sieht nur so aus:
..Mehr Lesen
Aber es müssten doch vor dem mehr lesen noch die 50 Wörter stehen. Und das zeigt er mich nicht an :-(
Wenn Du mehrere Datensätze aus der Datenbank ausliest, hast Du dann auch mehrfach </body></html> im Dokument stehen, was natürlich unsinnig ist.
Also die beiden tags raus aus der Schleife!
Hab das gerade mal geamcht das habe ich vorhin ganz vergessen. Danke für den Tipp :-)
Gruß Claudia
Hallo Claudia!
Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.
Müssen es wirklich 50 Wörter sein?
Nimm doch einfach 250 oder 500 Zeichen oder sowas, das sollte für Deinen Zweck doch auch genügen.
MfG
Götz
Hallo Götz,
Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.
Müssen es wirklich 50 Wörter sein?
Nimm doch einfach 250 oder 500 Zeichen oder sowas, das sollte für Deinen Zweck doch auch genügen.
Nöö es müssen nicht 50 Wörter sein du hast RECHT es könnte auch 250 Zeichen sein oder so. Wie müsste ich das dann machen. Kannst du mir das mal eben sagen ?
Gruß Claudia
PS: Mich wurde dennoch interesieren warum das so nicht geht wie ich das geamcht habe....
Hi,
Nöö es müssen nicht 50 Wörter sein du hast RECHT es könnte auch 250 Zeichen sein oder so. Wie müsste ich das dann machen. Kannst du mir das mal eben sagen ?
REGEX!
Bis denne
Botix
Hallo Botix,
REGEX!
Hmm was meinst du denn mit dem Wort. Heißt so der Befehl, dass ich nur 250 Zeichen auslesen kann ? Wenn ja wie muss den denn anwenden? Den habe ich wirklich noch nie gehört :-(
Gruß Claudia
Hi Claudia,
Hmm was meinst du denn mit dem Wort.
Reguläre Ausdrücke (ja ich weiss is nen bissl tricky).
Guckst du hier: http://de3.php.net/manual/de/ref.regex.php
»»Heißt so der Befehl, dass ich nur 250 Zeichen auslesen kann?
ja/nein kann man damit auch...
Wenn du nur 250 Zeichen anzeigen möchtest würde ich das lieber in das SQL-Statement reinschreiben. Irgendwie so ..[LEFT(bla,250)]
Bis denne
Botix
Hallo Claudia!
Nöö es müssen nicht 50 Wörter sein du hast RECHT es könnte auch 250 Zeichen sein oder so. Wie müsste ich das dann machen. Kannst du mir das mal eben sagen ?
Ganz einfach mit SUBSTRING() (bei Dir wohl z.B. SUBSTRING(feldname, 0, $laenge), wobei ich nicht weiß ob MySQL hier bei 0 oder 1 anfängt zu zählen).
Siehe auch MySQL Manual | 12.3 String Functions.
PS: Mich wurde dennoch interesieren warum das so nicht geht wie ich das geamcht habe....
Das kann ich so nicht sagen, dafür wäre es praktisch mehr über die auftretenden Fehler zu wissen.
Also was sagt MySQL zu Deiner Anfrage, gibts einen Fehler oder nicht?
Was sagt PHP genau? Setz dafür am besten das error_reporting auf E_ALL.
MfG
Götz
Hallo Götz,
Das kann ich so nicht sagen, dafür wäre es praktisch mehr über die auftretenden Fehler zu wissen.
Also was sagt MySQL zu Deiner Anfrage, gibts einen Fehler oder nicht?
Was sagt PHP genau? Setz dafür am besten das error_reporting auf E_ALL.
das ist ja gerade das Problem, es kommt keine Fehlermeldung. Es geht auch der Link das sieht also so aus:
.... mehr lesen
aber davor müssten doch noch die 50 Wörter stehen bzw, jetzt dann die 250 Zeichen das verstehe ich einfach nicht warum er mir das nicht ausgibt :-(
Gruß Claudia
Hallo Claudia!
das ist ja gerade das Problem, es kommt keine Fehlermeldung. Es geht auch der Link das sieht also so aus:
Naja, es kommt keine Fehlermeldung, weil Du keine anzeigen läßt.
Mach mal am Anfang des Skripts:
error_reporting(E_ALL);
Siehe auch PHP Manual: Errors and Logging: error_reporting().
Bei der SQL-Abfrage an sich scheint ja kein Fehler aufzutreten, oder sind auch die ids in den Links nicht korrekt gesetzt?
Laß Dir doch einfach den $data-Array mit var_dump() oder so noch zusätzlich mal ausgeben. Vielleicht fällt Dir da ja irgendwas auf (siehe auch PHP Manual: Variables: var_dump()).
MfG
Götz
Hallo Götz,
Naja, es kommt keine Fehlermeldung, weil Du keine anzeigen läßt.
Mach mal am Anfang des Skripts:
error_reporting(E_ALL);
So hab den error Befehl mal eingefügt und das kommt jetzt. Nur ich versthe nicht ganz genau was der damit meint :-(
Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41
..Mehr Lesen
Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41
..Mehr Lesen
Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41
..Mehr Lesen
Gruß Claudia
Hallo Claudia!
So hab den error Befehl mal eingefügt und das kommt jetzt. Nur ich versthe nicht ganz genau was der damit meint :-(
Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41
Das dachte ich mir schon.
Wie heißt denn Dein Feld mit den Inhalten in der Datenbank? - Wobei, mir fällt grad auf woran es vermutlich hängt:
Dein SQL-Befehl ist noch falsch. Ändere ihn mal auf
$sql = "SELECT
id,
SUBSTRING(inhalt
, 1, 250) as inhalt_
FROM
Test";
Und gib dann $data['inhalt_'] aus.
Das sollte klappen.
Das Problem ist, daß Du dem Ergebnis von Deiner SUBSTRING-Operation noch keinen "Namen" zugeordnet hast, und inhalt selbst nicht selektiert wurde.
MfG
Götz
Hallo Götz,
Das dachte ich mir schon.
Wie heißt denn Dein Feld mit den Inhalten in der Datenbank? - Wobei, mir fällt grad auf woran es vermutlich hängt:
Dein SQL-Befehl ist noch falsch. Ändere ihn mal auf
$sql = "SELECT
id,
SUBSTRING(inhalt
, 1, 250) as inhalt_
FROM
Test";Und gib dann $data['inhalt_'] aus.
Das sollte klappen.Das Problem ist, daß Du dem Ergebnis von Deiner SUBSTRING-Operation noch keinen "Namen" zugeordnet hast, und inhalt selbst nicht selektiert wurde.
Hey cool das geht so. Kansnt du mir jetzt mal wenn du Zeit hast das erklären was ich hier falsch gemacht habe, dass ich das nächste mal nicht wieder mache. So wie du das gerade geschrieben habe, habe ich das leider nicht so ganz verstanden.
Liebe Grüße,
Claudia
Hallo Claudia!
SUBSTRING(
inhalt
, 1, 250) as inhalt_
Kansnt du mir jetzt mal wenn du Zeit hast das erklären was ich hier falsch gemacht habe, dass ich das nächste mal nicht wieder mache.
Also, das Problem war, daß die MySQL-Funktion ihr Ergebnis grundsätzlich nicht ausgibt. Will man auf das Ergebnis so einer Funktion wie hier z.B. SUBSTRING zugreifen, muß man natürlich auch dafür sorgen, daß das Ergebnis von der Datenbank als "Feld" zurückgegeben wird.
Und genau das kann man mittels "FUNKTION AS feldname" machen.
Das steht ja in einem SELECT-Statement, zum besseren Verständnis erweitere ich das Beispiel also zu einem vollständigen SELECT.
Unser Befehl lautet dann: SELECT SUBSTRING(bla, 1, 42) AS blub FROM muh.
In diesem Befehl bezeichnet bla das Feld, von dem wir einen Teilstring haben wollen. Die Datenbank aus der wir das Feld holen heißt muh. Doch das wirklich interessante ist blub, denn durch "AS blub" legen wir fest, daß das Ergebnis von SUBSTRING(bla, 1, 42) uns von der Datenbank mit dem Bezeichner blub zurückgegeben werden soll.
Man kann den Befehl auch direkt übersetzen, was dann in etwa folgendes ergibt: WÄHLE DEN_TEILSTRING(des Feldes bla, ab Position 1, mit Länge 42 Zeichen) ALS blub AUS DER DATENBANK muh AUS.
Du gibst dem Ergebnis der Operation die Du ausführst also einen Bezeichner, auf den Du dann via PHP wie auf jedes andere Feld das Du selektierst zugreifen kannst (AS kann man auch auf einfache Felder anwenden, um sie anders zu benennen, oder auf Datenbanken usw. - doch dazu schreib ich mal nichts mehr, ich will Dich ja nicht verwirren).
Ich hoffe, das war halbwegs verständlich und technisch nicht zu unpräzise ;)
MfG
Götz
Hallo Götz
Ich hoffe, das war halbwegs verständlich und technisch nicht zu unpräzise ;)
Außer, dass du überall da, wo eine Tabelle gemeint war, von Datenbank sprachst.
Ansonsten eine gute, ausführliche Abhandlung für den Einsteiger.
Tschö, Auge
Hallo Auge!
Außer, dass du überall da, wo eine Tabelle gemeint war, von Datenbank sprachst.
Au stimmt, da hab ich mich vertan, vor lauter Datenbank-Problem ;)
Danke für den Hinweis.
MfG
Götz
Hall an alle,
OK das Problem ist behoben. Danke für die Hilfe. Ich hoffe das ich heute kein Problem mehr habe.
Liebe Grüße,
Claudia