Anonymní profil Jarda – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jarda – Programujte.comAnonymní profil Jarda – Programujte.com

 

Příspěvky odeslané z IP adresy 212.79.106.–

Jarda
PHP › Diakritika neodešle formulář
29. 9. 2019   #384353

Děkuji za rady, ale šlo především o to, že v novější verzi PHP došlo ke změně defaultního nastavení kódování funkce htmlspecialchar.

Pokud by někdo měl stejný problém je třeba definovat kódování přímo takto: 

   $message = htmlspecialchars($message, ENT_QUOTES,'ISO-8859-1');
Jarda
PHP › Diakritika neodešle formulář
27. 9. 2019   #384346

Vypadá to že htmlspecialchars jaksi vyšoupne i diakritiku :-/

  if((strlen($message) > $max) && ($max != '')){
   $message = 'Tento příspěvek přesáhl '.$max.' znaků, proto byl zkrácen!'.substr(htmlspecialchars($message, ENT_QUOTES), 0, $max).'...';
  } else {
    $message = htmlspecialchars($message, ENT_QUOTES);
  }
Jarda
PHP › Diakritika neodešle formulář
27. 9. 2019   #384344

Tak problém byl v tomto řádku. Proč ale neprošla diakritika mi jasné není.

 if(in_array(Censore($mess->message,$config['gbook']['message_max']),mysql_fetch_array($exist))) {echo '<h2 class="false">3Příspěvek již existuje</h2>'.$nl; break;}
            $mess->message = Censore($mess->message,$config['gbook']['message_max']);	//Zkrácení příspěvku
Jarda
PHP › Diakritika neodešle formulář
27. 9. 2019   #384343

