2014-12-15 5 views
-3

по какой-то причине с моим кодом, если user_cardname уже существует в mysql, он не обновляет его, а помещает новый.У меня есть некоторые проблемы с моим кодом php

<?php 
require_once("config.php"); 
$auth_host = $GLOBALS['auth_host']; 
$auth_user = $GLOBALS['auth_user']; 
$auth_pass = $GLOBALS['auth_pass']; 
$auth_dbase = $GLOBALS['auth_dbase']; 
$user_name = stripslashes($_POST['username']); 
$user_donateamount = intval($_POST['DonateAmount']); 
$user_cardname = stripslashes($_POST['CardName']); 
$result = "fail"; 
$db = mysql_connect($auth_host, $auth_user, $auth_pass) or die (mysql_error()); 
if (mysql_select_db($auth_dbase,$db)) { 
    if ($sql = mysql_query("SELECT * FROM user WHERE name = '" . mysql_real_escape_string($user_name) . "'")) { 
     if ($row = mysql_fetch_array($sql)) { 
      if ($user_donateamount <= $row['credits']) { 
       if ($sql1 = mysql_query("SELECT * FROM scores WHERE name = '" . mysql_real_escape_string($user_cardname) . "'")) { 
        if($row = mysql_fetch_array($sql)) { 
         if (mysql_query("UPDATE scores SET score = score + $user_donateamount WHERE name = '" . mysql_real_escape_string($user_cardname) . "'")) { 
          mysql_query("UPDATE user SET credits = credits - $user_donateamount WHERE name = '" . mysql_real_escape_string($user_name) . "'"); 
          $result = "success"; 
         } 
        } else { 
         if (mysql_query("INSERT INTO scores (name,score) VALUES ('". mysql_real_escape_string($user_cardname) ."', $user_donateamount)")) { 
          mysql_query("UPDATE user SET credits = credits - $user_donateamount WHERE name = '" . mysql_real_escape_string($user_name) . "'"); 
$result = "success"; 
         } 
        } 
       } 
      } 
     } 
    } 
} 
mysql_close($db); 
echo $result; 

это то, что предполагают, чтобы случиться:

и вот HTML версия кода, который запускает этот PHP файл

https://www.dropbox.com/s/lhxwgzzgsl79h0r/testform.html?dl=0 спасибо

+0

Пожалуйста, [не используйте 'mysql_ *' функции] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php), они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и используйте [PDO] (http://us1.php.net/pdo) или [MySQLi] (http: // us1.php.net/mysqli). Вы также захотите [Запретить SQL Injection!] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+0

Вы можете иметь в виду if ($ row = mysql_fetch_array ($ sql1)) ... ваша логика жестока. Но в последнем случае если вы используете предыдущий sql, а не sql1. Но прочитайте, что сказал @JayBlanchard. –

ответ

0

Это потому, что вы используете неправильный $sql источник в шестом if-statement. Измените его на:

if($row = mysql_fetch_array($sql1)) { 

Таким образом, вы получите это:

if (mysql_select_db($auth_dbase,$db)) { 
    if ($sql = mysql_query("SELECT * FROM user WHERE name = '" . mysql_real_escape_string($user_name) . "'")) { 
     if ($row = mysql_fetch_array($sql)) { 
      if ($user_donateamount <= $row['credits']) { 
       if ($sql1 = mysql_query("SELECT * FROM scores WHERE name = '" . mysql_real_escape_string($user_cardname) . "'")) { 
        if($row = mysql_fetch_array($sql1)) { 
         if (mysql_query("UPDATE scores SET score = score + $user_donateamount WHERE name = '" . mysql_real_escape_string($user_cardname) . "'")) { 
          mysql_query("UPDATE user SET credits = credits - $user_donateamount WHERE name = '" . mysql_real_escape_string($user_name) . "'"); 
          $result = "success"; 
         } 
        } else { 
         if (mysql_query("INSERT INTO scores (name,score) VALUES ('". mysql_real_escape_string($user_cardname) ."', $user_donateamount)")) { 
          mysql_query("UPDATE user SET credits = credits - $user_donateamount WHERE name = '" . mysql_real_escape_string($user_name) . "'"); 
          $result = "success"; 
         } 
        } 
       } 
      } 
     } 
    } 
} 

И да, Jay Blanchard прав. Вы не должны использовать mysql_*. Просто прочитайте комментарий.

+0

Большое вам спасибо. и я недавно заметил это, и я планирую обновить код, но прежде всего закончу это, чтобы использовать его до тех пор. –

+0

ok Моя страница html работает, но моя страница C# в единстве не вытащит имя карты. ум помогает мне понять, почему? Я пробовал все, что мог придумать, но все выглядит правильно @ s.pols [link] (https://www.dropbox.com/s/01dwkicm4g8jy56/RequestManager.cs?dl=0) –

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