저는 많은 문제를 일으키는이 스크립트를 만들었습니다. 나는 MySQL에 능숙하지 못하며 아마도 SQL에 대한 지식이 너무 뛰어 났을 것입니다.하지만이 작업을 정말로하고 싶습니다.PHP + MySQL 스크립트가 작동하지 않습니다.
내 PHP 스크립트는 다음과 같습니다
<?PHP
$getusername=$_GET['user'];
$getpassword=$_GET['pass'];
$getworldname=$_GET['worldname'];
$getblock=$_GET['block'];
$getpos=$_GET['pos'];
$user_name = "asdasdasd";
$password = "asdasd";
$database = "asdasd";
$server = "localhost";
$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);
$SQL="SELECT * FROM accounts WHERE username='$getusername' and password='$getpassword'";
$result=mysql_query($SQL);
$count=mysql_num_rows($result);
if($count==1){
$blockstring=$getpos.'/'.$getblock.'|';
$SQL="SELECT LOCATE('$getpos', blocks) FROM worlds WHERE name='$getworldname'";
$result=mysql_query($SQL);
$count=mysql_num_rows($result);
echo $count;
//if there's already that block
if ($result!=0){
$posUnknown='|'.$getpos.'/';
$posKnown='|'.$getpos.'/'.$getblock;
$SQL="UPDATE worlds SET blocks=replace(blocks,concat('$posUnknown',substring_index(substring_index(blocks, '$posUnknown', 2), '|', 1),'|'),'$posKnown') WHERE name='$getworldname'";
$result=mysql_query($SQL);
}else{
$SQL="UPDATE worlds SET blocks=CONCAT(blocks,'$blockstring') WHERE name='$getworldname'";
$result=mysql_query($SQL);
}
print 'OK';
}else{
print 'NO';
}
?>
내가 어떤 실수를 쿼리로도 큰 사람을 만들었지 만, 슬프게도 내가 잘못 뭘하는지 알아낼 수 없습니다 확신합니다.
블록의 내용의 예는 수 :
이이x10y20z30이/0 | x999y1231z30가/1 | x3330y4444z0/99999 | 등
이 스크립트가하는 일, 음, 내가 무엇을 원
- 확인 사용자 이름과 암호, 그리고 운이 좋게 작동합니다 할 것입니다 존재하지 않는 경우 N "블록"
- 는 새 것으로 이미 존재하는 블록의 값 (은/후를) 대체 존재하는 경우,
- 는에 "블록"을 추가합니다.
하지만 작동하지 않으며 그 이유를 알고 있습니다. 나는 그것이 SQL이기 때문에 그것이지만, 어떻게 작동하게하는지 알아낼 수 없다는 것을 압니다.
[안녕하세요, 제 이름은] (http://xkcd.com/327/)'Robert '; 테이블 계정을 삭제하십시오; - 그리고 내가 당신의 사이트를 방문했을 때 모든 것이 깨집니다. [SQL 주입] (http : //en.wikipedia.org/wiki/SQL_injection), 선호하면 [pdo 또는 mysqli] (http://php.net/manual/en/mysqlinfo.api.choosing.php)를 사용 하시겠습니까? – scragar
[link] (http://beta.phpformatter.com/)에 코드를 들여 놓아야하고 실제로 그렇게하고 싶은지 확인하십시오. – simeg