首次使用后无法创建自动sql表

时间:2016-01-21 00:57:16

标签: php mysql mysqli

我是PHP和SQL的新手......

我正在尝试基于url创建新表,但它只在我第一次使用它时才有效。在那之后,这是不可能的。

这是我的PHP代码:

 if(isset($_GET['id'])){
 $tabela = $_GET['tabela'];
 $_GET['id'];
 $criar = $tabela . $nivel . $page_id;

 // Se clicar no botão 'confirmar', então ele faz o seguinte:
 if(isset($_POST['submit'])){
 $titulo = $_POST['titulo'];
 $_FILES['imagem']['tmp_name'];
$texto = $_POST['texto'];


 // Se um destes campos estiver vazio:
if($titulo=='' or $imagem=='' or $texto==''){

            echo "Preencha todos os campos para o menu!";

            exit();             }

                    // Se não houver campos vazios, ele faz:            else {

            $servername = "localhost";
            $username = "root";
            $password = "";
            $dbname = "site";


            // Ligação à base de dados:
            $conn = new mysqli($servername, $username, $password, $dbname);


                    // Verifica a ligação:
                    if ($conn->connect_error) {
                        die("Connection failed: " . $conn->connect_error);
                    } 

            // Cria a nova tabela:
            $sql = "CREATE TABLE IF NOT EXISTS $criar (
                    id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
                    titulo VARCHAR(255),
                    imagem LONGBLOB,
                    texto TEXT,
                    grupo INT(9),
                    FOREIGN KEY (grupo) REFERENCES $tabela(id)
                    )";


                    // Se conseguir ligar-se à base de dados e criar uma nova tabela, ele insere os dados na nova tabela:
                    if ($conn->query($sql) === TRUE) {


                        include("includes/connect.php");
                        mysql_query("SET NAMES 'utf8'");

                        move_uploaded_file($image_tmp,"../imagens/$imagem");


                        $insert_query = "INSERT INTO $criar (titulo, imagem, texto, grupo) VALUES ('$titulo','$imagem','$texto','$page_id')";


                                // Se inserir os dados na nova tabela, ele dá uma mensagem de sucesso:
                                if(mysql_query($insert_query)){

                                    echo "<script>alert('Menu inserido com sucesso!')</script>";
                                    echo "<script>window.open('index.php','_self')</script>";
                                }

                                else{
                                    echo "Erro: " . $insert_query . "<br>" . $conn->error;
                                }
                    }



                    // Caso ele não consiga criar uma nova tabela (porque já existe), ele insere os dados na tabela já existente:
                    else {



                        include("includes/connect.php");
                        mysql_query("SET NAMES 'utf8'");


                        // Cria a nova tabela:
                        $sql = "CREATE TABLE IF NOT EXISTS $criar (
                                id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
                                titulo VARCHAR(255),
                                imagem LONGBLOB,
                                texto TEXT,
                                grupo INT(9),
                                FOREIGN KEY (grupo) REFERENCES $tabela(id)
                                )";

                                if(mysql_query($sql)){

                                    echo "sim!";
                                }
                                else {
                                    echo "não!";
                                }

                        move_uploaded_file($image_tmp,"../imagens/$imagem");    

                        $insert_query = "INSERT INTO $criar (titulo, imagem, texto, grupo) VALUES ('$titulo','$imagem','$texto','$page_id')";


                                // Caso consiga inserir os dados na tabela já existente, dá uma mensagem de sucesso:
                                if(mysql_query($insert_query&&$sql)){

                                    echo "<script>alert('Menu inserido com sucesso!')</script>";
                                    echo "<script>window.open('index.php','_self')</script>";

                                }
                                else{

                                    echo "isto não está a correr bem!";
                                }

                    // Fecha a ligação à base de dados:
                    $conn->close();

                    }           }       }$nivel = $_GET['grupo'];       $page_id =$imagem = $_FILES['imagem']['name'];          $image_tmp =

3 个答案:

答案 0 :(得分:1)

你是第一次,第二次是什么意思?您是否尝试使用刚刚创建的同名创建另一个表?你会得到一个表已存在错误。

CREATE TABLE IF NOT EXISTS $criar

这明确告诉MySql不要创建表,如果它存在,所以如果你将相同的查询参数传递给你的php,那么它将无法再次创建相同的表。

您可以将其更改为:

$page_id = $_GET['id'];
$criar = $tabela . $nivel . $page_id;

然后每次传递不同的id和/或不同的tabela。

答案 1 :(得分:0)

此代码向我展示了问题的背后:

 $tabela = $_GET['tabela'];
 $_GET['id'];  //this line looks odd 
 $criar = $tabela . $nivel . $page_id; 

也许它不会创建新表,因为您每次都会给出相同的$ criar。

答案 2 :(得分:0)

经过几个小时的努力解决这个问题,我终于得到了好消息! :)我在我的本地服务器(通过xampp)工作,并决定把它在网上检查是否有什么变化......并且不知道为什么,但它在网上工作完美,不与xampp合作!真是一团糟!!但它的工作!!感谢你的帮助!! ;)