неопределенный индекс с использованием оператора обновления

0

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

<?php

if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
$result = $mysqli->query( "SELECT * FROM Users WHERE Username ='$searchq'");
    if ($result){ 

        //fetch result set as object and output HTML
        if($obj = $result->fetch_object())
        {
            echo '<div class="booksearched">'; 
            echo '<form method="POST" id = "books" action="">';
            echo '<div class="book-content"><h3>Student Username: '.$obj->Username.'</h3>';
            echo '<br>';
            echo '<div class="book-content"><i>First Name: <b>'.$obj->FirstName.'</b></i></div>';
            echo '<div class="book-desc"><i>Last Name:<b> '.$obj->LastName.'</b></i></div>';
            echo '<br>';
            echo '<div class="book-qty"> Current Balance<b> '.$obj->Balance.'</b></div>';
            echo 'New Balance: <input type="number" name="newBalance" value = "1" min = "1" />';
            echo '<br><br>';
            echo '<button name="submit_btn" class="save_order">Top Up</button>';
            echo '</div>';
            echo '</form>';
            echo '</div>';
        }
    }
}

    $newBalance="";
$newBalance = $_POST['newBalance'];

if(isset($_POST['submit_btn']) ){
    $upsql = "UPDATE users SET Balance = Balance + '$newBalance' WHERE Username='" . $obj->Username . "'";
    $stmt = $mysqli->prepare($upsql);
    $stmt->execute();
}

?>

Ive пробовал несколько вещей, однако я продолжал получать сообщение об ошибке:

( ! ) Notice: Undefined index: newBalance 

Я не уверен, что я сделал неправильно. Любая идея, как это исправить?

Изменить: Полный код

<?php
session_start();
include_once("config.php");


?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search</title>
<link href="style/style.css" rel="stylesheet" type="text/css">
</head>
<body>

<br>
<div id="books-wrapper">

<!-- #content to center the menu -->
<div id="content">
    <!-- This is the actual menu --> 
    <ul id="darkmenu">
          <li><a href="adminHome.php">Home</a></li>
          <li><a href="addBook.php">New Books</a></li>
          <li><a href="adminSearch.php">Search</a></li>
          <li><a href="updateBalance.php">Update Balance</a></li>
    </ul>


</div>
    <div id = "welcome" >
        Welcome, <?=$_SESSION['Username'];?>! <br> <a href="logout.php">Logout</a>
    </div>

<br><br>
    <h1 id = "mainHeader" >Update a Students Balance</h1>
<br>   
<div id = "balanceupdate">
<form id = "adsearch" action="updateBalance.php"  method="post">
    <input type="text" name ="search" placeholder="Search For a Student">
    <button name="submit" value="search">Search</button>
</form>
<br>
</div>
<?php

if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
$result = $mysqli->query( "SELECT * FROM Users WHERE Username ='$searchq'");
    if ($result){

        //fetch result set as object and output HTML
        if($obj = $result->fetch_object())
        {
            echo '<div class="booksearched">'; 
            echo '<form method="POST" id = "books" action="">';
            echo '<div class="book-content"><h3>Student Username: '.$obj->Username.'</h3>';
            echo '<br>';
            echo '<div class="book-content"><i>First Name: <b>'.$obj->FirstName.'</b></i></div>';
            echo '<div class="book-desc"><i>Last Name:<b> '.$obj->LastName.'</b></i></div>';
            echo '<br>';
            echo '<div class="book-qty"> Current Balance<b> '.$obj->Balance.'</b></div>';
            echo 'New Balance: <input type="number" name="newBalance" value = "1" min = "1" />';
            echo '<br><br>';
            echo '<button name="submit_btn" class="save_order">Top Up</button>';
            echo '</div>';
            echo '</form>';
            echo '</div>';
        }
    }
}

    $newBalance="";

    if(isset($_POST['submit_btn']) && !empty($_POST['newBalance']) ){

        $newBalance = $_POST['newBalance'];

        $upsql = "UPDATE users SET Balance = Balance + '$newBalance' WHERE Username='" . $obj->Username . "'";
        $stmt = $mysqli->prepare($upsql);
        $stmt->execute();
    }

