2017-03-18 29 views
-3

私はいつも最近までうまく働いていますvBulletinによってプラグインを実行私はそれが何をすべき道を働いて計算イマイチを5.4から5.5にApacheとPHPをアップグレードし、suddonly:

$RUser = $row2['reputation']; 
$RUserMinus = $RUser-1; 

$ RuserMinusの結果は$ Ruser -1の代わりに-1で置き換えられますので、結果の代わりに$ RUserMinus = "-1"となります。

FULL SCRIPT

$query2 = $db->query_read("SELECT reputation FROM user WHERE userid =" . $vbulletin->userinfo['userid']) or die(mysql_error()); 

while($row2 = mysql_fetch_array($query2)) { 
$RUser = $row2['reputation']; 
} 
$RUserMinus = $RUser-1; 

$vbulletin->db->query_write("UPDATE user SET reputation=".$RUserMinus." WHERE userid=".$vbulletin->userinfo['userid']) or die (mysql_error()); 
} 
+1

'のvar_dump($ RUSERを);'や 'のvar_dump($ ROW2は、[ '評判');'かを示して? –

+1

'$ row2 ['reputation']'これは '0' –

+1

となるでしょうか、これはdb関連ではありませんか?十分なコードではないかもしれない –

答えて

-1

いくつかのことを変更して最終的にソートしました。イムこの出くわすと答え必要が誰のためにこれを投稿:

if(in_array($foruminfo['forumid'], $forums) && $vbulletin->userinfo['userid'] !== $threadinfo['postuserid'] && !is_member_of($vbulletin->userinfo, 14)){ 
    // Update Original Poster Rep to reflect the + 1 change 
    $vbulletin->db->query_write("UPDATE user SET reputation = reputation + 1 WHERE userid = " . $threadinfo['postuserid']) or die (mysql_error()); 

    // Update Replying Users Rep to reflect the -1 change 
    $vbulletin->db->query_write("UPDATE user SET reputation = reputation - 1 WHERE userid = " . $vbulletin->userinfo['userid']) or die (mysql_error());  
} 
0

私はあなたのDBオブジェクトの間違ったを使用している、あなたはDBオブジェクトでMySQLの機能を混在させるべきではないと思います。

1つの行だけが必要な場合は、query_firstを使用します。

エラーをチェックするには、dbのエラーメソッドを使用してください。

これらの問題が発生しないようにするには、データベースから行が返されないシナリオを処理する必要があります。

$row2 = $db->query_first("SELECT reputation FROM user WHERE userid =" . $vbulletin->userinfo['userid']) or die($db->error()); 
if(!$row2){ 
    die("User not found!"); 
}else{ 
    $RUserMinus = $RUser-1; 
    $vbulletin->db->query_write("UPDATE user SET reputation=".$RUserMinus." WHERE userid=".$vbulletin->userinfo['userid']) or die ($db->error()); 
} 

より良いデバッグ

私はコメントに同意する - 問題は他の場所であり、あなたが$row2あなたが

  • $row2がなかった場合は、この結果になるだろう 期待されているデータが含まれて検証する必要があります配列
  • $row2キーを含まない'reputation'
  • $row2['reputation']は、0,null,falseまたは非数値タイプです。

    ini_set('display_errors', 1); 
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 
    

    でも:私はまた、あなたがそのような問題を警告するためにいくつかの有用なメッセージを見ると同じように警告と通知を表示するようにエラー報告を設定することをお勧めvar_dump($row2);

    を実行している推薦

私はxdebugを見て、プロのようにデバッグを始めることができます。this tutorial

+0

残念ながら、それはまだ値-1の代わりに-1になります – AYCE

+0

デバッグのアドバイスに従ったことがありますか?あなたのvar dump出力は何ですか? error_reportingコードを追加しましたか?メッセージが表示されましたか? – Theo