[PHP]Ucinanie znaków

2010-12-11 15:31
0

Witam,
Posiadam formularz dodawania rozporządzenia. Kiedy dodaję rozdział dotyczący danego rozporządzenia to jego nazwy są często bardzo długie. Np. Służba wojskowa żołnierzy zawodowych i żołnierzy pełniących służbę kandydacką w razie ogłoszenia mobilizacji, ogłoszenia stanu wojennego i w czasie wojny.
Znalazłem funkcję ucinającą znaki, tylko mam problem z jej zastosowaniem.

dodawanie_rozporzadzenia.php

<?php
session_start();
include_once("funkcje.php");

//print_r($_POST);
//print_r($_FILES);

if($_SESSION['zalogowany']>0){

if($_SESSION['idTypUser']<>1){

include_once("blad_wejscia.php");

}else{
 $link=polacz();
echo $nazwa=$_POST['nazwa'];
$dziennik=$_POST['dziennik'];
$data_wejscia=$_POST['data_wejscia'];
$id_rozdzial=$_POST['id_rozdzial'];
echo $plik=$_FILES['plik_upload']['name'];

 if (strstr($_POST['dodaj'],'zapisz')!==FALSE){
$zapisz="insert into rozporzadzenia values(null,'$nazwa','$dziennik','$data_wejscia',$id_rozdzial,'$plik')";
 $wynik = mysql_query($zapisz);
echo $id = mysql_insert_id($link);
         }
 $f = $_FILES['plik_upload'];
 IF(isset($f['name']))
    {
copy($f['tmp_name'], 'tymcz/'.$f['name']);
//lub
rename($f['tmp_name'], 'tymcz/'.$f['name']);
//lub
move_uploaded_file($f['tmp_name'], 'tymcz/'.$f['name']);
    }
form();

echo '

<div id="content-wrap">
        <div id="main">';

polacz();
 $id=mysql_query("SELECT * FROM rozdzial");

echo '

<form enctype="multipart/form-data" action="" method="POST">

<table>

<tr>
<td>nazwa rozporządzenia</td>
<td><input type="text" name="nazwa"></td>
</tr>
<tr>
<td>dziennik ustaw</td> <td><input type="text" name="dziennik"></td>
</tr>
<tr>
<td>data wejścia<font color=red size=3>*</font></td><td><input type="text" name="data_wejscia"></td>
</tr>
</td>
</tr>
<tr>
<td>rozdzial</td>
<td><select name="id_rozdzial">';
while($nazwa=mysql_fetch_array($id)){

echo '<option selected="selected" value="'.$nazwa[0].'">'.$nazwa[1].'</option>';

}

echo '</select><pre>';
//print_r($_POST);
echo '<HR>';
//print_r($_FILES);
echo '</pre><HR>';
echo '<input type="file" size="32" name="plik_upload" value="">';
echo '

<tr>
<td>

</tr>
<tr>
<td>
<input class="button" type="submit" name="dodaj" value="zapisz">
</td>

<td>

</td>
</tr>
</table>
</form>

</div>

<div id="sidebar">
 <h1>Menu</h1>
 <ul class="sidemenu">
 <li><a href="index.php?p=900">Strona Główna</a></li>
                <li><a href="user.php">Pokaż użytkowników</a></li>
</div>

';
                 // ID dodanego rekordu    
echo strlen($_POST['plik'])+1;

if(strstr($_POST['dodaj'],'zapisz')!==FALSE&&$id>0){echo "Rekord o ID: ".$id." zosta?? dodany poprawnie";}elseif(strstr($_POST['dodaj'],'zapisz')!==FALSE){echo "B??d nie udalo si? doda? nowego rekordu";} 

stopka();

    }
}else{
include_once("login.php");
}
?>

f_utnijtekst.php

<?php

function przytnijTekst($tekst, $iloscZnakow, $zakonczenie = '...') {

    //jeśli tekst jest dłuższy od określonej ilości znaków dokonujemy modyfikacji
    if(strlen($tekst) > $iloscZnakow) {

        //ilość znaków pomniejszamy o ilość znaków końcówki dopisywanej na koniec tekstu
        $iloscZnakow -= strlen($zakonczenie);

        //z przesłanego tekstu wycinamy tekst o określonej ilości znaków
        $tekst = substr($tekst, 0, $iloscZnakow);

        //odwracamy tekst, tak że jest wyświetlany od końca
        $tekst = strrev($tekst);

        //funkcja zwraca tekst po pierwszym wystąpieniu spacji, co zabezpiecza nas 
        //przed wyświetleniem tylko kawałka wyrazu
        $tekst = strstr($tekst, ' ');

        //gdy ciąg już jest prawidłowo przycięty odwracamy tekst ponownie
        $tekst = strrev($tekst);

        //usuwamy spacje z początku i końca tekstu
        $tekst = trim($tekst);

        //na sam koniec doklejamy końcówkę
        $tekst .= $zakonczenie;
    }

    return $tekst;
}

$tekst = 'Oto pierwszy testowe zdanie, które będziemy ograniczać naszą nową wypasioną funkcją.';

echo przytnijTekst($tekst, 45);
//zostanie wyświetlone: Oto pierwszy testowe zdanie, które...

?>

Pozdrawiam

edytowany 1x, ostatnio: kmpl, 2010-12-11 15:42
Ale wlasciwie w czym tkwi problem? Z postu jasno nie wynika co dokladnie jest problemem. - Adam Boduch 2010-12-11 16:30

Pozostało 580 znaków

2010-12-11 23:21
0

Nie wiem w którym miejscu kodu mam zastosować funkcję ucinania zbyt długich tekstów.
Nazwy rozdziałów, które wprowadzam z listy wyboru (z bazy Mysql) są długie, np. //Służba wojskowa żołnierzy zawodowych i żołnierzy pełniących służbę kandydacką
w razie ogłoszenia mobilizacji, ogłoszenia stanu wojennego i w czasie wojny//

Pozostało 580 znaków

2010-12-12 00:22
Gck
0

Rozumiem, że chodzi Ci o skrócenie wyświetlanych nazw na liście, więc

 while($nazwa=mysql_fetch_array($id)){

echo '<option selected="selected" value="'.$nazwa[0].'">'.przytnijTekst($nazwa[1], 666).'</option>';

}
edytowany 1x, ostatnio: Gck, 2010-12-12 00:23

Pozostało 580 znaków

2010-12-12 11:49
0

Wielkie dzięki. O to właśnie mi chodziło.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0