2013-06-09 1 views
0

나는 매우 좌절하는 문제가 있습니다. 나는 서버에 등록 양식을 보내는 클라이언트가 있습니다. 처리기는 PHP 파일입니다.데이터베이스 슬라이스 암호의 마지막 두 글자 (?!)

문제는 다음과 같습니다. 클라이언트가 양식 데이터를 PHP로 보내면 php는 mysql 데이터베이스에 저장합니다. 그러나 공간을 포함하는 이름을 제공하려고하면 왜 그런지 알지 못합니다. 데이터베이스에서 암호의 길이가 2로 줄어 듭니다.

나는 오랜 시간 동안 수색했지만 아무 것도 발견하지 못했습니다. 나는 광기의 가장자리에있어, 그래서 내가 문제를 찾을 수 있도록 도와달라고 부탁하고 싶다. PHP 코드 마침내 여기

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 
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); 
    } 
} 
}?> 

<!-- 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> 

이 클라이언트 측에서 등록을 처리해야하는 스크립트는 다음과 같습니다

등록 양식입니다

필요한 경우 데이터베이스 테이블에서 사진을 업로드합니다.

도와 주시면 감사하겠습니다.

+3

:

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 측에서, 당신은 한 곳에서 답을 인코딩하는 약간에게 당신의 코드를 단순화 할 수 있음을 알 데이터베이스 테이블의 암호 필드는 얼마 동안 유지됩니까? – silkfire

+7

데이터베이스에있는 일반 텍스트 비밀번호, 정말로? 또한, 당신이 우리를 위해 예제를 단순화했기 때문에 서버 측의 sanitisation이 부족하기를 바랍니다. :) 그것은 SQL injection에 크게 열려 있습니다. –

+0

PHP의 '{$ somevar}'표현은 어떤 종류의 표기법입니까? – arkascha

답변

0

제 생각 엔 jQuery.param 공백 (+, 1 자, % 20, 3 자 대신)으로 인코딩하는 데 문제가있는 것 같습니다.

당신은 암호 필드에 '는'% 20 '과'을 대체 수동으로 시도 할 수 있습니다 다음 .beforeSendsetting 사용하여 (주 당신은 아마 모든 필드, 단지 당신이 아직 발견하지 않았습니다 에 같은 문제가) :

$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. 
+0

답장을 보내 주셔서 감사합니다. –

1

없는 등 전체 답을 용서하지만 형식은 주석보다 낫다하십시오 : 다른 사람으로

이미 제안 :

  1. 에코 SQL 문을. 이것은 결국 DB에 저장되는 것입니다. 이것은 데이터가 db에 저장되기 전후에 있는지 여부를 표시합니다.

  2. DB에서 데이터 수신과 저장 공간 사이의 코드를 확인하기 위해 sql이 좋으면 var_dump ($ _ POST) - 실제로 스크립트가 보내는 것을 볼 수 있습니다.

  3. 'SQL 주입을 방지하기 위해 텍스트를 이스케이프 처리합니다.'- 항상 클라이언트 페이지를 변경할 시점을 알지 못하기 때문에 텍스트를 이스케이프 처리하면 더 안전합니다. 귀하의 사례는 고객의 데이터를 절대 신뢰하지 않는 이유의 대표적인 사례입니다.

FWIIW, 나는이 문제가 자바 스크립트에 있다고 생각합니다. jquery와 같은 라이브러리 사용과 관련된 한 가지 문제점은 실제로 jquery가 쉬운 일을 쉽게하지 않는다는 것입니다. 그들은 그것을 더욱 복잡하게 만듭니다. 일단 슬라이드 규칙과 비슷하지만, 일단 배웠다면, 쉬운 것들보다 더 어려운 것들을 만들지 않습니다. 코드 이식성의 이점도 있습니다.

IMHO는 단순한 아약스 호출의 경우 실제로는 초보자로서 순수 JS를 사용하는 것이 좋습니다. w3schools.com은 훌륭한 AJAX 튜토리얼 및 코드 예제를 제공합니다.

mysql_ * 확장은 사용되지 않습니다. mysqli_ (거의 동일) 또는 PDO를 배우는 것이 현명합니다.

관련 문제