2016-06-11 11 views
-1

を返しません。しかし、私はNULLを取得します。ここでは関数が含まれたコードです:PHPの関数は、私は、PHPの関数から配列を抽出しようとしてきた配列

機能自体:

public static function priceIDToLabel($priceID){ 
    //Ermittelt mithilfe der PriceID das dazugehörige Ticket -> (label) 
    $conn = global_functions::connectdb(); 
    $errormsg = ''; 
    $sql = 'SELECT label FROM data WHERE priceID = ".$priceID."'; 
    $result = $conn->query($sql); 
    //$ticketLabel = array(); 
    while ($ticketLabel = $result->fetch_assoc()){ 

     $ticketLabel[] = $result->fetch_assoc(); 

    } 
    return($ticketLabel); 
} 

上記の関数から配列を表示する必要があるサイト:あなたはこの価格のために一つだけのラベルを持っている場合は

 <table> 
       <!-- WARUM wird $ticketLabel nicht gefüllt, bzw nicht angezeigt?! --> 
       <!-- Weil wegen isset! Und zu wenig Kaffee!.. --> 
     <?php 

      $ticketLabel['label'] = global_functions::priceIDToLabel($selTicket); 

      echo '<textarea readonly>' .$ticketLabel['label'] . ' </textarea>'; 

     ?> 


    </table> 
+0

のvar_dump($ ticketLabel)を使用してみてください。データベース – Fil

+0

から任意のリターンがあるかどうかを確認するために、クエリが正確に1行を返すことが期待されますか?単に 'fetch_assoc()' _twice_を呼び出すだけで、2度目はfalseを返します。 –

+0

あなたが(詳細:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)のような引数を渡すべきではありません –

答えて

1

あなたのループは無駄です。なぜなら、あなたはデータの配列を取得せず、ただ1つのデータしか取得できないからです。だから、

、と試してみてください。

public static function priceIDToLabel($priceID){ 
    //Ermittelt mithilfe der PriceID das dazugehörige Ticket -> (label) 
    $conn = global_functions::connectdb(); 
    $errormsg = ''; 
    $sql = 'SELECT label FROM data WHERE priceID = ".$priceID."'; 
    $result = $conn->query($sql); 
    $row = $result->fetch_assoc(); 
    return($row['label']); 
} 

そして、あなただけのラベル変数、同様ticketLabel配列を使用する必要はありません。

<table> 
<!-- WARUM wird $ticketLabel nicht gefüllt, bzw nicht angezeigt?! --> 
<!-- Weil wegen isset! Und zu wenig Kaffee!.. --> 

<?php 
    $label = global_functions::priceIDToLabel($selTicket); 
    echo '<textarea readonly>' . $label . ' </textarea>'; 
?> 

-

それとも、あなたが本当に機能は、全体のデータオブジェクトを返すようにしたい場合は、単に戻り引数を変更:

で試してみてください:

public static function priceIDToLabel($priceID){ 
    //Ermittelt mithilfe der PriceID das dazugehörige Ticket -> (label) 
    $conn = global_functions::connectdb(); 
    $errormsg = ''; 
    $sql = 'SELECT label FROM data WHERE priceID = ".$priceID."'; 
    $result = $conn->query($sql); 
    $row = $result->fetch_assoc(); 
    return($row); 
} 

そして:

<table> 
<!-- WARUM wird $ticketLabel nicht gefüllt, bzw nicht angezeigt?! --> 
<!-- Weil wegen isset! Und zu wenig Kaffee!.. --> 

<?php 
    $ticketLabel = global_functions::priceIDToLabel($selTicket); 
    echo '<textarea readonly>' .$ticketLabel['label'] . ' </textarea>'; 
?> 

+0

動作していないようです。テキストエリアには文字が含まれていますが、その内部には情報はありません。 – Drago100ful

+0

スクリプトのどの部分に問題があるかを検出して、Filが言ったように 'echo $ conn;'や 'echo $ result;'や 'var_dump($ ticketLabel);'を追加し、表示されているものが正しいかどうか確認してください。 –

+0

変数はNULLのままです。それは私の最初の問題です – Drago100ful

1

を第一に、あなたのSQLクエリが誤って構成されており、あなたは単一引用符と二重引用符を混合しています。私はそれがあるべきと考えている:

$sql = 'SELECT label FROM data WHERE priceID = "' . $priceID . '"'; 

次に、私が正しくあなたの条件を理解していれば、あなただけ多くても1つの行が、そのクエリから返されることを期待し、そうfetch_assocは、単一の行を取得するのに十分です。 whileループは必要ありません。

だから、全体の機能は次のようになります。

public static function priceIDToLabel($priceID){ 
    $conn = global_functions::connectdb(); 
    $errormsg = ''; 
    $sql = 'SELECT label FROM data WHERE priceID = "' . $priceID . '"'; 
    $result = $conn->query($sql); 
    $result_row = $result->fetch_assoc(); 

    if (!empty($result_row)) 
     return($result_row['label']); 
    else 
     return ""; 
} 

しかし、停止!

あなたは本当にクエリを準備するためにPDOを使用して検討すべきです。 MySQLを使用している場合は、そこに多くのチュートリアルがあります。コメントに記載されているように、SQLインジェクションは本当に戦闘が簡単ですが、あなたに起こると重大なダメージを与える可能性があります。だから、この機能をそのようなものにすることは避けてください。

+0

ありがとう本当にそれに気付かなかった。私は後のプロジェクトでPDOを検討するかもしれません – Drago100ful

+2

@ Drago100fulあなたは実際にPDOを学び、それを学ぶべきです、それは実装がかなり簡単ですが、データベースに対する最も簡単な攻撃の1つを防ぐのに役立ちます。このコードがこのような生産にならないことを確認してください。 –

関連する問題