Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, boa tarde!
Tenho um código em php, onde ele insere no banco de dados registro do textarea por linha, cada linha um registro. E exibe na tela todos os registro na forma de link com id! O problema é quando insiro mais de duas linhas no textarea ele está não mostra o número certo dos ids cadastrados no banco de dados! Alguém me ajuda!
O formulário:
<FORM NAME="form1" METHOD="post" ACTION="cadastrar.php">
<table width="419" border="0">
<tr>
<td width="120" valign="top">SÉRIE:</td>
<td width="289">
<input id="serie" NAME="serie" maxlength="600" size="47" type="text"/><br>
</td>
</tr>
<tr>
<td valign="top">TITULOS:</td>
<td>
<TEXTAREA NAME="titulos" cols="35" rows="5"></TEXTAREA><br>
</td>
</tr>
<tr>
<td valign="top">DROPVIDEO:</td>
<td>
<TEXTAREA id="dropvideo" NAME="dropvideo" cols="35" rows="5"></TEXTAREA>
</td>
</tr>
<tr>
<td valign="top">VIDTO:</td>
<td>
<TEXTAREA id="vidto" NAME="vidto" cols="35" rows="5"></TEXTAREA>
</td>
</tr>
<tr>
<td valign="top">ALLMYVIDEOS:</td>
<td>
<TEXTAREA id="allmyvideos" NAME="allmyvideos" cols="35" rows="5"></TEXTAREA>
</td>
</tr>
<tr>
<td valign="top">VIDEO.PW:</td>
<td>
<TEXTAREA id="videopw" NAME="videopw" cols="35" rows="5"></TEXTAREA><br>
</td>
</tr>
</table>
<table style="padding-left:350px">
<tr>
<td>
<INPUT id="cadastrar" name="cadastrar" type="submit" value="Cadastrar" class="but">
</td>
</tr>
</tr>
</table>
</form>
e lá no cadastrar.php onde pega, cadastra no banco e mostra os dados está:
<?php
$codserie = $_POST['serie'];
$codtitulos = $_POST['titulos'];
$codvto = $_POST['vidto'];
$contador = $_POST['vidto'];
$codropvdeo = $_POST['dropvideo'];
$codallmv = $_POST['allmyvideos'];
$codvideopw = $_POST['videopw'];
//pega os valores vindo do textarea
//separa os valores que estao por linha
$vidt = explode("\r\n", $codvto);
$drop = explode("\r\n", $codropvdeo);
$allmv = explode("\r\n", $codallmv);
$vipw = explode("\r\n", $codvideopw);
$titlepag = explode("\r\n", $codtitulos);
$conexaoo = mysql_connect("localhost","root",""); //essa linha irá fazer a conexão com o banco de dados.
//conectando com a tabela do banco de dados
$banco = mysql_select_db("sist",$conexaoo); //nome da tabela onde os dados serão armazenados
$limite = count($titlepag);
for($n = 0; $n < $limite; $n++) {
$inbd = "INSERT INTO play (serie, nome, vidto, dropvideo, allmyvideos, videopw, id)
VALUES ('$codserie', '$titlepag[$n]', '$vidt[$n]', '$drop[$n]', '$allmv[$n]', '$vipw[$n]', '')";
$inserir = mysql_query($inbd,$conexaoo);
}
if ($inserir) {
echo "<br>Cadastro inserido com sucesso!</b><br><br>";
} else {
echo "Não foi possível inserir o download, tente novamente.<br>";echo "Dados sobre o erro:<br>" . mysql_error();
}
//$lixo = array("http://vidto.me/",".html","http://dropvideo.com/","video/","embed/","/");$lixoallmv = array("http://allmyvideos.net/","http://www.allmyvideos.net/",":","/");$lixovideopw = array("http://videopw.com/","v/","e/","/");$lixotitle = array("]" , ";", "[");$lixovideomega = array("http://videomega.tv/?ref=");
$sql="SELECT id FROM play ORDER BY id DESC ";
$resultado=mysql_query($sql,$conexaoo);
if(mysql_num_rows($resultado)==0){
echo"<br>Nenhum dado encontrado!";
}else{
$dados=mysql_fetch_array($resultado);
$contador = 1;
$ide = $dados['id'];
$ideo = $ide-1;
for($i = 0; $i < count($titlepag); $i++){
echo"<a href="[http://localhost/play/index.php?id=](http://localhost/play/index.php?id=)".$ideo++."" target="_blank">Assistir - Episódio ".($contador <=9 ? '0' . $contador : $contador )."</a> <br>";
$contador++;
}
}
?>
<br><br>
<a href="javascript:window.history.go(-1)">Voltar</a>Ele está inserindo no banco tudo certo.. O problema é quando vou mostrar na tela os ids nos links.. quando tem mais de dois registros ele informa o id errado!
No seu loop que exibe os resultados, você deve usar $dados, não $titlepag. É em $dados que estão as informações do banco
Ok, aí devo tirar também a linha $ideo = $ide-1; e lá no echo usar o $ide++ para mostrar o id corretamente?
mysql_fetch_array tem que ser chamada tantas vezes quanto o número de resultados. Por isso é comum colocá-la em um while. Veja os exemplos do link que enviei
Troque o for pelo while. Ficará bem mais simples. Não precisará de $ide, não.
Tentei mas não consegui! Acho que me expressei mal, eu quis dizer exibir na tela apena os links com os repectivos ids que acabei de cadastrar.. tentei usando mysql_fetch_array no for e no while mas não deu certo!
Então mude um pouco o seu SELECT. Selecione os últimos N registros, onde N é o número de linhas informadas pelo usuário. Assim, só seleciona os registros cadastrados por ele
Faça algo assim
SELECT dados FROM tabela ORDER BY id DESC limit n
n é o número de linahs, que é o tamanho do seu array retornado pelo explode
Infelizmente ele mostra ainda não mostra o id correto!
Tipo:
eu insiro 3 dados(3 linhas no textarea), ele insere normal 3 registros no banco de dados
só que na hora que vai mostrar o id ele mostra:
1 registro - último id existente no banco de dados;
2 registro - último id existente + 1 no banco de dados;
3 registro - último id existente + 2 no banco de dados!
Com ajuda do paulinhosupriano, o meu código deu uma mudada mais ainda está com o erro!
Tentei ajeitar, mas não deu certo!
Como não sou nenhum expert em php, peço que não me mandem fazer coisas que sejam mais avançadas sem exemplos.. rs sei apenas o básico do básico de php!!
if ($inserir) {
echo "<br>Cadastro inserido com sucesso!</b><br><br>";
} else {
echo "Não foi possível inserir o download, tente novamente.<br>";echo "Dados sobre o erro:<br>" . mysql_error();
}
//$lixo = array("http://vidto.me/",".html","http://dropvideo.com/","video/","embed/","/");$lixoallmv = array("http://allmyvideos.net/","http://www.allmyvideos.net/",":","/");$lixovideopw = array("http://videopw.com/","v/","e/","/");$lixotitle = array("]" , ";", "[");$lixovideomega = array("http://videomega.tv/?ref=");
$sql="SELECT * FROM play WHERE id=(SELECT MAX(id) FROM play)";
$resultado=mysql_query($sql,$conexaoo);
if(mysql_num_rows($resultado)==0){
echo"<br>Nenhum dado encontrado!";
}else{
function getUrlLink($Id,$Textarea , $Nome, $Campo){
$arrCampo = explode('\r\n', $Textarea);
$cont=1;
foreach($arrCampo as $Campos){
#Inicio conexao#
$conexaoo = mysql_connect("localhost","root","");
$banco = mysql_select_db("assisti4_download",$conexaoo);
#Fim conexao#
$codtitulos = $_POST['titulos'];
$titlepag = explode("\r\n", $codtitulos);
$limite1 = count($titlepag);
//$id = "id";
//$recebe = ($id-$limite1);
$sql="SELECT * FROM play ORDER BY id DESC limit $limite1";
#----------------------------------------------#
$codtitulos = $_POST['titulos'];
$titlepag = explode("\r\n", $codtitulos);
$limite2 = count($titlepag);
$sqlii = mysql_query($sql, $conexaoo);
$ddos = mysql_fetch_assoc($sqlii);
for($i = 0; $i < $limite2; $i++){
echo "<a href="[http://assistirseriesonlinedubladas.com/play/index.php?id=](http://assistirseriesonlinedubladas.com/play/index.php?id=)".$ddos['id']."" target="_blank">Assistir - Episódio ".$Campo. str_pad($cont , 2 , '0' , STR_PAD_LEFT) ."</a>". "<br />";
$cont++;
}
}
}
#Mostra os dados inseridos, somente os dados inseridos
while($dados=mysql_fetch_array($resultado)):
getUrlLink($dados['id'],$dados['vidto'], $dados['nome'], ''). '<br />';
//getUrlLink($dados['videopw'], $dados['nome'], 'videopw'). '<br />';
endwhile;
}Execute esta query diretamente no MySQL (via phpMyAdmin ou outro cliente que você use):
SELECT * FROM play ORDER BY id DESC limit 3;
Poste aqui a saída do comando
Ele exibiu os 3 últimos dados inseridos!
Ou seja, a query está certa.
Você a usou de forma errada no script PHP. Mostre como fez. Deve haver algum erro
Consegui!
O código Correto:
$sql="SELECT id FROM play ORDER BY id DESC ";
$resultado=mysql_query($sql,$conexaoo);
if(mysql_num_rows($resultado)==0){
echo"<br>Nenhum dado encontrado!";
}else{
$dados=mysql_fetch_array($resultado);
$contador = 1;
$ide = $dados['id'];
$ideo = $ide-$limite+1;
for($i = 0; $i < count($titlepag); $i++){
echo"<a href="[http://localhost/play/index.php?id=](http://localhost/play/index.php?id=)".$ideo."" target="_blank">Assistir - Episódio ".($contador <=9 ? '0' . $contador : $contador )."</a> <br>";
$ideo++;
$contador++;
}
}
Agora criei outro sistema, adaptei os códigos nesse novo! o que mudou foi o design e acrescentei algumas funcionalidades! O problema é que não faz o bendito login quando passei para o servidor web! já no localhost funciona normalmente! vejam o sistema: http://assistirseriesonlinedubladas.com/sistema/novo/ daí fiz algumas alterações e agora eu logo mais fica na tela de login, atualizo a página daí aparece o sistema! o index.php é feito do sistema de login para os usuarios sem o acesso e o sistema para quem tem acesso! o que pode ser?
Habilite todas as exibições de erro como mostrado neste tópico e tente de novo. Veja quais erros são exibidos
Habilitei e só aparece que não ta definida a variavel $_SESSION['UsuarioUser'] só que quando faço o login o erro desaparece mas continua o formulario de login, não aparece o conteudo bloqueado! se eu entrar novamente no index já aparece eu logado!
Se eu tentar entrar em qualquer pagina do site deslogado aparece no conteudo:
Warning: Cannot modify header information - headers already sent by (output started at O ARQUIVO QUE TENTEI ABRIR:1) in O ARQUIVO QUE TENTEI ABRIR on line 8
Não entendi direito seu problema. Você diz que o INSERT não é feito na quantidade certa? Para verificar isso, basta dar um echo/var_dump em $inbd dentro do loop, para ver quais consultas estão sendo executadas.
Algumas observações sobre seu código:
1. Em vez de fazer vários INSERTs, construa apenas um, com todos os dados, e execute-o só uma vez. Terá um bom ganho de desempenho. Veja: http://rberaldo.com.br/inserindo-multiplos-registros-em-tabela-de-banco-de-dados/
2. funções mysql_* estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql