Deus Posted March 16, 2012 Report Share Posted March 16, 2012 Boa noite... Eu estou a contruir um site em php capaz de guardar um registo de user e mail numa base dados mas quando tento ler o que tem na base de dados de modo a tentar verificar se esta correcto dá-me o seguinte erro. http://img526.imageshack.us/img526/4649/img1nd.jpg Uploaded with ImageShack.us O meu codigo de leitra é o seguinte: <?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("my_db", $con); $result = mysql_query("SELECT * FROM Persons"); echo "<table border='1'><tr><th>Firstname</th><th>Lastname</th></tr>"; while($row = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['Email'] . "</td>"; echo "<td>" . $row['Name'] . "</td>"; echo "</tr>"; } echo "</table>"; mysql_close($con); ?> Linguagens: C / Java / Prolog / Assembly / HTMLA aprender: Java Link to comment Share on other sites More sharing options...
pedrotuga Posted March 16, 2012 Report Share Posted March 16, 2012 O teu query está errado. Dependendo do sistema de ficheiros onde a tua base de dados guarda as tabelas, tens que respeitar maiúsculas e minúsculas. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 16, 2012 Report Share Posted March 16, 2012 altera isto para ver qual o problema $result = mysql_query("SELECT * FROM Persons"); if (($result = mysql_query("SELECT * FROM Persons")) == false) { die('Could not execute SQL : ' . mysql_error()); } tenho um "felling" que não tens a tabela "Persons" na base de dados, ou pior ainda, não tens a base de dados "my_db". IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Deus Posted March 16, 2012 Author Report Share Posted March 16, 2012 tenho um "felling" que não tens a tabela "Persons" na base de dados, ou pior ainda, não tens a base de dados "my_db". http://img706.imageshack.us/img706/9022/img2cn.jpg Uploaded with ImageShack.us Tens razão, mas estou a criar a base de dados ? <?php $con = mysql_connect("127.0.0.1","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } if (mysql_query("CREATE DATABASE my_db",$con)) { echo "Database created"; } /*else { echo "Error creating database: " . mysql_error(); }*/ // criar uma table mysql_select_db("my_db", $con); $sql = "CREATE TABLE Persons(Email varchar(30),Name varchar(30),)"; // Execute query mysql_query("INSERT INTO Persons (Email, Name) VALUES ( '$_POST[mail]', '$_POST[fname]')"); echo "1 email added"; mysql_close($con); ?> Linguagens: C / Java / Prolog / Assembly / HTMLA aprender: Java Link to comment Share on other sites More sharing options...
mjamado Posted March 16, 2012 Report Share Posted March 16, 2012 Estás a definir a instrução, mas não a estás a executar. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
Deus Posted March 16, 2012 Author Report Share Posted March 16, 2012 Estás a definir a instrução, mas não a estás a executar. Desculpa mas não estou a ver onde está o erro ? Será que me podias ajudar a corrigir isso? Linguagens: C / Java / Prolog / Assembly / HTMLA aprender: Java Link to comment Share on other sites More sharing options...
mjamado Posted March 16, 2012 Report Share Posted March 16, 2012 Desculpa mas não estou a ver onde está o erro ?Será que me podias ajudar a corrigir isso? $con = mysql_connect("127.0.0.1","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } if (mysql_query("CREATE DATABASE my_db",$con)) { echo "Database created"; } // criar uma table mysql_select_db("my_db", $con); $sql = "CREATE TABLE Persons(Email varchar(30),Name varchar(30),)"; // Execute query mysql_query("INSERT INTO Persons (Email, Name) VALUES ( '$_POST[mail]', '$_POST[fname]')"); echo "1 email added"; mysql_close($con); A instrução definida na linha assinalada não é executada em lado nenhum. Lógico que a tabela não existe. Só para clarificar, isto é só para aprender, certo? Esse código não pode ir, nunca, para um site real. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
Deus Posted March 16, 2012 Author Report Share Posted March 16, 2012 A instrução definida na linha assinalada não é executada em lado nenhum. Lógico que a tabela não existe. Só para clarificar, isto é só para aprender, certo? Esse código não pode ir, nunca, para um site real. Já funciona na perfeição, obrigado pela ajuda e pela sinceridade. Sim, eu estou apenas a aprender mas podes dizer-me porque é que nunca poderia ir para um site real? Gosto de saber os meus erros para aprender com eles... Linguagens: C / Java / Prolog / Assembly / HTMLA aprender: Java Link to comment Share on other sites More sharing options...
mjamado Posted March 16, 2012 Report Share Posted March 16, 2012 Sim, eu estou apenas a aprender mas podes dizer-me porque é que nunca poderia ir para um site real? Gosto de saber os meus erros para aprender com eles... Por vários motivos, mas especialmente pela insegurança das queries; aqui: mysql_query("INSERT INTO Persons (Email, Name) VALUES ( '$_POST[mail]', '$_POST[fname]')"); Se alguém enviar a variável mail no POST com a informação ',''); DROP TABLE Persons;#, perdes a tabela inteira. A esta técnica chama-se SQL injection e é todo um tema. Não existe cura definitiva para este mal, e a tua melhor hipótese é usar prepared statements (o que também é todo um tema). De qualquer forma, se estás a começar a aprender, não te preocupes com isto para já. Só não metas é nada "ao vivo", senão és papado que é um instante. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
Deus Posted March 17, 2012 Author Report Share Posted March 17, 2012 Por vários motivos, mas especialmente pela insegurança das queries; aqui: mysql_query("INSERT INTO Persons (Email, Name) VALUES ( '$_POST[mail]', '$_POST[fname]')"); Se alguém enviar a variável mail no POST com a informação ',''); DROP TABLE Persons;#, perdes a tabela inteira. A esta técnica chama-se SQL injection e é todo um tema. Não existe cura definitiva para este mal, e a tua melhor hipótese é usar prepared statements (o que também é todo um tema). De qualquer forma, se estás a começar a aprender, não te preocupes com isto para já. Só não metas é nada "ao vivo", senão és papado que é um instante. Já ouvi falar desse tipo de ataques mas nunca percebi como funcionam... Eu apenas estou a aprender de formar muito amadora e isto esta a correr num servidor virtual na minha maquina... Se um dia me tornar mais profissional terei em conta esse problema 🙂 Linguagens: C / Java / Prolog / Assembly / HTMLA aprender: Java Link to comment Share on other sites More sharing options...
pedrotuga Posted March 19, 2012 Report Share Posted March 19, 2012 SQL injection é um ataque muito básico para o despresares assim. Lê este tópico pelo menos http://www.portugal-a-programar.pt/index.php?showtopic=16541 não é nenhuma ciencia transcendente. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now