Pergunta

Im preso, vindo a tentar descobrir isso por 2 horas agora. Eu descobri o loop foreach, mas a figura não pode sair como inserir os dados agora.

aqui é o meu php, o que estou fazendo de errado?

    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ";  
foreach($_POST as $key => $value) {
    $query .= "$thumb_path,$image_path,$main_image,$_POST[project_id])";
    $result = mysql_query($query, $connection);
}

Obrigado!

Devo colocá-lo fora como esta, desculpe ainda um novato para foreach e como ele funciona.

foreach($_POST as $key => $value) {
    $query = "INSERT INTO images VALUES (thumb_path, image_path, main_image, project_id),";  
    $query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])";
}

$result = mysql_query($query, $connection);
Foi útil?

Solução

Várias coisas errada aqui:

  1. Você está faltando um colchete de abertura em sua lista de valores (após VALUES)
  2. Você está executando mysql_query em cada iteração do foreach. Em vez disso, você provavelmente vai querer criar a cadeia primeiro (usando vários valores listas), e mysql_query run fora do loop.
  3. Você não pode interpolar a variável $_POST['project_id'] em uma seqüência dessa maneira
  4. Você precisa escapar os dados $_POST antes de colocá-lo no banco de dados!
  5. Você não está realmente usando o $key ou $value do seu foreach em sua consulta, você está apenas descartá-lo.
  6. As variáveis ??dentro do loop ($thumb_path etc.) será o mesmo para cada iteração do loop-assim que você está indo para inserir os mesmos dados de cada vez.
  7. A lógica do circuito simplesmente não faz sentido. Você não sabe quanto tempo $_POST é, ou o que poderia estar nele, então por que você está looping sobre $_POST?

Algumas dicas para ajudar você a corrigir tudo isso:

  1. Verifique se o seu log de erro.
  2. var_dump a string de SQL antes de executar a consulta para verificar se ele é sintaticamente e logicamente correta.

Se você quiser mais ajuda, eu sugiro que você var_dump o que está em $_POST, tentar escrever o que você pensa a consulta deveria parecer, e depois postar tanto aqui. Então, talvez, alguém vai ajudá-lo a ir de um para o outro.

Outras dicas

eu encontrar algo como este é muito mais fácil de manter do que uma concatenação repetida como você está fazendo:

$values = array();
foreach ($_POST as $key => $value) {
    $qvalue = mysql_real_escape_string($value);
    $values[] = "($field1, $field2, $field3, $qvalue)"; // quoted value, not the raw value
}

$query_values = implode(',', $values);

$query = "INSERT INTO images (field1, field2, field3, field4) VALUES $query_values";
$result = mysql_query($query, $connection);

Basta ter em mente que, quando a construção de uma consulta como esta, é perfeitamente possível construir um grande o suficiente consulta para, exceto o comprimento max_packet, caso em que você teria que dividir a inserção em várias consultas menores.

Em primeiro lugar, escapar $ _ POST [project_id] com mysql_real_esape_string.

Em seguida, os sintaxe são os valores da tabela INSERT INTO (...) (...)

// escape your input
$_POST = array_map('addslashes', $_POST);

// rather than recursively calling mysql_query, you can insert all your rows with one query
// INSERT INTO table (columns) VALUES (data), (data), (data), ...
$values = array();
foreach($_POST as $key => $value) {
    $values[] = "('{$_POST['thumb_path']}', '{$_POST['image_path']}', '{$_POST['main_image']}', '{$_POST['project_id']}')";
}
if(sizeof($values)) {
    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ".implode(',', $values);
    $result = mysql_query($query, $connection);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top