0

このスクリプト:

 <?php    
    $myfamille=$_POST['myfamille'];

    $conn = odbc_connect('sage','<Administrateur>','');

    if (!$conn) 
    {exit("Connection Failed: " . $conn);} 




    $sql="Select F_ARTSTOCK.AR_Ref,AR_Design,AS_QteSto 
    FROM F_ARTICLE,F_FAMILLE,F_ARTSTOCK
    where F_ARTICLE.FA_CodeFamille=F_FAMILLE.FA_CodeFamille
    AND F_ARTICLE.AR_Ref=F_ARTSTOCK.AR_Ref
    AND F_FAMILLE.FA_CodeFamille='".$myfamille."'
    and F_ARTSTOCK.AS_QteSto <> 0";

    $rs=odbc_exec($conn,$sql);
    if (!$rs) 
    {exit("Error in SQL");} 
    while($e=odbc_fetch_object($rs))
           {$output[]=$e;}
    print(json_encode($output));
    ?>

このエラーを教えてください:

Notice: Undefined variable: output in C:\wamp\www\articlecbase.php on line 24

この行を削除するとコードが機能し、何が問題なのかわからないことに注意してください

AND F_FAMILLE.FA_CodeFamille='".$myfamille."'

また、同様のスクリプトがありますが、SQLサーバーを使用すると正常に動作します

<?php
 $myservername=$_POST['myservername'];
$servername=".\\".$myservername;
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$db_name="bijou";
$myfamille=$_POST['myfamille'];
  $connectionInfo = array( "Database"=>$db_name, "UID"=>$myusername, "PWD"=>$mypassword);
$conn = sqlsrv_connect( $servername, $connectionInfo);

if (!$conn) 
{exit("Connection Failed: " . $conn);} 


$sql="Select F_ARTSTOCK.AR_Ref,AR_Design,AS_QteSto FROM F_Article,F_Famille,F_ARTSTOCK
where F_ARTICLE.FA_CodeFamille=F_FAMILLE.FA_CodeFamille
AND F_ARTICLE.AR_Ref=F_ARTSTOCK.AR_Ref
AND F_FAMILLE.FA_CodeFamille='".$myfamille."' and F_ARTSTOCK.AS_QteSto != .000000";


$rs=sqlsrv_query($conn,$sql); 
if (!$rs) 
{exit("Error in SQL");} 

while($e=sqlsrv_fetch_object($rs))
       { $output[]=$e;}

print(json_encode($output));
?>

これもodbcで動作します:

     <?php    
$myusername=$_POST['myusername'];
$conn = odbc_connect($myusername,'<Administrateur>','');

if (!$conn) 
{exit("Connection Failed: " . $conn);} 

$sql="SELECT   FA_CodeFamille AS FA_CodeFamille,FA_Intitule AS FA_Intitule FROM   F_FAMILLE";
$rs=odbc_exec($conn,$sql);

if (!$rs) 
{exit("Error in SQL");} 
while($e=odbc_fetch_object($rs))
       { $output[]=$e;}
print(json_encode($output));

?>

私を助けてください。よろしく


$output = array();
while($e=odbc_fetch_object($rs)) {
    $output[] = $e;
}

多くのスクリプトで問題なく動作しています。何か助けてください

4

1 に答える 1

3

使用する前に変数が宣言されていないため、PHP は不平を言っています。

$output = array();
while($e=odbc_fetch_object($rs)) {
    $output[] = $e;
}

それ以外の場合、while ループに入らない場合、変数は宣言されないため、 when youjson_encode($output)output存在しません。

また、古い ODBC アプローチを放棄して、PDO (または少なくとも PDO ODBC ドライバー) を使用することをお勧めします。

さらに、コードは SQL インジェクションに対してオープンです。準備されたステートメントを使用するか、クエリに補間する文字列を適切にエスケープする必要があります。つまり、odbc_prepareを調べる必要があります。

また、 $_POST['key'] が設定されることは保証されません。常に次のようなものを使用する必要があります。

$blah = (isset($_POST['blah'])) ? $_POST['blah'] : null;

また

$blah = (array_key_exists($_POST['blah'])) ? $_POST['blah'] : null;

または、あなたが私のように特に偏執的である場合:

$blah = (array_key_exists($_POST['blah']) && is_string($_POST['blah'])) ? $_POST['blah'] : null;

ユーザーが PHP でそれを配列として解析する場合、配列を関数に渡すとエラーが発生する可能性があります。これにより、PHP が不必要に通知/エラーを生成する可能性があるため、その可能性は避けたいと考えています。

$_GET['test'](強制的に配列にする例は次のようになりますpage.php?test[]=blah)

于 2012-05-23T21:26:47.030 に答える