我想('´ñ)
从html
. 这将转到codigo.php
负责将其插入数据库的人员MySQL
。
问题是我已经尝试了一千种方法来做到这一点,但我无法插入或拿起它……我不知道还能做什么。
html代码:
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="codigo.php" method=POST name=Entrada enctype="multipart/form-data">
<input name="cad" maxlength="5" size="3"/>
<textarea name="text"></textarea>
<input id=enviar type=submit value=Publicar />
</form>
PHP代码:
$text=utf8_encode($_POST["text"]);
$cad=utf8_encode($_POST["cad"]);
echo $text." ".$cad; // Imprime sin problemas las variables
$servidor
$usuario
$pass
$bbdd
$conexion=mysqli_connect($servidor,$usuario,$pass,$bbdd) or die ("Error 505 NOT FOUND");
$sql="INSERT into datos ('texto','cadenas') VALUES ('$text','$cad')";
$tabla=mysqli_query($conexion,$sql);
数据库:
数据库及其表都在latin2_general_ci
.
如果您的排序规则是
latin2_general_ci
(ISO 8859-2
, 既不支持ñ
也不支持¡
),那么我建议您的所有代码都使用它,并且不要使用既不使用utf8_encode
也不使用,utf8_decode
因为它不会产生任何影响:'
当使用准备好的查询接收到可以关闭查询的字符(例如 )时,我添加了正确的方法来避免 SQL 失败。使用此代码,您还可以避免SQL 注入问题。我还加强了代码以显示查询可能导致的错误(在您的情况下,它给您一个 SQL 语法错误,您在任何时候都没有显示)。
总结和建议的解决方案
您遇到的主要问题是将字符串直接注入到 SQL 查询中,这意味着如果查询中存在 SQL 字符(例如结束字符串
'
),则 SQL 查询将出现语法错误并且不会被执行。要解决此问题,请使用准备好的查询和
mysqli_prepare()
. 如果你坚持直接向 SQL 添加字符串,至少使用mysqli_real_escape_string()
.第二个与您必须测试的字符串有关。例如,没有办法在字符集中编码
¡Caña! to'
(in ) ,而是出现.ISO 8859-15
ISO 8859-2
ĄCańa! to'
'´ñ
在您的问题的字符串中,´
既没有 inISO-8859-2
也没有 inISO-8859-15
,因此不可能将其与所述排序规则或字符集一起存储。为了解决这个问题,我建议您将所有内容更改为
utf-8
(collationutf8_general_ci
),并且您的页面和数据库、表格等共享相同的字符集。您将支持更多语言,包括表情符号和符号(如 ☀、☎、☘、☺ 等),并且不仅限于 256 个字符(其中只有一小部分实际上有用)。在这里,您有一个指向 的字符表的链接
ISO-8859-2
,这里是 的一个ISO-8859-15
。您将能够检查使用两者中的任何一个的限制。数据库转换
您将需要运行以下 SQL 查询来更改默认数据库和表排序规则:
请注意,几乎可以从任何字符集转换
utf-8
为,但相反的转换(iso-8859-2
例如,返回)可能会失败,并且使用无法编码为该集的字符可能会导致数据丢失。HTML/PHP 中的修改
一旦数据库和表的默认排序规则(或字符集)被更正,您可以更改 PHP 文件的字符集(并非所有编辑器都支持后者,我推荐
Atom
,Notepad++
等)并进行以下更改:通过这些更改,您将把整个应用程序转换为
utf-8
并因此几乎支持来自任何语言或特殊符号的任何字符。在表单中添加 accept-charset="utf-8" 选项。
如果
echo
你把你的数据扔对了,就说明你html
没问题,试着改BD
一下这样它对我有用,因为您表明您拥有数据库: