лишнее экранирование ?? одинарных и двойных кавычек

zubasta

Новичок
Добрый день!
Вопрос такой - уже дня 3 никак не могу решить проблему с правильными отправкой и отображением данных. Одинарные кавычки экранируются, двойные вообще даже в базу не заносяться:
- одинарные кавычки заносятся в базу с \r\n
- после этого при отображении из БД отображаются со слешами (\), то есть ('\)
- все, что заносится в поле textarea после двойной кавычки (") отбрасывается (то есть не заноситься в базу даже)

Вот код
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=sjis">
	<title>Untitled</title>
</head>
	<body>

<?


//Соединение с БД
	

$soushin = $_POST['soushin'];
$soushin2 = $_POST['soushin2'];
$reset = $_POST['reset'];
$kakunin = $_POST['kakunin'];
$naosu = $_POST['naosu'];
$koushin = $_POST['koushin'];
$reset2 = $_POST['reset2'];
$modoru = $_POST['modoru'];


$user_id = $_POST['user_id'];
$user_name = $_POST['user_name'];

$user_name = trim($user_name, " .\t.\n.\r.\0.\x0B. ");
$user_age = $_POST['user_age'];
$user_top = $_POST['user_top'];
$user_top = trim($user_top, " .\t.\n.\r.\0.\x0B. ");


$user_mes = $_POST['user_mes'];


if($user_name == NULL){
	$error1 = "<font color=\"red\">名前を入力してください</font>";}
if($user_top == NULL){
	$error2 = "<font color=\"red\">トピックを入力してください</font>";}
if($user_mes == NULL){
	$error3 = "<font color=\"red\">メッセージを入力してください</font>";}
if($user_age == 0){
	$error4 = "<font color=\"red\">年齢を入力してください</font>";}




if($kakunin){
//Проверить введенные в форму данные

?>

<form method="post" action="<?= $_SERVER["PHP_SELF"]; ?>" name="keiji">
<table border="1">
<tr>
	<td>ID</td>
	<td><?= $user_id ?></td>
</tr>
<tr>
	<td>名前</td>
	<td><? if($error1){echo $error1;}else{echo $user_name;} ?></td>
</tr>
<tr>
	<td>年齢</td>
	<td>
	<? if($error4){echo $error4;}else{echo $user_age;} ?>
	</td>
</tr>
<tr>
	<td>テーマ</td>
	<td><? if($error2){echo $error2;}else{echo $user_top;} ?></td>
</tr>
<tr>
	<td>メッセージ</td>
	<td><? if($error3){echo $error3;}else{echo nl2br($user_mes);} ?></td>
</tr>
</table>

<input type="hidden" name="user_id" value="<?= $user_id ?>">
<input type="hidden" name="user_name" value="<?= $user_name ?>">
<input type="hidden" name="user_age" value="<?= $user_age ?>">
<input type="hidden" name="user_top" value="<?= $user_top ?>">
<input type="hidden" name="user_mes" value="<?= $user_mes ?>">
<input type="submit" name="soushin" value="送信">
<input type="submit" name="reset2" value="リセット">
<input type="submit" name="modoru" value="戻る">
</form>

<?
	echo $user_name, $user_top, $user_mes;


}elseif($naosu){ 
//Форма с введенными ранее данными для редактирования
?>
<form method="post" action="<?= $_SERVER["PHP_SELF"]; ?>" name="keiji">
<table border="1">
<tr>
	<td>ID</td>
	<td><?= $user_id ?></td>
</tr>
<tr>
	<td>名前</td>
	<td><input type="text" name="user_name" value="<?= $user_name ?>"></td>
</tr>
<tr>
	<td>年齢</td>
	<td>
	<select name="user_age">
	<? for($i = 0; $i < 99; $i++){ ?>
	<option value="<?= $i ?>" <? if($user_age == $i){echo "selected";} ?>><?= $i ?></option>
	<? } ?>
	</select>
	</td>
</tr>
<tr>
	<td>テーマ</td>
	<td><input type="text" name="user_top" value="<?= $user_top ?>"></td>
</tr>
<tr>
	<td>メッセージ</td>
	<td><textarea name="user_mes" value="" cols="50" rows="10" wrap="physical"><?= $user_mes ?></textarea></td>
</tr>
</table>
<input type="hidden" name="user_id" value="<?= $user_id ?>">
<input type="submit" name="soushin2" value="送信">
<input type="reset" name="reset" value="リセット">
</form>

<?
echo $user_name, $user_top, $user_mes;
}else{
//Первая страница (форма и вывод зарегистрированных данных)
	
?>

<form method="post" action="<?= $_SERVER["PHP_SELF"]; ?>" name="keiji">
<table border="1">
<tr>
	<td>名前</td>
	<td><input type="text" name="user_name" value="<?= $user_name ?>"></td>
</tr>
<tr>
	<td>年齢</td>
	<td>
	<select name="user_age">
	<? for($i = 0; $i < 99; $i++){ ?>
	<option value="<?= $i ?>" <? if($user_age == $i){echo "selected";} ?>><?= $i ?></option>
	<? } ?>
	</select>
	</td>
</tr>
<tr>
	<td>テーマ</td>
	<td><input type="text" name="user_top" value="<?= $user_top ?>"></td>
</tr>
<tr>
	<td>メッセージ</td>
	<td><textarea name="user_mes" value="" cols="50" rows="10" wrap="physical"><?= $user_mes ?></textarea></td>
</tr>
</table>

<input type="submit" name="kakunin" value="確認">
<input type="submit" name="reset2" value="リセット">
<input type="submit" name="koushin" value="更新">

</form>
<?

	$user_name = mb_convert_encoding($user_name, "EUC-JP");
	$user_name = mysql_real_escape_string($user_name);
	$user_name = mb_convert_encoding($user_name, "SJIS", "EUC-JP");

	$user_top = mb_convert_encoding($user_top, "EUC-JP");
	$user_top = mysql_real_escape_string($user_top);
	$user_top = mb_convert_encoding($user_top, "SJIS", "EUC-JP");
	
	$user_mes = mb_convert_encoding($user_mes, "EUC-JP");
	$user_mes = mysql_real_escape_string($user_mes);
	$user_mes = mb_convert_encoding($user_mes, "SJIS", "EUC-JP");
	
	$asql = " SELECT * FROM w_user";
	$asql .= " WHERE w_user_delflag = 0";
if(!$modoru){
		if($user_id){
		$asql .= " AND w_user_id = '{$user_id}'";
		}
		if($user_name){
		$asql .= " AND w_user_name = '{$user_name}'";
		}
		if($user_age){
		$asql .= " AND w_user_age = '{$user_age}'";
		}
		if($user_top){
		$asql .= " AND w_user_top = '{$user_top}'";
		}
		if($user_mes){
		$asql .= " AND w_user_mes = '{$user_mes}'";
		}
}
echo $asql;
	$aresult = mysql_query($asql, $link);
	$arow = mysql_num_rows($aresult);
	
	if($arow){
		while($arows = mysql_fetch_array($aresult)){
			$user_id = $arows["w_user_id"];
			$user_name = $arows["w_user_name"];
			$user_age = $arows["w_user_age"];
			$user_top = $arows["w_user_top"];
			$user_mes = $arows["w_user_mes"];
			
			$tempHtml .= "<br>ID".$user_id."<br>\n";
			$tempHtml .= "名前".$user_name."<br>\n";
			$tempHtml .= "年齢".$user_age."<br>\n";
			$tempHtml .= "テーマ".$user_top."<br>\n";
			$tempHtml .= "メッセージ".nl2br($user_mes)."<br>\n";
			$tempHtml .= "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\" name=\"keiji\">\n";
			$tempHtml .= "<input type=\"hidden\" name=\"user_id\" value=\"".$user_id."\">\n";
			$tempHtml .= "<input type=\"hidden\" name=\"user_name\" value=\"".$user_name."\">\n";
			$tempHtml .= "<input type=\"hidden\" name=\"user_age\" value=\"".$user_age."\">\n";
			$tempHtml .= "<input type=\"hidden\" name=\"user_top\" value=\"".$user_top."\">\n";
			$tempHtml .= "<input type=\"hidden\" name=\"user_mes\" value=\"".$user_mes."\">\n";
			$tempHtml .= "<input type=\"submit\" name=\"naosu\" value=\"書き直す\">\n";
			$tempHtml .= "</form>\n";
		}
	}

echo $tempHtml;
}

if($soushin){
//Отправка данных на сервер
	
	$user_name = mb_convert_encoding($user_name, "EUC-JP");
	$user_name = mysql_real_escape_string($user_name);
	$user_name = mb_convert_encoding($user_name, "SJIS", "EUC-JP");

	$user_top = mb_convert_encoding($user_top, "EUC-JP");
	$user_top = mysql_real_escape_string($user_top);
	$user_top = mb_convert_encoding($user_top, "SJIS", "EUC-JP");
	
	$user_mes = mb_convert_encoding($user_mes, "EUC-JP");
	$user_mes = mysql_real_escape_string($user_mes);
	$user_mes = mb_convert_encoding($user_mes, "SJIS", "EUC-JP");
	
	$isql = " INSERT INTO w_user";
	$isql .= "(";
	$isql .= "w_user_id,";
	$isql .= "w_user_name,";
	$isql .= "w_user_age,";
	$isql .= "w_user_top,";
	$isql .= "w_user_mes,";
	$isql .= "w_user_delflag,";
	$isql .= "w_user_update,";
	$isql .= "w_user_regdate";
	$isql .= ") VALUES (";
	$isql .= "'',";
	$isql .= "'{$user_name}',";
	$isql .= "'{$user_age}',";
	$isql .= "'{$user_top}',";
	$isql .= "'{$user_mes}',";
	$isql .= "0,";
	$isql .= "now(),";
	$isql .= "now()";
	$isql .= ")";
	echo $isql;
	
	$iresult = mysql_query($isql) or die("クエリの送信に失敗しました".$isql);
	$irow = mysql_affected_rows();

$user_id = null;
$user_name = null;
$user_age = null;
$user_top= null;
$user_mes = null;

}

if($soushin2){
//Отправка отредактированных данных в БД

	$user_name = mb_convert_encoding($user_name, "EUC-JP");
	$user_name = mysql_real_escape_string($user_name);
	$user_name = mb_convert_encoding($user_name, "SJIS", "EUC-JP");

	$user_top = mb_convert_encoding($user_top, "EUC-JP");
	$user_top = mysql_real_escape_string($user_top);
	$user_top = mb_convert_encoding($user_top, "SJIS", "EUC-JP");
	
	$user_mes = mb_convert_encoding($user_mes, "EUC-JP");
	$user_mes = mysql_real_escape_string($user_mes);
	$user_mes = mb_convert_encoding($user_mes, "SJIS", "EUC-JP");
	
	$asql = " UPDATE w_user SET";
	$asql .= " w_user_name = '{$user_name}' , w_user_age = '{$user_age}' , w_user_top = '{$user_top}' , w_user_mes = '{$user_mes}'";
	$asql .= " WHERE w_user_id = '{$user_id}'";
	$aresult = mysql_query($asql, $link);

}

//Завершение соединенения с БД
?>

</body>
</html>
Магические кавычки на сервере отключены.
Извините за глупые вопросы. Наверняка, темы эти много раз поднимались. Но я ламер в программировании. А разобраться хочу. Дня 3 уже никак не могу найти нормальное решение.
Часто в таких случаях советуют функцию stripslashes, но я читал, что это моветон. И вообще, следует избегать применение этой функции (хотя бы потому, что в очень сложных случаях потом и не разберешься где эта функция удаляет слеши, а где - нет)

Где можно что-то почитать по моему вопросу?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Для начала стоит почитать правила форума, в которых написано, что выкладывать простыню неотформатированного кода длиной в четыре экрана — верный путь в баню.

Потом — http://phpfaq.ru/slashes
 

Фанат

oncle terrible
Команда форума
для начала я бы порекомендовал mysql_set_charset()
а во-вторых выкинул бы все шаманство с mb_convert_encoding

таблица в БД в какой кодировке?
 

zubasta

Новичок
Спасибо, попробую.
Кодировка SJIS. А как она влияет, точнее - хотелось бы почитать об этом?

Например, по типу такой статьи.
[ссылка на статью о том, что одинарные кавычки лучше двойных]
Она, конечно, на другую тему, но там проблема рассматривается четко.
 

Фанат

oncle terrible
Команда форума
Например, по типу такой статьи.
Она, конечно, на другую тему, но там проблема рассматривается четко.
Забавно, но это как раз пример очень плохой статьи, автор которой вообще не разбирается в предмете, придумал проблему на пустом месте, и выдает свои собственные фантазии за факты.
Ссылку я убрал, чтобы не рекламировать дураков.
А как она влияет, точнее - хотелось бы почитать об этом?
http://phpfaq.ru/charset
 
Сверху