2015-05-05 2 views
1

Мне нужно обновить текущее значение поля БД путем добавления или вычитания числового значения. Я рассмотрел «предлагаемые ответы» и не нашел решения моей проблемы. Поле в моей БД - это название «кредиты», и оно имеет значение по умолчанию «0». Механизм DB обозначается InnoDB. Я использую процедурное кодирование PHP и после мой код в настоящее время:Инкрементное поле БД обновления

Задаваемые переменные

$id=$_SESSION['user_id']; //id number for user 
    $amount=$_POST['Amount']; //value of charges 12 character string 
    $amount=ltrim($amount, '0'); //eliminates leading 0's 
    $credit=$amount/1000; //converts value to credits 
    $credit=number_format($credit, 2); //formats credits with two decimal points 

Я тогда установить соединение с базой данных и выполнить следующие запросы

$q="select credits from registration WHERE user_id=$id"; 
    $r=mysqli_query ($dbc, $q); 
    $update="UPDATE registration SET credits = credits + $credit WHERE user_id=$id"; 

Если я «эхо» переменные Я вижу все значения, но «обновление» терпит неудачу. Используя процедурное кодирование php, что нужно пересмотреть для постепенного обновления поля «кредиты»?

+0

Каков тип столбца 'credits' и какая ошибка вы получаете? – Alfwed

+0

столбец маленький (7), и я не получил сообщение об ошибке. – Learner

+0

Не уверен, но похоже, что вы пытаетесь сохранить поплавок как целое. –

ответ

0
//**i hope this helps** 

<?php 
$id=$_SESSION['user_id']; //id number for user 
$amount=$_POST['Amount']; //value of charges 12 character string 
$amount=ltrim($amount, '0'); //eliminates leading 0's 
$credit=$amount/1000; //converts value to credits 
$credit=number_format($credit, 2); //formats credits with two decimal points 

$credits; // the credits from query select will be stored here 

/* edit with your database parameters */ 
     $mysqli = new mysqli($host, $user, $password, $db); 

     if(mysqli_connect_errno()) { 
      echo "Connection Failed: " . mysqli_connect_errno(); 
      exit(); 
     } 

     mysqli_set_charset($mysqli,"utf8"); 

if($stmt = $mysqli -> prepare("select credits from registration WHERE user_id=?")) 
{ 
$stmt -> bind_param("i", $id); //'i' means that ? is an integer value, and $id is the parameter for this value 
$stmt -> execute(); 
$stmt -> bind_result($credits); 
$stmt -> fetch(); 
$stmt -> close(); 

$total=$credits+$credit; 
if($stmt = $mysqli->prepare("UPDATE registration SET credits = ? WHERE user_id=?")) 
{ 
    $stmt->bind_param("di",$total,$id); 
    $stmt->execute(); 
    echo 'oki doki'; 
    $stmt->close(); 
} 

} 

?> 
+0

Данте, я решил сделать подход «$ total = $ credits + $ credit», как вы предлагаете, и ваш ответ вдохновил меня расширить мои знания. Мне действительно нужно узнать больше о подготовленных утверждениях и связанных параметрах. Спасибо. – Learner

0

Для закрытия я хотел бы предоставить кодировку, которая исправила бы мою проблему, и это может помочь любому, кто рассматривает это сообщение. Я действительно верю, что решение Dante с использованием «подготовленных заявлений» лучше всего, но вот как я решил свою проблему.

строк кода дополнения:

$row = mysqli_fetch_array($r, MYSQLI_ASSOC); 
    $cr= sprintf ("%s", $row["credits"]); //assign results to a variable 

    $ttl=$cr+$credit; 

Пересмотренный запрос обновление:

$update="UPDATE registration SET credits=$ttl WHERE user_id=$id"; 
    $r = mysqli_query ($dbc, $update) or trigger_error("Query: $update\n<br />MySQL Error: " . mysqli_error($dbc)); 

Это работало просто отлично, и я нуждался в $ ТТЛ и $ кредитные переменные в сообщениях для пользователя. Надеюсь, это поможет.

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