Mam tablicę javascript, która wygląda następująco: 21,22,22,22,23,23,23,26,27,27 itd. Muszę wprowadzić ją do tablicy php, a następnie użyć tej tablicy do zapytania mysql w celu wyszukania dla wartości w tablicy.
Oto mój kod, używam go do przeładowania elementu z przesłanej tablicy przekonwertowanej.
$(function() {
$("#deckRefresh").click(function(evt) {
var teset = convertArray(deck_array);
$("#deckTest").load("core/m.deckcontainer.php?cid="+teset)
evt.preventDefault();
})
})
oto funkcja javascript, którą wywołuję w celu konwersji tablicy:
function convertArray(array){
var teset = JSON.stringify(array);
return teset;
}
Konwertowanie tablicy, która mogła wyglądaćto: 22,22,22,22,23,23,23,26,26,28,28 Zwrócona wartość JSON $ _post jest następująca: [22,22,22,22,23,23,23,23,26,28,228] Po przeszukaniu stosu odpowiedzi wygląda mój kod do pobierania tablicy i wysyłania zapytań do mysql:
if($_GET){
$queryTest = str_replace("[","",$_GET["cid"]);
$queryTest1 = str_replace("]","",$queryTest);
$esplodCId = explode(",", $queryTest1);
foreach ($esplodCId as $key => $var){
$esplodCId[$key] = (int)$var;
}
$sql = mysql_query("SELECT * FROM cards WHERE cid IN($esplodCId)");
while ($row = mysql_fetch_assoc($sql)){
echo "{$row["img"]}<br/>";
}
}
Na razie chcę tylko zobaczyć informacje imgz mysql, kiedy uruchamiam to, otrzymuję: „Ostrzeżenie: mysql_fetch_assoc () oczekuje, że parametr 1 będzie zasobem, boolean podany w ....” Nie mogę przez całe życie wymyślić, jak wprowadzić tę tablicę do format, w którym mogę używać proszę o pomoc!
Odpowiedzi:
0 dla odpowiedzi № 1$esplodCId = explode(",", $queryTest1);
^^^^^^^^^^--- explode returns an array
$sql = mysql_query("SELECT * FROM cards WHERE cid IN($esplodCId)");
using an array in a string context---^^^^^^^^^^
Twoje zapytanie jest w rzeczywistości:
SELECT * FROM cards WHERE cid IN(Array)
ponieważ tablica używana w kontekście łańcuchowym jest dosłownie słowem Array
.
Przy obecnym kodzie lepiej byłoby po prostu usunąć kod [
i ]
z nieprzetworzonego ciągu Json i wpychanie pozostałego ciągu CSV do zapytania.
Poza tym jesteś podatny na Ataki typu SQL injection
To, co powinieneś mieć w PHP, to coś więcej:
$json = $_GET["cid"];
$ids = json_decode($json);
$csv = implode(",", $ids);
$sql = "SELECT .... WHERE cid IN ($csv)";
To jest NADAL podatny na ataki typu SQL injection, ale „działa przynajmniej w przypadku nieprzyjaznych danych liczbowych.