По какой-то причине, когда пользователь приходит на мой сайт, чтобы играть в мультиплеер, вызов в php-файл отправляется, но база данных никогда не добавляет нового игрока или не обновляет свою информацию.
php-файл вызывается со следующей строкой кода из файла javascript:
xmlhttp.open('GET',"xml_http_request.php?mod0="+truckHeading+"&mod1="+newhtr[1]+"&mod2="+absRoll+"&lla0="+lla[0]+"&lla1="+lla[1]+"&lla2="+lla[2]+"&pid="+rCC+"&rangeCheck="+rangeCheck+"&ranger="+ranger+"&namely="+namely+"&message="+message+"&unLoader=false", true);
Вот код php:
<?php require("db1.php"); //for using live public database //require("db.php"); //for using local database $inserter=0; //assign pid if have not already $pid=$_GET['pid']; if($pid=='false'){ $inserter=1; $query="SELECT id FROM positioner"; $result=mysql_query($query); $num_rows=mysql_num_rows($result); $i=1; while($row=@mysql_fetch_assoc($result)){ if($i!=$row['id']){ $pid=$i;break; } //take first available id $i++; } if($pid=='false'){ $pid=$num_rows+1; } //if no hole in id list, take next one higher mysql_free_result($result); } $unLoader=$_GET['unLoader']; if($unLoader=='true'){ $ddb=dbq("DELETE FROM positioner WHERE id = '".$pid."' LIMIT 1;"); }else{ $dbMi=$_GET['dbMi']; $mod0=$_GET['mod0']; $mod1=$_GET['mod1']; $mod2=$_GET['mod2']; $lla0=$_GET['lla0']; $lla1=$_GET['lla1']; $lla2=$_GET['lla2']; $rangeCheck=$_GET['rangeCheck']; $namely=addslashes($_GET['namely']); if($namely==''){ $namely='x'; } $message=addslashes($_GET['message']); $rangeCheck='true'; //only check range every x number of ticks (50, ~3 seconds)? // , $rangeCheck is true first time if($rangeCheck=='true'){ $ranger=array(); //get lat lon of all for determining who is in range $query="SELECT id, lla0, lla1 FROM positioner WHERE id != '".$pid."' "; $result=mysql_query($query); //if distance < 10000, put id in ranger array while($row=@mysql_fetch_assoc($result)){ //leave rangeCheck off for now //$di=dister($row['lla0'],$row['lla1'],$lla0,$lla1); //if($di<10000){ $ranger[]=$row['id']; //} } mysql_free_result($result); if(count($ranger)==0){ $rangerS=''; }else{ $rangerS=implode(",", $ranger); } //between rangeChecks get ranger array from js }else{ $rangerS=$_GET['ranger']; // $rangerS: string(for inserting) $ranger=explode(",",$rangerS); // $ranger: array(for looping) } //insert new row first time if($inserter==1){ $idb=dbq("INSERT positioner (id,mod0,mod1,mod2,lla0,lla1,lla2,ranger,namely,message,model) VALUES ('".$pid."', '".$mod0."', '".$mod1."', '".$mod2."', '".$lla0."', '".$lla1."', '".$lla2."', '".$rangerS."', '".$namely."', '".$message."', '".$dbMi."');"); }else{ //update the database with current model data and result of range check $udb=dbq("UPDATE positioner SET mod0 = '".$mod0."', mod1 = '".$mod1."', mod2 = '".$mod2."', lla0 = '".$lla0."', lla1 = '".$lla1."', lla2 = '".$lla2."', ranger = '".$rangerS."', namely = '".$namely."', message = '".$message."', model = '".$dbMi."' WHERE id = '".$pid."' LIMIT 1;"); } header("Content-type: text/xml"); echo '<markers>'; echo '<marker ranger="'.$rangerS.'" pid="'.$pid.'" />'; //loop through a number of times equal to number of id's in ranger array foreach($ranger as $rang){ $query="SELECT mod0, mod1, mod2, lla0, lla1, lla2, namely, message, model FROM positioner WHERE id = '".$rang."' "; $result=mysql_query($query); while ($row=@mysql_fetch_assoc($result)){ echo '<marker mod0="'.$row['mod0'].'" />'; echo '<marker mod1="'.$row['mod1'].'" />'; echo '<marker mod2="'.$row['mod2'].'" />'; echo '<marker lla0="'.$row['lla0'].'" />'; echo '<marker lla1="'.$row['lla1'].'" />'; echo '<marker lla2="'.$row['lla2'].'" />'; echo '<marker namely="'.rawurlencode(stripslashes($row['namely'])).'" />'; echo '<marker message="'.rawurlencode(stripslashes($row['message'])).'" />'; echo '<marker dbMi="'.$row['model'].'" />'; } } echo '</markers>'; } //end if unLoader //function for calculating distance between latlon pairs, for range check /* not necessary for only a few visitors function dister($lat1,$lon1,$lat2,$lon2){ $R=6378100; $lat1*=pi()/180; $lon1*=pi()/180; $lat2*=pi()/180; $lon2*=pi()/180; $dLat=$lat2-$lat1; $dLon=$lon2-$lon1; $a=sin($dLat/2)*sin($dLat/2) +cos($lat1)*cos($lat2)* sin($dLon/2)*sin($dLon/2); $c=2*atan2(sqrt($a),sqrt(1-$a)); $di=$R*$c; $di=round($di,6); return $di; } */ ?>
для<?php require("db1.php"); //for using live public database //require("db.php"); //for using local database $inserter=0; //assign pid if have not already $pid=$_GET['pid']; if($pid=='false'){ $inserter=1; $query="SELECT id FROM positioner"; $result=mysql_query($query); $num_rows=mysql_num_rows($result); $i=1; while($row=@mysql_fetch_assoc($result)){ if($i!=$row['id']){ $pid=$i;break; } //take first available id $i++; } if($pid=='false'){ $pid=$num_rows+1; } //if no hole in id list, take next one higher mysql_free_result($result); } $unLoader=$_GET['unLoader']; if($unLoader=='true'){ $ddb=dbq("DELETE FROM positioner WHERE id = '".$pid."' LIMIT 1;"); }else{ $dbMi=$_GET['dbMi']; $mod0=$_GET['mod0']; $mod1=$_GET['mod1']; $mod2=$_GET['mod2']; $lla0=$_GET['lla0']; $lla1=$_GET['lla1']; $lla2=$_GET['lla2']; $rangeCheck=$_GET['rangeCheck']; $namely=addslashes($_GET['namely']); if($namely==''){ $namely='x'; } $message=addslashes($_GET['message']); $rangeCheck='true'; //only check range every x number of ticks (50, ~3 seconds)? // , $rangeCheck is true first time if($rangeCheck=='true'){ $ranger=array(); //get lat lon of all for determining who is in range $query="SELECT id, lla0, lla1 FROM positioner WHERE id != '".$pid."' "; $result=mysql_query($query); //if distance < 10000, put id in ranger array while($row=@mysql_fetch_assoc($result)){ //leave rangeCheck off for now //$di=dister($row['lla0'],$row['lla1'],$lla0,$lla1); //if($di<10000){ $ranger[]=$row['id']; //} } mysql_free_result($result); if(count($ranger)==0){ $rangerS=''; }else{ $rangerS=implode(",", $ranger); } //between rangeChecks get ranger array from js }else{ $rangerS=$_GET['ranger']; // $rangerS: string(for inserting) $ranger=explode(",",$rangerS); // $ranger: array(for looping) } //insert new row first time if($inserter==1){ $idb=dbq("INSERT positioner (id,mod0,mod1,mod2,lla0,lla1,lla2,ranger,namely,message,model) VALUES ('".$pid."', '".$mod0."', '".$mod1."', '".$mod2."', '".$lla0."', '".$lla1."', '".$lla2."', '".$rangerS."', '".$namely."', '".$message."', '".$dbMi."');"); }else{ //update the database with current model data and result of range check $udb=dbq("UPDATE positioner SET mod0 = '".$mod0."', mod1 = '".$mod1."', mod2 = '".$mod2."', lla0 = '".$lla0."', lla1 = '".$lla1."', lla2 = '".$lla2."', ranger = '".$rangerS."', namely = '".$namely."', message = '".$message."', model = '".$dbMi."' WHERE id = '".$pid."' LIMIT 1;"); } header("Content-type: text/xml"); echo '<markers>'; echo '<marker ranger="'.$rangerS.'" pid="'.$pid.'" />'; //loop through a number of times equal to number of id's in ranger array foreach($ranger as $rang){ $query="SELECT mod0, mod1, mod2, lla0, lla1, lla2, namely, message, model FROM positioner WHERE id = '".$rang."' "; $result=mysql_query($query); while ($row=@mysql_fetch_assoc($result)){ echo '<marker mod0="'.$row['mod0'].'" />'; echo '<marker mod1="'.$row['mod1'].'" />'; echo '<marker mod2="'.$row['mod2'].'" />'; echo '<marker lla0="'.$row['lla0'].'" />'; echo '<marker lla1="'.$row['lla1'].'" />'; echo '<marker lla2="'.$row['lla2'].'" />'; echo '<marker namely="'.rawurlencode(stripslashes($row['namely'])).'" />'; echo '<marker message="'.rawurlencode(stripslashes($row['message'])).'" />'; echo '<marker dbMi="'.$row['model'].'" />'; } } echo '</markers>'; } //end if unLoader //function for calculating distance between latlon pairs, for range check /* not necessary for only a few visitors function dister($lat1,$lon1,$lat2,$lon2){ $R=6378100; $lat1*=pi()/180; $lon1*=pi()/180; $lat2*=pi()/180; $lon2*=pi()/180; $dLat=$lat2-$lat1; $dLon=$lon2-$lon1; $a=sin($dLat/2)*sin($dLat/2) +cos($lat1)*cos($lat2)* sin($dLon/2)*sin($dLon/2); $c=2*atan2(sqrt($a),sqrt(1-$a)); $di=$R*$c; $di=round($di,6); return $di; } */ ?>
для<?php require("db1.php"); //for using live public database //require("db.php"); //for using local database $inserter=0; //assign pid if have not already $pid=$_GET['pid']; if($pid=='false'){ $inserter=1; $query="SELECT id FROM positioner"; $result=mysql_query($query); $num_rows=mysql_num_rows($result); $i=1; while($row=@mysql_fetch_assoc($result)){ if($i!=$row['id']){ $pid=$i;break; } //take first available id $i++; } if($pid=='false'){ $pid=$num_rows+1; } //if no hole in id list, take next one higher mysql_free_result($result); } $unLoader=$_GET['unLoader']; if($unLoader=='true'){ $ddb=dbq("DELETE FROM positioner WHERE id = '".$pid."' LIMIT 1;"); }else{ $dbMi=$_GET['dbMi']; $mod0=$_GET['mod0']; $mod1=$_GET['mod1']; $mod2=$_GET['mod2']; $lla0=$_GET['lla0']; $lla1=$_GET['lla1']; $lla2=$_GET['lla2']; $rangeCheck=$_GET['rangeCheck']; $namely=addslashes($_GET['namely']); if($namely==''){ $namely='x'; } $message=addslashes($_GET['message']); $rangeCheck='true'; //only check range every x number of ticks (50, ~3 seconds)? // , $rangeCheck is true first time if($rangeCheck=='true'){ $ranger=array(); //get lat lon of all for determining who is in range $query="SELECT id, lla0, lla1 FROM positioner WHERE id != '".$pid."' "; $result=mysql_query($query); //if distance < 10000, put id in ranger array while($row=@mysql_fetch_assoc($result)){ //leave rangeCheck off for now //$di=dister($row['lla0'],$row['lla1'],$lla0,$lla1); //if($di<10000){ $ranger[]=$row['id']; //} } mysql_free_result($result); if(count($ranger)==0){ $rangerS=''; }else{ $rangerS=implode(",", $ranger); } //between rangeChecks get ranger array from js }else{ $rangerS=$_GET['ranger']; // $rangerS: string(for inserting) $ranger=explode(",",$rangerS); // $ranger: array(for looping) } //insert new row first time if($inserter==1){ $idb=dbq("INSERT positioner (id,mod0,mod1,mod2,lla0,lla1,lla2,ranger,namely,message,model) VALUES ('".$pid."', '".$mod0."', '".$mod1."', '".$mod2."', '".$lla0."', '".$lla1."', '".$lla2."', '".$rangerS."', '".$namely."', '".$message."', '".$dbMi."');"); }else{ //update the database with current model data and result of range check $udb=dbq("UPDATE positioner SET mod0 = '".$mod0."', mod1 = '".$mod1."', mod2 = '".$mod2."', lla0 = '".$lla0."', lla1 = '".$lla1."', lla2 = '".$lla2."', ranger = '".$rangerS."', namely = '".$namely."', message = '".$message."', model = '".$dbMi."' WHERE id = '".$pid."' LIMIT 1;"); } header("Content-type: text/xml"); echo '<markers>'; echo '<marker ranger="'.$rangerS.'" pid="'.$pid.'" />'; //loop through a number of times equal to number of id's in ranger array foreach($ranger as $rang){ $query="SELECT mod0, mod1, mod2, lla0, lla1, lla2, namely, message, model FROM positioner WHERE id = '".$rang."' "; $result=mysql_query($query); while ($row=@mysql_fetch_assoc($result)){ echo '<marker mod0="'.$row['mod0'].'" />'; echo '<marker mod1="'.$row['mod1'].'" />'; echo '<marker mod2="'.$row['mod2'].'" />'; echo '<marker lla0="'.$row['lla0'].'" />'; echo '<marker lla1="'.$row['lla1'].'" />'; echo '<marker lla2="'.$row['lla2'].'" />'; echo '<marker namely="'.rawurlencode(stripslashes($row['namely'])).'" />'; echo '<marker message="'.rawurlencode(stripslashes($row['message'])).'" />'; echo '<marker dbMi="'.$row['model'].'" />'; } } echo '</markers>'; } //end if unLoader //function for calculating distance between latlon pairs, for range check /* not necessary for only a few visitors function dister($lat1,$lon1,$lat2,$lon2){ $R=6378100; $lat1*=pi()/180; $lon1*=pi()/180; $lat2*=pi()/180; $lon2*=pi()/180; $dLat=$lat2-$lat1; $dLon=$lon2-$lon1; $a=sin($dLat/2)*sin($dLat/2) +cos($lat1)*cos($lat2)* sin($dLon/2)*sin($dLon/2); $c=2*atan2(sqrt($a),sqrt(1-$a)); $di=$R*$c; $di=round($di,6); return $di; } */ ?>
в<?php require("db1.php"); //for using live public database //require("db.php"); //for using local database $inserter=0; //assign pid if have not already $pid=$_GET['pid']; if($pid=='false'){ $inserter=1; $query="SELECT id FROM positioner"; $result=mysql_query($query); $num_rows=mysql_num_rows($result); $i=1; while($row=@mysql_fetch_assoc($result)){ if($i!=$row['id']){ $pid=$i;break; } //take first available id $i++; } if($pid=='false'){ $pid=$num_rows+1; } //if no hole in id list, take next one higher mysql_free_result($result); } $unLoader=$_GET['unLoader']; if($unLoader=='true'){ $ddb=dbq("DELETE FROM positioner WHERE id = '".$pid."' LIMIT 1;"); }else{ $dbMi=$_GET['dbMi']; $mod0=$_GET['mod0']; $mod1=$_GET['mod1']; $mod2=$_GET['mod2']; $lla0=$_GET['lla0']; $lla1=$_GET['lla1']; $lla2=$_GET['lla2']; $rangeCheck=$_GET['rangeCheck']; $namely=addslashes($_GET['namely']); if($namely==''){ $namely='x'; } $message=addslashes($_GET['message']); $rangeCheck='true'; //only check range every x number of ticks (50, ~3 seconds)? // , $rangeCheck is true first time if($rangeCheck=='true'){ $ranger=array(); //get lat lon of all for determining who is in range $query="SELECT id, lla0, lla1 FROM positioner WHERE id != '".$pid."' "; $result=mysql_query($query); //if distance < 10000, put id in ranger array while($row=@mysql_fetch_assoc($result)){ //leave rangeCheck off for now //$di=dister($row['lla0'],$row['lla1'],$lla0,$lla1); //if($di<10000){ $ranger[]=$row['id']; //} } mysql_free_result($result); if(count($ranger)==0){ $rangerS=''; }else{ $rangerS=implode(",", $ranger); } //between rangeChecks get ranger array from js }else{ $rangerS=$_GET['ranger']; // $rangerS: string(for inserting) $ranger=explode(",",$rangerS); // $ranger: array(for looping) } //insert new row first time if($inserter==1){ $idb=dbq("INSERT positioner (id,mod0,mod1,mod2,lla0,lla1,lla2,ranger,namely,message,model) VALUES ('".$pid."', '".$mod0."', '".$mod1."', '".$mod2."', '".$lla0."', '".$lla1."', '".$lla2."', '".$rangerS."', '".$namely."', '".$message."', '".$dbMi."');"); }else{ //update the database with current model data and result of range check $udb=dbq("UPDATE positioner SET mod0 = '".$mod0."', mod1 = '".$mod1."', mod2 = '".$mod2."', lla0 = '".$lla0."', lla1 = '".$lla1."', lla2 = '".$lla2."', ranger = '".$rangerS."', namely = '".$namely."', message = '".$message."', model = '".$dbMi."' WHERE id = '".$pid."' LIMIT 1;"); } header("Content-type: text/xml"); echo '<markers>'; echo '<marker ranger="'.$rangerS.'" pid="'.$pid.'" />'; //loop through a number of times equal to number of id's in ranger array foreach($ranger as $rang){ $query="SELECT mod0, mod1, mod2, lla0, lla1, lla2, namely, message, model FROM positioner WHERE id = '".$rang."' "; $result=mysql_query($query); while ($row=@mysql_fetch_assoc($result)){ echo '<marker mod0="'.$row['mod0'].'" />'; echo '<marker mod1="'.$row['mod1'].'" />'; echo '<marker mod2="'.$row['mod2'].'" />'; echo '<marker lla0="'.$row['lla0'].'" />'; echo '<marker lla1="'.$row['lla1'].'" />'; echo '<marker lla2="'.$row['lla2'].'" />'; echo '<marker namely="'.rawurlencode(stripslashes($row['namely'])).'" />'; echo '<marker message="'.rawurlencode(stripslashes($row['message'])).'" />'; echo '<marker dbMi="'.$row['model'].'" />'; } } echo '</markers>'; } //end if unLoader //function for calculating distance between latlon pairs, for range check /* not necessary for only a few visitors function dister($lat1,$lon1,$lat2,$lon2){ $R=6378100; $lat1*=pi()/180; $lon1*=pi()/180; $lat2*=pi()/180; $lon2*=pi()/180; $dLat=$lat2-$lat1; $dLon=$lon2-$lon1; $a=sin($dLat/2)*sin($dLat/2) +cos($lat1)*cos($lat2)* sin($dLon/2)*sin($dLon/2); $c=2*atan2(sqrt($a),sqrt(1-$a)); $di=$R*$c; $di=round($di,6); return $di; } */ ?>
в<?php require("db1.php"); //for using live public database //require("db.php"); //for using local database $inserter=0; //assign pid if have not already $pid=$_GET['pid']; if($pid=='false'){ $inserter=1; $query="SELECT id FROM positioner"; $result=mysql_query($query); $num_rows=mysql_num_rows($result); $i=1; while($row=@mysql_fetch_assoc($result)){ if($i!=$row['id']){ $pid=$i;break; } //take first available id $i++; } if($pid=='false'){ $pid=$num_rows+1; } //if no hole in id list, take next one higher mysql_free_result($result); } $unLoader=$_GET['unLoader']; if($unLoader=='true'){ $ddb=dbq("DELETE FROM positioner WHERE id = '".$pid."' LIMIT 1;"); }else{ $dbMi=$_GET['dbMi']; $mod0=$_GET['mod0']; $mod1=$_GET['mod1']; $mod2=$_GET['mod2']; $lla0=$_GET['lla0']; $lla1=$_GET['lla1']; $lla2=$_GET['lla2']; $rangeCheck=$_GET['rangeCheck']; $namely=addslashes($_GET['namely']); if($namely==''){ $namely='x'; } $message=addslashes($_GET['message']); $rangeCheck='true'; //only check range every x number of ticks (50, ~3 seconds)? // , $rangeCheck is true first time if($rangeCheck=='true'){ $ranger=array(); //get lat lon of all for determining who is in range $query="SELECT id, lla0, lla1 FROM positioner WHERE id != '".$pid."' "; $result=mysql_query($query); //if distance < 10000, put id in ranger array while($row=@mysql_fetch_assoc($result)){ //leave rangeCheck off for now //$di=dister($row['lla0'],$row['lla1'],$lla0,$lla1); //if($di<10000){ $ranger[]=$row['id']; //} } mysql_free_result($result); if(count($ranger)==0){ $rangerS=''; }else{ $rangerS=implode(",", $ranger); } //between rangeChecks get ranger array from js }else{ $rangerS=$_GET['ranger']; // $rangerS: string(for inserting) $ranger=explode(",",$rangerS); // $ranger: array(for looping) } //insert new row first time if($inserter==1){ $idb=dbq("INSERT positioner (id,mod0,mod1,mod2,lla0,lla1,lla2,ranger,namely,message,model) VALUES ('".$pid."', '".$mod0."', '".$mod1."', '".$mod2."', '".$lla0."', '".$lla1."', '".$lla2."', '".$rangerS."', '".$namely."', '".$message."', '".$dbMi."');"); }else{ //update the database with current model data and result of range check $udb=dbq("UPDATE positioner SET mod0 = '".$mod0."', mod1 = '".$mod1."', mod2 = '".$mod2."', lla0 = '".$lla0."', lla1 = '".$lla1."', lla2 = '".$lla2."', ranger = '".$rangerS."', namely = '".$namely."', message = '".$message."', model = '".$dbMi."' WHERE id = '".$pid."' LIMIT 1;"); } header("Content-type: text/xml"); echo '<markers>'; echo '<marker ranger="'.$rangerS.'" pid="'.$pid.'" />'; //loop through a number of times equal to number of id's in ranger array foreach($ranger as $rang){ $query="SELECT mod0, mod1, mod2, lla0, lla1, lla2, namely, message, model FROM positioner WHERE id = '".$rang."' "; $result=mysql_query($query); while ($row=@mysql_fetch_assoc($result)){ echo '<marker mod0="'.$row['mod0'].'" />'; echo '<marker mod1="'.$row['mod1'].'" />'; echo '<marker mod2="'.$row['mod2'].'" />'; echo '<marker lla0="'.$row['lla0'].'" />'; echo '<marker lla1="'.$row['lla1'].'" />'; echo '<marker lla2="'.$row['lla2'].'" />'; echo '<marker namely="'.rawurlencode(stripslashes($row['namely'])).'" />'; echo '<marker message="'.rawurlencode(stripslashes($row['message'])).'" />'; echo '<marker dbMi="'.$row['model'].'" />'; } } echo '</markers>'; } //end if unLoader //function for calculating distance between latlon pairs, for range check /* not necessary for only a few visitors function dister($lat1,$lon1,$lat2,$lon2){ $R=6378100; $lat1*=pi()/180; $lon1*=pi()/180; $lat2*=pi()/180; $lon2*=pi()/180; $dLat=$lat2-$lat1; $dLon=$lon2-$lon1; $a=sin($dLat/2)*sin($dLat/2) +cos($lat1)*cos($lat2)* sin($dLon/2)*sin($dLon/2); $c=2*atan2(sqrt($a),sqrt(1-$a)); $di=$R*$c; $di=round($di,6); return $di; } */ ?>
Некоторые заметки.
pid
. Правильная вещь (для MySQL) будет использовать столбец с автоматическим увеличением, так что вам не нужно беспокоиться об этом беспорядке. DELETE FROM
содержит уязвимость SQL Injection . Если pid
не является строкой 'false'
, она никогда не будет проверена. Кто-то может уничтожить всю таблицу positioner
. Как вы защищаете его? Что ж… addslashes
. Это не запах кода, это запах кода. addslashes
никогда, никогда в любой момент за всю историю вычислений не было правильной вещи для использования *. Я думаю, вы ищете реальный механизм экранирования базы данных. Поскольку вы используете жестокий интерфейс «mysql», вы хотите mysql_real_escape_string
. lla1
и lla2
? Это лучшие и наиболее описательные имена столбцов, которые вы могли бы придумать? Я собираюсь предположить, что это пары широты / долготы. SELECT
. INSERT
вы, возможно, слепо доверяете $rangerS
. SQL Injection ahoy! UPDATE
. 'true'
и string 'false'
, но они исходят из плохого Javascript. Подумайте о том, чтобы представить их вместо 1
и 0
. Кроме того, пожалуйста, рассмотрите возможность использования современной библиотеки Javascript, такой как jQuery, вместо того, чтобы сворачивать ваши собственные биты Ajax. Это сэкономит вам время и напряжение. Я думаю, что основная проблема здесь – это, по сути, первоначальная проверка pid
. Я готов поспорить, что вы всегда получаете новый или неправильный pid
из таблицы, потому что id
вряд ли идеально соответствует количеству строк. Затем вы делаете « INSERT
проверки ошибок с помощью «нового» pid
, но если ваши индексы спроектированы правильно, это приведет к ошибке с повторяющейся ключевой ошибкой. Поэтому никаких обновлений нет. Но это всего лишь предположение. Помимо уязвимостей здесь, я не уверен, что полностью понимаю, что происходит, и я не вижу ничего явно неправильного.
Здесь есть еще одна проблема. Я собираюсь предположить, что pid
означает идентификатор игрока из контекста. Ваш код слепо доверяет тому, что запрос поступает от игрока, которому принадлежит этот pid
, но каждый может просто сделать запрос здесь с любым действительным pid
и сделать ходы для людей в результате. Я не уверен, что ты намереваешься это сделать.
* Хорошо, может быть, кто-то нашел addslashes
полезным один или два раза …