?>
</body>
</html>
  • 0
    Во-первых, у вас нет элемента формы, содержащего search атрибуту имени. Поэтому вам нужно использовать isset() для newBalance или поместить его ниже if(isset($_POST['submit_btn']) ){
  • 0
    у меня есть форма сверху <form action="search.php" id = "adsearch" method="post"> <input type="text" name ="search" placeholder="search for a category"> <button name="submit" value="search">Search</button> </form>
Показать ещё 3 комментария
Теги:
mysqli

1 ответ

6

Это бросает это уведомление, потому что вам нужно разместить $newBalance = $_POST['newBalance']; внутри if(isset($_POST['submit_btn'])){...} и убедитесь, что он не пуст (или задан).

$newBalance="";

if(isset($_POST['submit_btn']) && !empty($_POST['newBalance']) ){

$newBalance = $_POST['newBalance'];

    $upsql = "UPDATE users SET Balance = Balance + '$newBalance' 
              WHERE Username='" . $obj->Username . "'";
    $stmt = $mysqli->prepare($upsql);
    $stmt->execute();
}

Вы также можете использовать isset($_POST['newBalance']) вместо !empty($_POST['newBalance'])


Sidenote: вы можете добавить тип отправки для своей кнопки.

echo '<button type="submit" name="submit_btn" class="save_order">Top Up</button>';

Тем не менее, это может не потребоваться; попробуйте, если у вас все еще возникают проблемы.


Редактировать:

Под

echo '<div class="book-content"><h3>Student Username: '.$obj->Username.'</h3>';

Добавить

echo '<input type="hidden" name="username" value = "'.$obj->Username.'"  />';

то под

$newBalance = $_POST['newBalance'];

Добавить

$username = $_POST['username'];

и измените свой запрос, чтобы читать как

$upsql = "UPDATE users SET Balance = Balance + '$newBalance' 
          WHERE Username='".$username ."'";

Мое цитирование может быть немного для

echo '<input type="hidden" name="username" value = "'.$obj->Username.'"  />';

где вам, возможно, придется изменить его на

echo '<input type="hidden" name="username" value = '".$obj->Username."'  />';

Редактировать # 2:

Другой способ сделать это, поскольку вы уже используете сеансы <?=$_SESSION['Username'];?> - назначить ему переменную и передать ее в ваш запрос.

$username = $_SESSION['Username'];

$upsql = "UPDATE users SET Balance = Balance + '$newBalance' 
          WHERE Username='".$username ."'";

Редактировать # 3:

Где у вас есть

if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

замените его

if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

$student = $_POST['search'];
$_SESSION['student'] = $student;

echo $_SESSION['student']; // see what echos here

то в вашем запросе выполните:

$upsql = "UPDATE users SET Balance = Balance + '$newBalance' 
          WHERE Username='".$student ."'";
  • Если это не сработает, я не знаю, что еще нужно сделать, это поможет. Мои тесты были убедительными и работали. Ваш запрос может быть неудачным, у меня больше нет идей на данный момент.

Основываясь на этом сценарии:

$_POST['search'] = "student1";

$student = $_POST['search'];

$_SESSION['student'] = $student;

// echo $_SESSION['student'];

$student2 = $student;

echo $student2; // will echo student1
  • 0
    это, кажется, избавило от неопределенной ошибки индекса, но теперь я получаю: ( ! ) Notice: Undefined variable: obj line 78 и ( ! ) Notice: Trying to get property of non-object строки ( ! ) Notice: Trying to get property of non-object 78
  • 0
    @ resontant81 Код вашего вопроса содержит только 39 строк, что составляет лишь половину от того, что является ошибкой в номере строки. Итак, вам нужно выяснить, почему это так, и как это происходит из вашей базы данных. Весь этот блок кода для запроса UPDATE должен быть внутри в while петли вы можете иметь где - то.
Показать ещё 17 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню