Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde, tenho um codigo de um formulario de compras. Que está com erro, ele funciona da sequinte forma.
1) O cliente efetua um pedido no site.
2) Depois se cadastra no site.
3) na proxima tela, diz que o cadastro dele foi efetuado, e mostra os dados da compra dele.
O que eu preciso que o sistema faça é pegar o id desse cliente e salvar na tabela de pedidos. em cada registro de predido ter o id desse cliente, e é ai que q da o erro, ele não salva. e não da msg de erro tbm.
Abaixo segue o codigo.
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
//aqui são as variaveis e os campos do insert na tabela clientes_loja
$id_cli = $_POST["id_cli"];
$nome_cli = $_POST["nome_cli"];
$telefone_cli = $_POST["telefone_cli"];
$email_cli = $_POST["email_cli"];
$endereco_cli = $_POST["endereco_cli"];
$bairro_cli = $_POST["bairro_cli"];
$complemento_cli = $_POST["complemento_cli"];
$cidade_cli = $_POST["cidade_cli"];
$cep_cli = $_POST["cep_cli"];
$uf_cli = $_POST["uf_cli"];$id_ped = $_POST["id_ped"];
$id_cli = $_POST["id_cli"];
$nome_pro = $_POST["nome_pro"];
$preco_pro = $_POST["preco_pro"];
$qtde_pro = $_POST["qtde_pro"];
$subtotal = $_POST["subtotal"];
if(file_exists("init2.php")) {
require "init2.php";
} else {
echo "Arquivo init.php nao foi encontrado";
exit;
}
if(!function_exists("Abre_Conexao")) {
echo "Erro o arquivo init.php foi auterado, nao existe a função Abre_Conexao";
exit;
}
//Aqui Salva os dados do cliente na tabela Clientes
Abre_Conexao();
if(@mysql_query("INSERT INTO clientes_loja VALUES (NULL , '$nome_cli', '$telefone_cli', '$email_cli', '$endereco_cli',
'$bairro_cli', '$complemento_cli', '$cidade_cli', '$cep_cli', '$uf_cli')")){
if(mysql_affected_rows() == 1){
echo "<div class = h2> $nome_cli , O seu cadastro foi efetuado.<br><br>Confirme o seu pedido e selecione a forma de pagamento.</div><br><br>";
}
} else {
if(mysql_errno() == 1062) {
echo $erros[mysql_errno()];
exit;
} else {
echo "Erro nao foi possivel efetuar o cadastro";
exit;
}
}
}
$carrinho = isset ($_SESSION['carrinho']) ? $_SESSION['carrinho'] : array();
if (count ($carrinho) == 0)
{
echo "
<tr>
<td colspan=\"5\" style=\"text-align:center\"><strong><em>
Não há produtos em seu carrinho de compas.</em></strong>
</td>
</tr>
</table>
";
}
else
{
for ($a = 0; $a < count($carrinho); $a++)
{
$id = htmlentities ($carrinho[$a]['id']);
$nome_pro = htmlentities ($carrinho[$a]['nome_pro']);
$preco_pro = number_format ($carrinho[$a]['preco_pro'], 2, ",", "");
$desc_pro = htmlentities ($carrinho[$a]['descricao_pro']);
$qtde_pro = $carrinho[$a]['qtde_pro'];
$subtotal = number_format(($carrinho[$a]['preco_pro'] * $qtde_pro), 2, ',', '');
echo "
<form>
<tr>
<td><b><input name=nome_pro size=50 value=$nome_pro></b></td><br>
<td><b>Valor Unitario: </b><input name=preco_pro size=10 value=R$$preco_pro></td><br>
<td><b>Quantidade: </b><input name=qtde_pro size=10 value=$qtde_pro></td><br>
<td><b>Valor Total: </b><input name=subtotal size=10 value=$subtotal></td><br>
<td></td>
</tr><br>
</form>
";
}// fecha for
echo "
<tr>
<td><h2>Total do Pedido: R$".$_SESSION['total']."</h2></td>
<td></td>
<td></td>
</tr>
</table>
<br><br>";
}// fecha else
//Aqui Salva os itens do pedido. a variavel a variavel $id_cli está logo acima em um input. (Aqui que não está salvando) o insert acima funciona perfeitamente
if(@mysql_query("INSERT INTO itens_ped VALUES (NULL , '$id_cli', '$nome_pro', '$preco_pro', '$qtde_pro', '$subtotal')")){
if(mysql_affected_rows() >= 1){
echo "Salvou";
} echo $erros[mysql_errno()];
exit;
} else { echo "Não Salvou<br><br>";
}
@mysql_close();
}
echo"<p><div class = titulos_imp align = center>Selecionar Forma de Pagamento</div></p>";
exit;
?>Então Tirei as @ mais mesmo assim ele não salva.
Somente o primeiro insert é feito e segundo ele entra no else e aparece a mensagem "Não Salvou"
Troque isto.
if(mysql_query("INSERT INTO itens_ped VALUES (NULL , '$id_cli', '$nome_pro', '$preco_pro', '$qtde_pro', '$subtotal')")){
Por isto
$sql = "INSERT INTO itens_ped VALUES (NULL , '$id_cli', '$nome_pro', '$preco_pro', '$qtde_pro', '$subtotal')";
mysql_quuery($sql) or die('Erro na segunda inserção - '.mysql_error().'<br/> A inserção enviada para o banco de dados foi '.$sql);
Veja o que imprime. A frase dentro do erro é só para debug. Depois você tira e deixa só o mysql_error().
Carlos Eduardo
Erro na segunda inserção - Incorrect integer value: '' for column 'id_cli' at row 1
A inserção enviada para o banco de dados foi INSERT INTO itens_ped VALUES (NULL , '', 'Produto 2', '50,20', '1', '50,20')
Essa é a mensagem que aparece.
O campo id_cli é
int(11)
sem nenhum atributo.
o seu formulário q envia esses dados tem setado o valor id_cli??
INSERT INTO itens_ped VALUES (NULL , '', 'Produto 2', '50,20', '1', '50,20')
Esta é a instrução que está indo para o banco de dados... Tá faltando o valor da $id_cli. De onde vem isto? Por acaso é o id que é gerado nesta inserção aqui??
if(@mysql_query("INSERT INTO clientes_loja VALUES (NULL , '$nome_cli', '$telefone_cli', '$email_cli', '$endereco_cli',
'$bairro_cli', '$complemento_cli', '$cidade_cli', '$cep_cli', '$uf_cli')")){
Se for, use a função mysql_insert_id para pegar o último id inserido e jogar ali.
http://br.php.net/mysql_insert_id
Se não for de lá, veja de onde ele vem e tente ver o que aconteceu com ele.
Carlos Eduardo
Não entendi direito como fazer.. poderia me dar um exemplo ?
Veja que eu levantei algumas possibilidades...
Tá faltando o valor da $id_cli. De onde vem isto? Por acaso é o id que é gerado nesta inserção aqui??
Se não for de lá, veja de onde ele vem e tente ver o que aconteceu com ele.
Respondendo a isto, posso te ajudar.
Carlos Eduardo
Então, essa id é gerada na mesma sessão. e ela está gerando valor normalmente no primeiro insert.
Bom, vou chutar aqui, já que você não me respondeu o que eu queria saber...
Troque isto
if(mysql_affected_rows() == 1){
echo "<div class = h2> $nome_cli , O seu cadastro foi efetuado.<br><br>Confirme o seu pedido e selecione a forma de pagamento.</div><br><br>";
}
Por isto
if(mysql_affected_rows() == 1){
echo "<div class = h2> $nome_cli , O seu cadastro foi efetuado.<br><br>Confirme o seu pedido e selecione a forma de pagamento.</div><br><br>";
$id_cli = mysql_insert_id();
}
Veja se funciona.
Carlos Eduardo
Cara ainda não salvou, assim estou postando o codigo da pagina todo para você poder dar uma olhada. Está commentado para você ver... nessa mesma pagina q o id_cli é gerado.
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
//aqui são as variaveis e os campos do insert na tabela clientes_loja
$id_cli = $_POST["id_cli"];
$nome_cli = $_POST["nome_cli"];
$telefone_cli = $_POST["telefone_cli"];
$email_cli = $_POST["email_cli"];
$endereco_cli = $_POST["endereco_cli"];
$bairro_cli = $_POST["bairro_cli"];
$complemento_cli = $_POST["complemento_cli"];
$cidade_cli = $_POST["cidade_cli"];
$cep_cli = $_POST["cep_cli"];
$uf_cli = $_POST["uf_cli"];$id_ped = $_POST["id_ped"];
$id_cli = $_POST["id_cli"];
$nome_pro = $_POST["nome_pro"];
$preco_pro = $_POST["preco_pro"];
$qtde_pro = $_POST["qtde_pro"];
$subtotal = $_POST["subtotal"];
if(file_exists("init2.php")) {
require "init2.php";
} else {
echo "Arquivo init.php nao foi encontrado";
exit;
}
if(!function_exists("Abre_Conexao")) {
echo "Erro o arquivo init.php foi auterado, nao existe a função Abre_Conexao";
exit;
}
//Aqui Salva os dados do cliente na tabela Clientes
Abre_Conexao();
if(@mysql_query("INSERT INTO clientes_loja VALUES (NULL , '$nome_cli', '$telefone_cli', '$email_cli', '$endereco_cli',
'$bairro_cli', '$complemento_cli', '$cidade_cli', '$cep_cli', '$uf_cli')")){
if(mysql_affected_rows() == 1){
echo "<div class = h2> $nome_cli , O seu cadastro foi efetuado.<br><br>Confirme o seu pedido e selecione a forma de pagamento.</div><br><br>";
}
} else {
if(mysql_errno() == 1062) {
echo $erros[mysql_errno()];
exit;
} else {
echo "Erro nao foi possivel efetuar o cadastro";
exit;
}
}
}
$carrinho = isset ($_SESSION['carrinho']) ? $_SESSION['carrinho'] : array();
if (count ($carrinho) == 0)
{
echo "
<tr>
<td colspan=\"5\" style=\"text-align:center\"><strong><em>
Não há produtos em seu carrinho de compas.</em></strong>
</td>
</tr>
</table>
";
}
else
{
for ($a = 0; $a < count($carrinho); $a++)
{
$id = htmlentities ($carrinho[$a]['id']);
$nome_pro = htmlentities ($carrinho[$a]['nome_pro']);
$preco_pro = number_format ($carrinho[$a]['preco_pro'], 2, ",", "");
$desc_pro = htmlentities ($carrinho[$a]['descricao_pro']);
$qtde_pro = $carrinho[$a]['qtde_pro'];
$subtotal = number_format(($carrinho[$a]['preco_pro'] * $qtde_pro), 2, ',', '');
echo "
<tr>
<td><b><input name=nome_pro size=50 value=$nome_pro></b></td><br>
<td><b>Valor Unitario: </b><input name=preco_pro size=10 value=R$$preco_pro></td><br>
<td><b>Quantidade: </b><input name=qtde_pro size=10 value=$qtde_pro></td><br>
<td><b>Valor Total: </b><input name=subtotal size=10 value=$subtotal></td><br>
<td></td>
</tr><br>
";
}// fecha for
echo "
<tr>
<td><h2>Total do Pedido: R$".$_SESSION['total']."</h2></td>
<td></td>
<td></td>
</tr>
</table>
<br><br>";
}// fecha else
//Aqui Salva os itens do pedido. a variavel a variavel $id_cli está logo acima em um input. (Aqui que não está salvando) o insert acima funciona perfeitamente
if(@mysql_query("INSERT INTO itens_ped VALUES (NULL , '$id_cli', '$nome_pro', '$preco_pro', '$qtde_pro', '$subtotal')")){
if(mysql_affected_rows() == 1){
echo "<div class = h2> $nome_cli , O seu cadastro foi efetuado.<br><br>Confirme o seu pedido e selecione a forma de pagamento.</div><br><br>";
$id_cli = mysql_insert_id();
}
}
else {
if(mysql_errno() == 1062) {
echo $erros[mysql_errno()];
exit;
} else { echo "Não Salvou<br><br>";
}
@mysql_close();
}
echo"<p><div class = titulos_imp align = center>Selecionar Forma de Pagamento</div></p>";
exit;
?>Amigo, não dá pra ficar falando a mesma coisa várias vezes...
Releia o POST #2 e o POST #7.
Faça o que está dizendo nestes 2 posts. Antes de executar a segunda query, imprima ela para ver o que tem nela. Em princípio, a $id_cli não está recebendo valor algum. Tente dar um echo nesta variável para ver se veio do formulário.
Carlos Eduardo
Não aparece nenhum erro porque tu ta suprimindo eles.
Toda expressão com uma @ antes no PHP, quer dizer que qualquer erro que esta expressão venha a mostrar, será suprimido (não aparecerá).
O primeiro passo é tirar essas arrobas.
Se mesmo assim nao aparecer erro, ai tu tem que debugar o código.
No grosso, tu vai setar display_errors(1), error_reporting(E_ALL), usar a função mysql_error() nas consultas e etc.