1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Algo errado no php

Discussão em 'Web Development' iniciada por BelzebuVlad, 20 de Fevereiro de 2007. (Respostas: 24; Visualizações: 1263)

  1. BelzebuVlad

    BelzebuVlad Power Member

    Pessoal estou com um problema em PHP (sou iniciado) que é o seguinte:

    tenho no ficheiro index.htm o seguinte:


    Código:
     
    <body>
    <form action="inserindo.php" method="post" name="Metafora" id="Metafora">
    <table width="450" border="0" cellspacing="0" cellpadding="3">
    <tr>
    <td width="111"><div align="right">Banda:</div></td>
    <td width="339"><input name="nomebanda" type="text" id="nomebanda" size="30"></td>
    </tr>
    <tr>
    <td valign="top"><div align="right">Ano:</div></td>
    <td>
    <textarea name="anobanda" cols="4" rows="1" id="anobanda"></textarea></td>
    </tr>
    <tr>
    <td height="29" colspan="2" valign="top"><div align="center">
    <input type="submit" name="submit" value="Inserir no banco de dados">
    </div>
    </td>
    </tr>
    </table>
    </form>
    </body>
    

    num ficheiro conectdb.php tenho o seguinte:

    Código:
     
    <?php
    $hostname = 'localhost';
    $username = 'root';
    $pass = '';
    $bd = 'metafora';
    $db = mysql_connect($hostname, $username, $pass);
    mysql_select_db($bd, $db);
    ?>
    

    e num ficheiro inserindo.php:

    Código:
     
    <?php
    require("conectdb.php");
     
    $sqlinsert = "INSERT INTO metafora (codbanda, nomebanda, anobanda)
    values ('', '$nomebanda' , '$anobanda')";
     
    mysql_query($sqlinsert) or die ("Não possivel inserir");
     
    echo "A banda $nomebanda nascida em $anobanda deu entrada na base de dados com sucesso";
     
    ?>
    

    O resultado que me está a dar é o "Não foi possivel inserir", gostava de saber porquê!
    A base de dados chama-se metafora e tem 3 campos:

    codbanda - inteiro - auto increment
    nomebanda - text
    anobanda - varchar

    Se me ajudassem agradecia...
     
  2. fil79

    fil79 Power Member

    não detectei falhas no código...poderá ser das tuas definições do teu php.ini, insere este código no inserindo.php


    PHP:
    $nomebanda=$_POST['nomebanda'];
    $anobanda=$_POST['anobanda'];
     
     
     
     
  3. BelzebuVlad

    BelzebuVlad Power Member

    =\ nao deu... k cena!!
    bgd n mm
     
  4. Gurzi

    Gurzi Power Member

    Um campo que é AUTO INCREMENT não se coloca no insert, ou seja retiras o codbanda e o '' .

    Tem de ficar assim

    $sqlinsert = "INSERT INTO metafora ( nomebanda, anobanda);

    values ('$nomebanda' , '$anobanda')";

    E nunca se usa erros definidos por ti através do die...

    Fazes antes die(mysql_error()) ;

    Abraço
     
  5. fil79

    fil79 Power Member

    tenta assim:


    PHP:
    <?php
    require("conectdb.php");
     
    $nomebanda=$_POST['nomebanda'];
    $anobanda=$_POST['anobanda'];  
     
    $sqlinsert "INSERT INTO metafora
    values ('', '
    $nomebanda' , '$anobanda')";
     
    $query=mysql_query($sqlinsert);
    $num_reg=mysql_num_rows($query);
     
    if(
    $num_reg==){
    echo
    "registo não inserido";
     
    }else{
     
    echo
    "registo inserido";
     
    }
     
    ?>
     
    Última edição: 20 de Fevereiro de 2007
  6. Gurzi

    Gurzi Power Member

    isso não vai dar...

    Estás a passar para um auto increment um inteiro logo nunca pode estar dentro de aspas!

    Faz como te disse.

    Lol e não se usa o num_rows para ver se foi inserido :s

    Usa-se

    $doQuery = "INSERT BLABLBA";

    if($doQuery)
    echo " inserido com Sucesso";
     
    Última edição: 21 de Fevereiro de 2007
  7. oscarolim

    oscarolim Power Member

    Como ja foi dito, auto increments nao devem aparecer na instruçao de insert do mysql. E tambem ainda nao percebi porque usam divs dentro de tabelas... mas enfim.

    Outra coisa, de certeza que tens o nome da bd/campos correctos? Por vezes pequenos typos escapam originando erros desse genero :s
     
  8. fil79

    fil79 Power Member

     
  9. Gurzi

    Gurzi Power Member

     
  10. fil79

    fil79 Power Member

    Descrição

    int mysql_affected_rows ( [resource link_identifier] )


    Obtém o número de linhas atingidas pela consulta INSERT, UPDATE, REPLACE ou DELETE mais recente associada ao link_identifier.


    essa função dá para o Delete,Insert entre outras


    PHP:
    <?php
    require("conectdb.php");
     
    $nomebanda=$_POST['nomebanda'];
    $anobanda=$_POST['anobanda'];  
     
    $sqlinsert "INSERT INTO metafora
    values ('', '
    $nomebanda' , '$anobanda')";
     
    $query=mysql_query($sqlinsert);
    $num_reg=mysql_affected_rows();
     
    if(
    $num_reg==){
    echo
    "registo inserido";
     
    }else{
     
    echo
    "registo não inserido";
     
    }
     
     
    ?> 

    Funciona:)
     
    Última edição: 21 de Fevereiro de 2007
  11. Gurzi

    Gurzi Power Member

    O problema é que se tu tens mais que um insert a fazer e nao sabes ao certo quantos são já não podes fazer uma comparação numérica porque não sabes qual o número, e se fizeres por exemplo >1 se forem 3 e so 2 tiverem sucesso ele vai dar true e não foi concluida :P

    eu prefiro a forma como disse

    Um abraço
     
  12. Morto

    Morto Power Member

    Código:
    ### Ligação MySQL ao servidor ###
                mysql_connect( $hostname, $username, $pass) or die("erro na ligação ao My");
                mysql_select_db($bd) or die("erro na ligação a DB");
                
                ### Campo ID na BD ###(adiciona um campo com nome ID typo intiger com caracter unico a tua db )
                $query = mysql_query("SELECT ID FROM metafora");
                $id = mysql_numrows($query);
                $id++;
                
                ### Datas e horas ###(facultativo mas eu axo importante data e ip do cliente)
                $get = getdate();
                $hora = $get[hours];
                $minutos = $get[minutes];
                $horas = $hora.":".$minutos;
                $data = date("d")."/".date("m")."/".date("y")." - ".$horas;
                $ip = $_SERVER['REMOTE_ADDR'];
            
                ### Inserir os campos na BD ###
                mysql_query("INSERT INTO metafora VALUES ('$id', '$ip', '$data', '$nomebanda', '$anobanda')");
                echo mysql_error()."\n\n";## se tiver erro...##
    penso que não me esqueci de nada... ve la se isso funciona
    esqueci a parte do $_POST $_GET mas penso que tu sabes fazer isso :P
     
    Última edição: 21 de Fevereiro de 2007
  13. BelzebuVlad

    BelzebuVlad Power Member

    Brigadao pessoal, eu neste momento nao estou no meu pc, mas quando chegar a casa testo isso tudo. Brigadao mm
     
  14. Gurzi

    Gurzi Power Member


    Desculpa a expressão, mas é uma estupidez estares a fazer um query á base de dados para saber quantas rows existem para colocar o próximo id do auto increment..

    É estúpido porque perdes tempo de execução, atrasas o desenvolvimento e ainda por cima não se faz isso.

    O AUTO_INCREMENT é utilizado automaticamente, nem o precisas de referir no insert


    Não estou a criticar, estou a expor o meu ponto de vista :)

    Um abraço
     
  15. BelzebuVlad

    BelzebuVlad Power Member

    Funcionou, obrigadao, muito obrigado mesmo. [[]]

    Já agora, se alguém curte Metal (música) e estiver disposto a ajudar-me num site, curtia...
     
    Última edição: 21 de Fevereiro de 2007
  16. Morto

    Morto Power Member

    o teu ponto de vista é bom e ainda bem que alguem percebe alguma coisa de php :P.
    e como tambem deves ter reparado isto ai foi um simples copy paste, de funções que cá tenho.
    e digo mais, como não sabes a que se destina este codigo nem a quem(tirando este caso especifico) até estás desculpado :) porque tirando isso estas 3 linhas de "codigo estupido" já me deram muitas alegrias onde muitos tiveram desgostos... :) mas no fundo no fundo gostei do teu olho :P

    edit: como sei que vais puxar a braza a tua sardinha... imagina todos os casos possiveis com uniques, substituição, update,etc.. etc..
     
    Última edição: 21 de Fevereiro de 2007
  17. Gurzi

    Gurzi Power Member

    Nãooo :P

    Não vou puxar nadda até porque uma das coisas que mais gosto na programação é discutir, porque no fundo nunca estou certo, existem sempre coisas possiveis para "destroçar" o meu olho com outras situações..

    Estou para aprender, O que são uniques ? (nunca utilizei)

    Um abraço :)
     
  18. HecKel

    HecKel The WORM

    uniques? Bem..., imagina uma tabela com uma ÚNICA chave primária, os valores deste campo nunca se repetem, são únicos. Agora imagina que tens 2 chaves primárias..., o que não se pode repetir é o PAR, podes ter por exemplo:

    A | B
    -----
    X | Y
    X | X
    Y | Y
    Y | X


    São 4 linhas possiveis numa tabela cuja chave primária é o par A,B. Agora imagina que tens um C do tipo unique que não é chave primária.

    A | B | C
    ---------
    X | X | a
    X | Y | b
    Y | X | a
    Y | Y | c

    A linha assinalada a vermelho não é válida nesta tabela, apesar de a restrição da chave primária estar coerente, o campo C é unique, ou seja, não podem haver repetições nesse campo.

    Podes associar unique também com chaves primárias, por exemplo, A ser primária e unique e B apenas primária, neste caso tinhas apenas estes casos possiveis:

    A | B
    -----
    X | X
    Y | X

    O B de facto está repetido, mas visto que a chave da tabela é o par A,B isto não fere a integridade da tabela, e as linhas de A são únicas.

    Espero não ter sido confuso ;)

    Btw, cuidado com o português..., é muito manhoso :205:

    Isto foi mesmo gay :205: (joke :p)

    abraços, HecKel
     
  19. Gurzi

    Gurzi Power Member

    lololol ! :)

    Obrigado man!!

    Eu dou-te o gay dou-te :)
     

Partilhar esta Página