2013-07-09 2 views
-2

Почему это только часть этого работает? Я добавил комментарий в рабочий раздел:Часть этого кода работает, но отдых не

session_start(); 
$_SESSION['views']=1; 
$pageon="edited"; 
$button=" "; 
$user=$_SESSION['username']; 

$otoon = $_POST['otoon']; 
$oserver = $_POST['oserver']; 
$toonname = mysql_real_escape_string($_POST['toonname']); 
$server = mysql_real_escape_string($_POST['server']); 
$guild = mysql_real_escape_string($_POST['guild']); 


echo $user . " " . $otoon . " " . $oserver . " " . $toonname . "<br />"; 

if (!empty($toonname)) { 
$tql="UPDATE 
     reguserstest AS rt 
     INNER JOIN 
      alt_toon AS att 
     ON 
      att.`toonname` = rt.`toonname` 
     SET 
      rt.`toonname` = CASE WHEN rt.`username`='$user' AND rt.`server`='$oserver' AND rt.`toonname`='$otoon' THEN '$toonname' 
       ELSE rt.`toonname` END , 

      att.`toonname` = CASE WHEN att.`username`='$user' AND att.`server`='$oserver' AND att.`toonname`='$otoon' THEN '$toonname' 
       ELSE att.`toonname` END 
     WHERE 
     (rt.`username`='$user' AND rt.`server`='$oserver' AND rt.`toonname`='$otoon') 
     OR 
     (att.`username`='$user' AND att.`server`='$oserver' AND att.`toonname`='$otoon')"; 
if (mysql_query($tql,$con)) 
     { 
      echo "Toon name updated to: " . $toonname . "<br />"; 
      } else { 
      echo "<h1>Error</h1>"; 
     } 
} 

//BEGINNING OF THE WORKING CODE!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
if (!empty($server)) { 
$sql="UPDATE 
     reguserstest AS rt 
     INNER JOIN 
      alt_toon AS att 
     ON 
      att.`server` = rt.`server` 
     SET 
      rt.`server` = CASE WHEN rt.`username`='$user' AND rt.`server`='$oserver' AND rt.`toonname`='$otoon' THEN '$server' 
       ELSE rt.`server` END , 

      att.`server` = CASE WHEN att.`username`='$user' AND att.`server`='$oserver' AND att.`toonname`='$otoon' THEN '$server' 
       ELSE att.`server` END 
     WHERE 
     (rt.`username`='$user' AND rt.`server`='$oserver' AND rt.`toonname`='$otoon') 
     OR 
     (att.`username`='$user' AND att.`server`='$oserver' AND att.`toonname`='$otoon')"; 
if (mysql_query($sql,$con)) 
     { 
      echo "Server updated to: " . $server . "<br />"; 
      } else { 
      mysql_error(); 
     } 
} 
//THE WORKING CODE ENDS HERE ---- WHY?????? 

if (!empty($guild)) { 
$gql="UPDATE 
     reguserstest AS rt 
     INNER JOIN 
      alt_toon AS att 
     ON 
      att.`guild` = rt.`guild` 
     SET 
      rt.`guild` = CASE WHEN rt.`username`='$user' AND rt.`server`='$oserver' AND rt.`toonname`='$otoon' THEN '$guild' 
      ELSE rt.`guild` END , 

      att.`guild` = CASE WHEN att.`username`='$user' AND att.`server`='$oserver' AND att.`toonname`='$otoon' THEN '$guild' 
      ELSE att.`guild` END 
     WHERE 
     (rt.`username`='$user' AND rt.`server`='$oserver' AND rt.`toonname`='$otoon') 
     OR 
     (att.`username`='$user' AND att.`server`='$oserver' AND att.`toonname`='$otoon')"; 
if (mysql_query($gql,$con)) 
     { 
      echo "Guild updated to: " . $guild . "<br />"; 
      } else { 
      echo mysql_error(); 
     } 
} 

Как я уже сказал, я могу получить $ server для обновления в 100% случаев. но $ toonname и $ guild не будут обновляться. Они оба переходят к «Toon name/Guild updated to: WHATEVER», но на самом деле они не пишут на стол.

+1

is $ guild empty? – Orangepill

+1

* Обязательно: * Функции 'mysql_ *' будут [устарели в PHP 5.5] (http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated). Не рекомендуется писать новый код, поскольку он будет удален в будущем. Вместо этого либо [MySQLi] (http://php.net/manual/en/book.mysqli.php), либо [PDO] (http://php.net/manual/en/book.pdo.php) и [быть лучшим разработчиком PHP] (http://jason.pureconcepts.net/2012/08/better-php-developer/). –

+3

Прочитайте о [SQL Injection] (http://php.net/manual/en/security.database.sql-injection.php) и соответствующим образом обновите свой код. –

ответ

0

Вы выполняете отдельные запросы обновления для каждого критерия; Я думаю, что происходит то, что предыдущие вмешиваются в более поздние. Я предлагаю их рационализации и упрощения SQL, тоже:

$userSQL = "UPDATE reguserstest SET "; 
$altSQL = "UPDATE alt_toon SET "; 

$toUpdate = array(); 

if (!empty($toonname)) { 
    $toUpdate[] = "toonname='" . $toonname . "'"; 
} 

if (!empty($server)) { 
    $toUpdate[] = "server='" . $server . "'"; 
} 

if (!empty($guild)) { 
    $toUpdate[] = "guild='" . $guild . "'"; 
} 

if (count($toUpdate)) { 
    $userSQL .= implode(",", $toUpdate) . " WHERE `username`='$user' AND `server`='$oserver' AND `toonname`='$otoon'"; 
    $altSQL .= implode(",", $toUpdate) . " WHERE `username`='$user' AND `server`='$oserver' AND `toonname`='$otoon'"; 

    mysql_query($userSQL) or die ("User query failed: " . mysql_error()); 
    mysql_query($altSQL) or die ("Alt query failed: " . mysql_error()); 
} 

Я не проверял это, но вы должны получить идею.

Он будет обновлять обе таблицы отдельно, по одному запросу за штуку. Он проверяет, установлено ли каждое поле и добавляет его в массив; если этот массив пуст, обновить нечего. В противном случае он запускает два запроса и умирает, если либо сбой.

Для повторного повторения комментариев - вы должны взглянуть на переход к mysqli_ или PDO для обеспечения безопасности, поскольку функции mysql_ устарели; Я определенно предлагаю тщательно проверить это, чтобы убедиться, что я нигде не изменял логику.

+0

, которые вы удивительны. спасибо – CSharpMinor

+0

Я просто рад, что это работает! – andrewsi

Смежные вопросы