我有一个非常令人沮丧的问题。我有一个客户端将注册表发送到服务器。处理程序是一个php文件。
问题如下:客户端将表单数据发送到php,php存储在mysql数据库中。但是,如果我尝试给出一个包含空格的名称 - 我不知道为什么 - 在数据库中,密码的长度减少了两个。
我长时间搜索,但一无所获。我处于疯狂的边缘,所以我想请你帮助我找到问题。
以下是注册表格:
<!-- REGISTRATION -->
<div data-role="page" id="regScreen">
<div data-role="content">
<div class="profileCircle">
<img src="img/iskola.jpg" />
</div>
<div class="space"></div>
<form action="" method="post" id="regForm" name="regForm">
<input type="text" name="nev" id="regName" placeholder="Teljes név" data-mini="true"/>
<input type="email" name="mail" id="regEmail" placeholder="Email cím" data-mini="true"/>
<input type="password" name="jelszo" id="regPassword" placeholder="Jelszó" data-mini="true"/>
<input type="submit" data-inline="true" data-mini="true" value="Regisztráció" name="rendben" id="rendben" />
</form>
</div>
<a href="#loginScreen"><div class="circle leftBottom c1">
<img src="img/ikonok/vissza.png" />
</div></a>
</div>
这是应该在客户端处理注册的脚本:
function registration(){
var name = $('#regForm #regName').val();
var email = $('#regForm #regEmail').val();
var password = $('#regForm #regPassword').val();
if((password == "" || password == null) || (email == "" || email == null)){
navigator.notification.alert("Nem töltött ki minden adatot!", function(){}, "Figyelem!");
}else{
$.ajax({
url: host + "regisztracio.php",
type: 'post',
dataType: 'json',
data: {rendben:'ok', nev: name, mail: email, jelszo: password},
success: function(data){
if(data.ok){
navigator.notification.alert('Sikeresen regisztrált!\nMostmár be tud jelentkezni a saját felhasználónevével!',function(){
$.mobile.changePage("#loginScreen");
},'Üdvözöljük!');
}else{
navigator.notification.alert(data.uzenet,function(){},'Figyelem!');
if(data.help){
navigator.notification.confirm('Kívánja, hogy új jelszót küldjünk erre az email címre?',function(){
console.log(button);
}, 'Segíthetünk?', 'Igen, Nem');
}
}
},
error: function(err){
console.log('jajj');
navigator.notification.alert(err.message,function(){},'Hiba!');
}
});
}
}
最后这里是php代码:
<?php
if (isset($_POST['rendben'])) {
require("mysql.php");
$nev = $_POST['nev'];
$mail = $_POST['mail'];
$jelszo = $_POST['jelszo'];
if (empty($_POST['nev']) OR empty($_POST['mail']) OR empty($_POST['jelszo'])) {
$string = array("ok" => false, "uzenet" => "Nem töltött ki minden adatot!");
echo json_encode($string);
}else{
$sql = "SELECT *
FROM felhasznalok
WHERE mail = '{$mail}'";
$eredmeny = mysql_query($sql);
if (mysql_num_rows($eredmeny) == 0) {
$sql = "INSERT INTO felhasznalok
(nev, mail, jelszo, kep)
VALUES
('{$nev}', '{$mail}', '{$jelszo}', '{$kep}')";
mysql_query($sql);
$string = array("ok" => true);
echo json_encode($string);
}else{
$string = array("ok" => false, "help" => true, "uzenet" => "Ezzel az email címmel már regisztráltak, lehet, hogy elfelejtette a jelszavát?");
echo json_encode($string);
}
}
}?>
如果需要,我会从数据库表中上传图片。
我希望你能帮助我。
答案 0 :(得分:1)
请原谅不完整的答案,但格式优于评论:
正如其他人已经建议的那样:
回显你的sql语句。这毕竟是存储在数据库中的内容。这将显示您的问题是在数据存储在数据库之前还是之后。
var_dump($ _ POST)如果您的sql是好的,因为这会检查数据的接收与其在数据库中的存储之间的代码 - 您可以看到您的脚本实际发送的内容。
转义你的文字以防止'sql注入' - 总是逃避文本,因为你永远不知道什么时候你要改变你的客户页面,这样更安全。您的案例是您不相信客户数据的主要原因。
FWIIW,我怀疑问题出在javascript上。使用像jquery这样的库的一个问题是它们实际上并不容易使事情变得简单。它们使它变得更加复杂。虽然有点像幻灯片规则,但一旦学会了,他们就会制作一些复杂的东西,而不是简单的东西。还有代码可移植性的好处。
即便如此,恕我直言,对于一个简单的ajax调用,你实际上更好地使用纯JS,当然作为初学者。 w3schools.com有一个很棒的AJAX教程和代码示例。
不推荐使用mysql_ *扩展。你应该明智地学习mysqli_(几乎相同)或PDO。
答案 1 :(得分:0)
我的猜测是你遇到jQuery.param
空格编码问题(+,一个字符,而不是%20,三个字符)。
你可以尝试在密码字段中手动替换'''%20'(注意:你可能在所有字段中遇到同样的问题,只有你还没有注意到它) .beforeSend
setting:
url: host + "regisztracio.php",
type: 'post',
dataType: 'json',
data: {rendben:'ok', nev: name, mail: email, jelszo: password},
beforeSend: function (req, data) {
data.jelszo = data.jelszo.replace(/\+/g, "%20");
},
success: function(data){
...
另外(但这是无关),在PHP方面,请注意您可以简化一些代码,只在一个地方编码答案:
$string = array("ok" => false);
// Ez ad némi biztonságot
$fields = array('nev','mail','jelszo');
foreach($fields as $field)
{
if (empty($_POST[$field]))
$string['uzenet'] = "Nem töltött ki minden adatot: ${field}!";
else
${$field} = mysql_real_escape_string($_POST[$field]);
}
if (!isset($string['uzenet']) {
$sql = "SELECT *
FROM felhasznalok
WHERE mail = '{$mail}'";
$eredmeny = mysql_query($sql);
if (mysql_num_rows($eredmeny) == 0) {
$sql = "INSERT INTO felhasznalok
(nev, mail, jelszo, kep)
VALUES
('{$nev}', '{$mail}', '{$jelszo}', '{$kep}')";
if (false === mysql_query($sql))
$string['uzenet'] = 'Volt egy adatbázis hiba!';
else
$string['ok'] = true;
}else{
$string['help'] = true;
$string['uzenet'] = 'Ezzel az email címmel már regisztráltak, lehet, hogy elfelejtette a jelszavát?';
}
}
die(json_encode($string)); // No more output after this.