2016-04-01 6 views
1

Ich bin nicht vertraut mit PHP-Arrays, ich habe den folgenden Code, der Abfrage generiert, um die benötigten Ergebnisse auszugeben.PHP-Array implodieren Schlüssel und Werte zu funktionieren

$allstore = $_POST['store']; 


function createSelect($allstore) 
{ 
    if (empty($allstore)) 
     return ""; 

    $querySelect = ""; 
    $queryJoin = ""; 
    $baseTable = ""; 
    foreach ($allstore as $store => $value) { 
     if (!$querySelect) { 
      $baseTable = $store; 
      $querySelect = "SELECT " . $store . ".item_no, " . $store . ".actual_price, " . $store . ".selling_price, " . $store . ".qty as " . $store; 
     } else { 
      $querySelect .= ", " . $store . ".qty as " . $store; 
      $queryJoin .= " 
      INNER JOIN " . $store . " ON " . $baseTable . ".item_no = " . $store . ".item_no"; 
     } 
    } 
    $querySelect .= " FROM " . $baseTable; 
    $query = $querySelect . $queryJoin; 

    return $query; 
} 

//Stores to be shown 
$allstore = ['s_M9' =>0 , 's_M10' =>1]; 

$query = (createSelect($allstore)); 
$result = mysql_query($query); 
//rest of code... 

Wie Sie oben sehen können, bei dort ganz oben ist $allstore = $_POST['store']; Welche Werte basierend aus früheren Form POST-Methode sammelt die Checkbox mit dem name=store[] hat.

Jetzt Gemäß der Funktion gezeigt, wenn ich meine eigenen Schlüssel und Werte wie diese die Ausgabe zeigt genau

$allstore = ['s_M9' =>0 , 's_M10' =>1];

schaffen, was ich suche. Aber das Problem geht weiter, wie $allstore implode diese Geschäfte s_M9, s_M10 basierend auf was der Benutzer auf der vorherigen Seite (Kontrollkästchen) ausgewählt hat? Ich meine, der Benutzer kann einen der Geschäfte oder beide Geschäfte auswählen. Wie kann ich die überprüften Ergebnisse zwischen diesen Klammern implodieren, ohne sie manuell einzufügen?

Danke

Edit:

<?php 
echo "<form action='somewhere.php' method='POST'>"; 

$query = "SELECT * from stores_list ORDER BY short Asc"; 
$result = mysql_query($query); 
if(mysql_num_rows($result)>0){ 
    $num = mysql_num_rows($result); 
    for($i=0;$i<$num;$i++){ 
    $row = mysql_fetch_assoc($result); 
    echo "<input type=checkbox name=store[] value={$row['short']} style='width:20px; height:20px;'>{$row['short']}"; 
    } 
} 

else{ 
    //No Stores Available 
    echo "No Stores Found !"; 
} 


echo "</td><input type='submit' value='Search'/></form>"; 
+1

Können Sie nach Ihr html bitte –

+0

Okay sicher, nur einen Moment –

+1

Oh Junge, das wird Spaß machen. Lassen Sie mich nur darauf hinweisen, dass Sie Benutzereingaben in den * program * -Teil einer MySQL-Abfrage einfügen, was möglicherweise noch schlimmer ist, als wenn Sie sie in den Teil "values" injizieren. Das solltest du wirklich, wirklich nicht tun. –

Antwort

2
$allstore = []; 
if (!empty($_POST['store'])) { 
    foreach ($_POST['store'] as $value) { 
     $allstore[$value] = 1; // or 0, it doesn't matter because your function adds all the keys 
    } 
} 

$query = (createSelect($allstore)); 
$result = mysql_query($query); 

Und natürlich Sie kümmern sich um Ihre createSelect Funktion müssen SQL Injections zu vermeiden, lesen Sie bitte here

+0

Danke Mann! Du bist ein Lebensretter :) –

Verwandte Themen