こんにちは、コードに問題があります。 月末にアカウントの支払いファイルを更新するためです。 コメントが記載されています
コード (//) で。
#1)変数を数値として定義する方法(いくつかの例を試しました(フォーラムとマニュアル)
#2) いくつかの変数を一緒に追加して、数値として知られるようにする方法 (データベースではすべて 10 進数の 8,2 です)
#3) 誰か「未定義の変数: mysql」について説明してください。
";echo date('m/d/y');echo "
";
$due=0;
$prevbal="prevbal";
$latechg="latechg";
$secdep="secdep";
$damage="damage";
$courtcost="courtcost";
$nsf="nsf";
$amtdue="amtdue";
$amtpaid="amtpaid";
$paidsum="paidsum";
$due = $prevbal + $latechg + $secdep + $damage + $courtcost + $nsf; // Warning: A non-numeric value encountered x 5 line 21
$amtdue = $amtdue + $due; Warning: // A non-numeric value encountered x 1 line 22
// if no payment or partial payment, add $10 to latechg field and amount not paid to prevbal field
if ($amtpaid < $amtdue) // Notice: Undefined variable: amtpaid
{ $latechg = $latechg + 10; $prevbal = $amtdue - $amtpaid; }
// if payment = amtdue clear due
if ($amtpaid == $amtdue) // Notice: Undefined variable: amtpaid
{ $prevbal = 0; $latechg = 0; }
// if over-payment subtract over-payment
// from prevbal field
if ($ampaid > $amtdue ) // Notice: Undefined variable: amtpaid
{ $amtdue = $amtpaid - $amtdue; $prevbal = 0; $latechg = 0; }
$secdep = 0; $damage = 0; $courtcost = 0; $nsf = 0;
// refresh every record - give every record the below values
$amtpaid = '0.00';
$hudpay = '0.00';
$datepaid = ' ';
$paidsum = '0.00';
$comments=" ";
// Perform a query, check for error
if (!$mysqli -> query("UPDATE payfile SET // Undefined variable: mysqli
Fatal error: Uncaught Error: Call to a member function query() on null
prevbal="$prevbal",latechg='$latechg', hudpay='$hudpay', amtpaid='$amtpaid',
datepaid='$datepaid', comment="$comment", paidsum='$paidsum'
where unit = $unit"));
mysqli_query($sql) or die(mysql_error());
?>
these are error messages:
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21
Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 22
Notice: Undefined variable: ampaid in C:xampphtdocspropertyrefreshpayments.php on line 32
Notice: Undefined variable: mysqli in C:xampphtdocspropertyrefreshpayments.php on line 44
Fatal error: Uncaught Error: Call to a member function query() on null on line 44
数値以外の変数については、11 行目で文字列に設定しています。
$courtcost="courtcost";
また、他の mysql エラーは、おそらく 2 つの異なるスタイルの PHP (MySQLi Procedural を接続し、MySQLi オブジェクト指向のように見えるクエリを実行する) を使用しているという事実に起因します。
クエリを実行するときは、未定義の変数 ($mysqli) ではなく、接続変数 ($link) を使用する必要があります。
すべてのデータベース コードが同じタイプであり、正しい変数を使用して正しく構成されていることを確認する必要があります。 この一連の記事を参考にしてください。
これはもっと近いと思います。数値エラーはなくなりましたが、残ったエラーはコードにコメントされています。 アドバイスありがとうございます。
";echo date('m/d/y');echo "
";
//connect to database
$mysqli = new mysqli("localhost", "root", "", "prerentdb");
//check for errors
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
//MySqli Select Query
$res = $mysqli->query("SELECT * FROM payfile");
//fetch query
$row = $res->fetch_assoc();
$due=0;
//display results
/* echo $row['amtdue'];
echo $row['amtpaid'];
echo $row['prevbal'];
echo $row['latechg'];
echo $row['secdep'];
echo $row['damage'];
echo $row['courtcost'];
echo $row['nsf'];
echo $row['paidsum'];
echo $row['comments']; */
if ($result = $mysqli->query($sql)) { // Undefined variable: sql& Warning: Empty query
while($obj = $result->fetch_object()){
$due = $obj->prevbal + $obj->latechg + $obj->secdep + $obj->damage + $obj->courtcost + $obj->NSF;
$amtdue = $obj->amtdue + due;
// do these need to be variables or can your code just use $obj?
$prevbal =$obj->prevbal;
$latechg = $obj->latechg;
$secdep = $obj->secdep;
$damage = $obj->damage;
$courtcost = $obj->courtcost;
$nsf = $obj->nsf;
// if no payment or partial payment, add $10 to latechg field and amount not paid to prevbal field
if ($amtpaid < $amtdue)
{ $latechg = $latechg + 10; $prevbal = $amtdue - $amtpaid; }
// if payment = amtdue clear due
if ($amtpaid == $amtdue)
{ $prevbal = 0; $latechg = 0; }
// if over-payment subtract over-payment
// from prevbal field
if ($ampaid > $amtdue )
{ $amtdue = $amtpaid - $amtdue; $prevbal = 0; $latechg = 0; }
$secdep = 0; $damage = 0; $courtcost = 0; $nsf = 0;
// refresh every record - give every record the below values
$amtpaid = '0.00';
$hudpay = '0.00';
$datepaid = ' ';
$paidsum = '0.00';
$comments=" ";
// Perform a query, check for error
if (!$mysqli -> query("UPDATE payfile SET
prevbal="$prevbal",latechg='$latechg', hudpay='$hudpay', amtpaid='$amtpaid',
datepaid='$datepaid', comment="$comment", paidsum='$paidsum'
where unit = $ unit"));
mysqli_query($sql) or die(mysql_error());
}
}
$result->close(); // Fatal error: Call to a member function close() on bool
?>
-
あなたが呼ぶ
mysqli->query($sql);
しかし、あなたはと呼ばれる変数を持っていません$sql
– エラーメッセージがこれを示しています。 ここでクエリを実行するつもりでしたか? あなたはすでに実行しましたselect * from payfile
そして、最初の結果を取得しました$row
さらに数行前に。 別のクエリを実行する代わりに、これらの結果をループするべきではありませんか? そうでない場合、結果に対して何もしない最初のクエリのポイントは何でしたか? -
「bool のメンバー関数 close() への致命的なエラー呼び出し」は、エラー 1 のためにクエリが実行されなかったためです。
$result
はfalse
、結果ポインターではありません。 そもそも開かれていないものを閉じることはできません。 いずれにせよ、結果オブジェクトを閉じることはめったにありません。スクリプトが終了すると自動的に閉じられるからです。 どうしても閉じたい場合は、内側で閉じてください。if()
節であり、正常に開かれた場合にのみ閉じます。 -
これらは変数である必要がありますか、それとも obj を使用できますか? – そのために変数を作成しても意味がないので、オブジェクトを直接使用できます。
-
mysqli_query($sql) or die (mysql_error())
– 繰り返しますが、クエリを実行しようとしています$sql
その変数をどこにも定義していない場合、最初のエラーを修正すると、ここでエラーが発生します。 次に、古い、最新から削除された PHP を使用します。mysql_error()
コードの残りの部分は mysqli を使用していますが。 1 つのクエリが途中で失敗した場合に、コードがループから抜け出すことを本当に望んでいますか? ループの処理を続行したいですか? これは残高を更新しているため、コードを再実行する必要がある場合、あらゆる種類の問題が発生します。
このビットでは:
// Perform a query, check for error
if (!$mysqli -> query("UPDATE payfile SET
prevbal="$prevbal",latechg='$latechg', hudpay='$hudpay', amtpaid='$amtpaid',
datepaid='$datepaid', comment="$comment", paidsum='$paidsum'
where unit = $ unit"));
のポイントは何ですか if()
このクエリを囲む句は? あなたは持っていません else
またはクエリが実行されたかどうかに依存する条件付きのもの。 そして、どこで $unit
から来る? あなたのコードのどこにもそれはありません。 また、次のように指定する必要があると思います $unit
としてではなく $ unit
、ただし、Prepared Statements に変更すると修正できます。
コードを一貫してインデントすると、はるかに読みやすくなります。 そのようなクエリに変数を連結する代わりに、Prepared Statements も確認する必要があります。
このコードは以前にここで見たことがあると確信しています。
2いいね
「レンタル決済」プログラミング教室の練習です。
@ckguitarz、これを行うためにテーブルの金額を更新しないでください。 値に影響を与える +/- トランザクションごとに新しいデータ行を INSERT してから、SQL クエリで金額を SUM() して、いつでも現在の残高を取得する必要があります。 月末に、すべてのレコードの延滞料金を計算するときに、支払額が未払い額よりも少ないユニット (アカウント) 番号の延滞料金額を含む新しい行を INSERT します。 また、異なる列に異なるタイプの金額を分散させるのではなく、単一の type_id 列と、型定義の id/name データを保持するデータベース テーブルを用意します。
1 いいね
トランザクションなしで合計を維持することは、経理では悪いことであり、両方を維持することは、最終的には同意しないことを意味します。 トランザクションを保持し、必要に応じて合計するだけです。
1 いいね
このトピックは、最後の返信から 91 日後に自動的にクローズされました。 新しい返信は許可されなくなりました。