PHP проблема
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



PHP проблема Expand / Collapse
Автор
Сообщение
13.06.2007 10:43
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.06.2007 15:50
Сообщ.: 3, Visits: 6
Здравствуйте. У меня проблема. Как сделать проверку

Если в таблице user_item с char_id=$top['char_id'] есть item_type='4037'

то он делает апдейт запрос, а если нету то делает инсерт. Подскажите Пожалуйста.

<?
If ($_GET['smsnumber']==1111)
{
$coin=1;
}
Elseif ($_GET['smsnumber']==2222)
{
$coin=2;
}
Elseif ($_GET['smsnumber']==3333)
{
$coin=3;
}
mssql_connect ("", "sa", "") or die ('MySQL connect failed');
mssql_select_db("lin2world") or die('Cannot connect to database');
$sql = mssql_query("select * from user_data where char_name='".$_GET['nick']."'") or die ("Query failed");
while ($top = mssql_fetch_array($sql)) {

$ddd = mssql_query("select * from user_item where char_id='".$top['char_id']."' and item_type='4037'") or die ("Query failed");
while ($vvv = mssql_fetch_array($ddd)) {
$account=$vvv['amount']+$coin;
$ttt = mssql_query("update user_item set amount='".$account."' where char_id='".$top['char_id']."' and item_type='4037'") or die ("Query failed");
}
}
?>

Сообщ. #914042
13.06.2007 11:10
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Раз у тебя MS SQL Server, то все можно сделать в одном запросе

mssql_query(
    "IF EXISTS (SELECT * FROM user_item WHERE char_id='".$top['char_id']."' AND item_type='4037'".
    "    UPDATE user_item SET ....".
    " ELSE ".
    " INSERT .... "
);

Кроме того зря ты подключаешься к базе как администратор. Это очень опасно. Особенно с учетом того что в твоем коде нет проверки вводимых пользователем данных и твой код уязвим для SQL Injection атак.

Сообщ. #914051
13.06.2007 11:32
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.06.2007 15:50
Сообщ.: 3, Visits: 6
Может я что-то не так пишу, но у меня выдает ошибку вот такую:

Warning: mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\coinofluck.php on line 18

<?
If ($_GET['smsnumber']==1111)
{
$coin=1;
}
Elseif ($_GET['smsnumber']==2222)
{
$coin=2;
}
Elseif ($_GET['smsnumber']==3333)
{
$coin=3;
}
mssql_connect ("", "sa", "") or die ('MySQL connect failed');
mssql_select_db("lin2world") or die('Cannot connect to database');
$sql = mssql_query("select * from user_data where char_name='".$_GET['nick']."'") or die ("Query failed");
while ($top = mssql_fetch_array($sql)) {
while ($vvv = mssql_fetch_array($ddd)) {
$account=$vvv['amount']+$coin;
$ddd = mssql_query("IF EXISTS (SELECT * FROM user_item WHERE char_id='".$top['char_id']."' AND item_type='4037'"." update user_item set amount='".$account."' where char_id='".$top['char_id']."' and item_type='4037'"." ELSE "." INSERT INTO user_item (char_id,item_type,amount) VALUES (".$top['char_id'].",4037,".$account.")");
}
}
?>

Сообщ. #914052
13.06.2007 12:07
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
В запросе есть ошибки. Я забыл закрыть скобку и в INSERTе по-моему не хватает кавычек. Изменения выделены красным.

mssql_query("IF EXISTS (SELECT * FROM user_item WHERE char_id='".$top['char_id']."' AND item_type='4037')"." UPDATE user_item SET amount='".$account."' WHERE char_id='".$top['char_id']."' AND item_type='4037'"." ELSE "." INSERT INTO user_item (char_id,item_type,amount) VALUES ('".$top['char_id']."','4037','".$account."')");

Обрати внимание что результат mssql_query не нужно запонимать, потому что он все равно пустой.

Вообще в таких случаях помогает распечатка запроса. Так проще визуально выделить ошибки.

Сообщ. #914053
13.06.2007 12:41
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.06.2007 15:50
Сообщ.: 3, Visits: 6
Я немного переписал скрипт и получилось вот это. Незнаю как на php делать result

<?
If ($_GET['smsnumber']==1111)
{
$coin=1;
}
Elseif ($_GET['smsnumber']==2222)
{
$coin=2;
}
Elseif ($_GET['smsnumber']==3333)
{
$coin=3;
}
mssql_connect ("", "sa", "") or die ('MySQL connect failed');
mssql_select_db("lin2world") or die('Cannot connect to database');
$sql = mssql_query("select * from user_data where char_name='".$_GET['nick']."'") or die ("Query failed");
while ($top = mssql_fetch_array($sql)) {
$ggg = mssql_query("select * from user_item where char_id='".$top['char_id']."' and item_type='4037'") or die ("Query failed");
while ($fff = mssql_fetch_array($ggg)) {
If (mssql_result($ggg)=True)
{
echo "Сейчас сделаем Update запрос";
}
Elseif (mssql_result($ggg)=False)
{
echo "Cейчас сделаем insert запрос";

}
}
?>

Сообщ. #914054
13.06.2007 13:07
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Тебе поможет функция mssql_num_rows

$r = mssql_query("select * from user_item where char_id='".$top['char_id']."' and item_type='4037'");
if (FALSE !== $r)
{
    if (1 === mssql_num_rows($r))
    {
        // Update
    }
    else
    {
        // Insert
    }
}

Сообщ. #914058
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 7:13