Deus Posted March 16, 2012 at 02:29 AM Report #444154 Posted March 16, 2012 at 02:29 AM 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
pedrotuga Posted March 16, 2012 at 07:14 AM Report #444156 Posted March 16, 2012 at 07:14 AM 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.
HappyHippyHippo Posted March 16, 2012 at 08:40 AM Report #444159 Posted March 16, 2012 at 08:40 AM 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
Deus Posted March 16, 2012 at 06:42 PM Author Report #444283 Posted March 16, 2012 at 06:42 PM 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
mjamado Posted March 16, 2012 at 07:12 PM Report #444286 Posted March 16, 2012 at 07:12 PM 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.
Deus Posted March 16, 2012 at 10:29 PM Author Report #444309 Posted March 16, 2012 at 10:29 PM 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
mjamado Posted March 16, 2012 at 10:43 PM Report #444312 Posted March 16, 2012 at 10:43 PM 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.
Deus Posted March 16, 2012 at 11:14 PM Author Report #444315 Posted March 16, 2012 at 11:14 PM 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
mjamado Posted March 16, 2012 at 11:30 PM Report #444318 Posted March 16, 2012 at 11:30 PM 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.
Deus Posted March 17, 2012 at 02:13 PM Author Report #444346 Posted March 17, 2012 at 02:13 PM 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
pedrotuga Posted March 19, 2012 at 10:07 AM Report #444572 Posted March 19, 2012 at 10:07 AM 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.
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