Zkusil jsem překopat databázi i kódování na webu na UTF8 a bohužel problém přetrvává :-(.

Dump proměnných vyhodil toto:

 Text příspěvku neobsahuje diakritiku:

object(Message)#1 (15) { ["table"]=> string(7) "diskuse" ["db"]=> resource(13) of type (mysql link persistent) ["count"]=> int(2264) ["id"]=> NULL ["name"]=> string(5) "Jarda" ["mail"]=> string(0) "" ["web"]=> string(0) "" ["message"]=> string(4) "test" ["date"]=> string(19) "2019-09-27 20:40:43"

Text příspěvku s diakritikou:

object(Message)#1 (15) { ["table"]=> string(7) "diskuse" ["db"]=> resource(13) of type (mysql link persistent) ["count"]=> int(2265) ["id"]=> NULL ["name"]=> string(5) "Jarda" ["mail"]=> string(0) "" ["web"]=> string(0) "" ["message"]=> string(9) "test ščřž" ["date"]=> NULL
Jarda
PHP › Diakritika neodešle formulář
25. 9. 2019   #384328

Děkuji za reakci. Do stránky diskusního fóra mám includovaný následující script kde je ošetřené i kódování ale i přesto to nefunguje.

<?php
$dbserver = "";
$dblogin = "";
$dbheslo = "";
$dbnazev = "";


$db = mysql_connect($dbserver, $dblogin, $dbheslo);
mysql_select_db($dbnazev, $db);
mysql_query("SET NAMES 'cp1250'");
?>
Jarda
PHP › Diakritika neodešle formulář
25. 9. 2019   #384326

Hezký den,

s přechodem na nový webhosting se objevil zajímavý problém s češtinou ve formuláři diskusního fóra. A to sice, když použiji v některém poli formuláře diakritiku, tak se zpráva vůbec neodešle do databáze (resp odešle se prázdná). Když diakritiku nepoužiji, zpráva se odešle naprosto v pořádku. To platí jak o textu zprávy tak o jménu přispěvatele. Kódování používám na stránce i v databázi CP1250. Vím, že to je splácanina, ale jsem amatér a dříve mi to fungovalo. V čem může být prosím problém? Děkuji.

 Formulář:

<form method="post" action="<?php echo $phpself; ?>" name="formular">
<input type="hidden" name="action" value="<?php echo $action; ?>" />
<?php echo $frmappend.$nl; ?>


<table border="0">


<input type="hidden" name="name" size="50"<?php if($config['gbook']['name_max'] != '') echo ' maxlength="'.$config['gbook']['name_max'].'"'; ?> value="<?php echo whatPrint($name,'prezdivka',''); //if($_SESSION['name'] != '') echo '" disabled="disabled'; ?>" />


<tr class="left">
  
  <td><textarea name="message" cols="45" rows="4" onkeypress="javascript:count(<?php echo $pocetznaku; ?>);" onkeyup="javascript:count(<?php echo $pocetznaku; ?>);"><?php echo $message; ?></textarea><br /></td>
</tr>
<?php if($config["gbook"]["use_check"] == true && !$loggeduser){	//Obrázek s eísly ?>

<?php } ?>

<tr>

  <td class="center">
<?php echo vypisSmajly($t_smajly,$g_smajly); ?>
  </td>
</tr>

  
  <td class="center">
<a href="javascript:replace('b');" title="Formátovací značky pro tučný text" class="gbsmall" name="b">TUČNĚ</a>&nbsp;&#124;
<a href="javascript:replace('i');" title="Formátovací značky pro kurzívu" class="gbsmall" name="i">KURZÍVA</a>&nbsp;&#124;
<a href="javascript:replace('u');" title="Formátovací značky pro podtržený text" class="gbsmall" name="u">PODTRŽENÉ</a>
<div style="font-size: 11px;">text napište mezi tagy v hranatých závorkách</div>

  </td> <tr>
  
  <td class="center">
<input type="submit" value=" Odeslat " onclick="setCookie('<?php echo $config["gbook"]["cookie_expire"]; ?>');" /> 
<input type="reset" value="Vymazat" />
<input type="button" onclick="javascript:location.reload();" value=" Obnovit " /> 
</td>
</tr>
</table>



</form>

Zpracování formuláře:

<?php
switch ($_POST['action']){
  case 'edit':	//Úprava příspěvku
    if($loggeduser){	//Ověří uživatele při úpravě příspěvku
	  if(is_numeric($_POST['id'])){
        $mess->GetOne($_POST['id']);	//Načte upravovaný příspěvek z databáze
        $page = $_POST['page'];
        $q = $_POST['q'];
        $action = 'update" />'.$nl.'<input type="hidden" name="id" value="'.$_POST['id'];
        $add = 1;						//Zobrazí formulář z vyplněnými daty
        $name = $mess->name;
        $mail = $mess->mail;
        $web = $mess->web;
        $message = unCensore($mess->message);
      } else {
        echo '<h2 class="false">Nešlo upravit příspěvek</h2>Nejsi hacker?'.$nl;
        break;
      }
    }
    break;

  case 'delete':	//Vymazání příspěvku
    if($loggeduser){
      if($mess->Delete($_POST['id'])){
        echo '<h2 class="true">Příspěvek byl vymazán.</h2>'.$nl;
      } else {
        echo '<h2 class="false">Příspěvek nebyl vymazán!</h2>'.$nl;
      }
    }
    break;

  case 'insert':	//Přidání příspěvku
    $mess->name = trimSlash($_POST['name']);	//Získání údajů
    $mess->mail = trimSlash($_POST['mail']);
    $mess->web = trimSlash($_POST['web']);
    $mess->message = $_POST['message'];
    $exist = $mess->Get(0,$show,$mess->name);

    if($mess->message != '' && $mess->name != ''){	//Jsou vyplněny povinné položky
    if($loggeduser){	//Je přihlášen uživatel:
      if($_SESSION['permission'] != 'Master'){	//Pokud není přihlášen Master, příspěvek se zkrátí :)
          //Pokud příspěvek již existuje, znovu se nepřidá
          if(in_array(Censore($mess->message,$config['gbook']['message_max_r']),mysql_fetch_array($exist))) {echo '<h2 class="false">1Příspěvek již existuje</h2>'.$nl; break;}
        $mess->message = Censore($mess->message,$config['gbook']['message_max_r']);
       } else {
          //Pokud příspěvek již existuje, znovu se nepřidá
         if(in_array(CensoreLite($mess->message),mysql_fetch_array($exist))) {echo '<h2 class="false">2Příspěvek již existuje</h2>'.$nl; break;}
         $mess->message = CensoreLite($mess->message);	//Pouze se zalomí řádky
        }

        if($mess->Insert()){	//Vložení příspěvku
          echo '<h2 class="true">Příspěvek byl přidán.</h2>'.$nl;
        } else {
          echo '<h2 class="false">Příspěvek nebyl přidán!</h2>'.$nl;
        }
      } else {	//Není přihlášen uživatel:
        $user = new User;
        @$user->GetOne($mess->name);	//Ověření, zda uživatel již neexistuje v databázi
        if($user->count == 0){	//Uživatel v databázi neexistuje

		    //Pokud příspěvek již existuje, znovu se nepřidá
         if(in_array(Censore($mess->message,$config['gbook']['message_max']),mysql_fetch_array($exist))) {echo '<h2 class="false">3Příspěvek již existuje</h2>'.$nl; break;}
            $mess->message = Censore($mess->message,$config['gbook']['message_max']);	//Zkrácení příspěvku
            if($mess->Insert()){	//Vložení příspěvku
              echo '<h2 class="true">Příspěvek byl přidán.</h2>'.$nl;
            } else {
              echo '<h2 class="false">Příspěvek nebyl přidán!</h2>'.$nl;
            }
          
        } else {	//Uživatel v databázi existuje:
          echo '<h2 class="false">Uživatel <b>'.$mess->name.'</b> je zaregistrován</h2>'.$nl;
          echo '<a href="login.php" title="Přihlásit se" class="gbsmall">Přihlaste se</a> nebo změňte jméno!<br /><br />'.$nl;
		  $name = '&lt;zadejte jiné jméno&gt;" onclick="javascript:this.value=\'\';';
          $show_data = true;	//Opět vypsat data do formuláře
        }
      }
    } else {	//Nejsou vyplněny povinné položky
      echo '<h2 class="false">Nejsou vyplněny povinné položky</h2>'.$nl;
      $show_data = true;
    }
    if($show_data){	//Vypíše data do formuláře
      $add = 1;
      $mail = $mess->mail;
      $web = $mess->web;
      $message = $mess->message;
    }      
    
  break;

  case 'update':	//Upravení příspěvku
    if($loggeduser && (($_SESSION['name'] == $_POST['name']) || $_SESSION['permission'] == 'Master')){
      $mess->GetOne(trimSlash($_POST['id']));
      $oldmessage = $mess->message;				//Získá původní příspěvek
      $mess->mail = trimSlash($_POST['mail']);
      $mess->web = trimSlash($_POST['web']);
      $mess->message = $_POST['message'];
      if($_SESSION['permission'] != 'Master'){	//Pokud není přihlášen Master, příspěvek se ocenzuruje :)
        $mess->message = Censore($mess->message,$config['gbook']['message_max_r']);
        $mess->message .= "<br /><br /><b>Původní zpráva:</b><br /><i>".$oldmessage."</i>";
      } else {
        $mess->message = CensoreLite($mess->message);	//Pouze se zalomí řádky
      }
      if(is_numeric($_POST['id'])){
        if($mess->Update($_POST['id'])){
          echo '<h2 class="true">Příspěvek byl upraven.</h2>'.$nl;
        } else {
          echo '<h2 class="false">Příspěvek nebyl upraven!</h2>'.$nl;
        }
      } else {
        echo '<h2 class="false">Nešlo upravit příspěvek</h2>Nejsi hacker?'.$nl;
        break;
      }
    }
    break;      
}
?>

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý