HTML / PHP表单不会将数据发送到MySQL数据库

时间:2022-09-25 20:07:14

I'm new to PHP so this is new to me. Anyway I'm creating a site so I can access my receipes online.

我是PHP的新手,所以这对我来说是新手。无论如何我正在创建一个网站,所以我可以在线访问我的receipes。

This is the form:

这是形式:

<form action="Form.php" method="post" class="basic-grey">
<h1><a href="index.html">Receita</a>
    <span>Aqui podes adicionar uma nova receita</span>
</h1>
<label>
    <span>Titulo :</span>
    <input id="titulo" type="text" size="20" maxlength="100" name="titulo" placeholder="Introduza o Titulo" />
</label>

<label>
    <span>Categoria :</span><select  maxlength="10" name="categoria">
    <option value="categoria">--- Seleccione aqui a Categoria ---</option>
    <option name=" " value="sopa">Sopa</option>
    <option name="entrada" value="entrada">Entrada</option>
    <option name="carne" value="carne">Carne</option>
    <option name="peixe" value="peixe">Peixe</option>
    <option name="salada" value="salada">Salada</option>
    <option name="sobremesa" value="sobremesa">Sobremesa</option>
    </select>

</label>

<label>
    <span>Ingredientes :</span>
    <textarea id="ingredientes" size="20" maxlength="1000" name="ingredientes" placeholder="Introduza os ingredientes"></textarea>
</label> 
<label>
    <span>Preparação :</span>
    <textarea id="preparacao" size="20" maxlength="1000" name="preparacao" placeholder="Introduza o modo de preparação"></textarea>
</label> 
<label>
    <span>Notas :</span>
    <textarea id="notas" size="20" maxlength="1000" name="notas" placeholder="Aqui pode adicionar uma nota"></textarea>
</label> 
<label>
    <span>&nbsp;</span> 
    <input type="submit" class="button" value="Enviar" /> 
</label>   

</form>

This is the code to handle the form:

这是处理表单的代码:

<?php
// processing form values


if ($_SERVER['REQUEST_METHOD'] == 'POST'){

$titulo = $_POST['titulo'];
$categoria = $_POST['categoria'];
$ingredientes = $_POST['ingredientes'];
$preparacao = $_POST['preparacao'];
$notas = $_POST['notas'];


if(!empty($titulo) && !empty($categoria) && !empty($ingredientes) && !empty($preparacao) && !empty($notas)){

    include('connection.php');

    mysqli_query($dbc, "INSERT INTO receita(Titulo,Categoria,Ingredientes,Preparacao,Notas) VALUES ('$titulo','$categoria','$ingredientes','$preparacao','$notas')");
    $registered = mysqli_affected_rows($dbc);
    echo $registered." row is affected, everything worked fine!";
}else{
    echo "Please fill all values on the form";
}

}else{

echo "No form has been submitted";

}

?>

And what happens is that if I input something like this it doesn't work:

会发生什么是如果我输入这样的东西它不起作用:

Titulo:Açorda de camarao

Titulo:AçordadeCamarao

Categoria: Peixe

Ingredientes: 800 g de camarao; 4 dentes de alho; 1 ramo de salsa ou coentros; 3 ovos inteiros; 1.5 dl de Azeite; 1.5 pão por pessoa; sal; piri-piri

成分:800克de camarao; 4 dentes de alho; 1 ramo de salsa ou coentros; 3 ovos inteiros; 1.5 dl de Azeite; 1.5pãoporpessoa;萨尔;皮里,皮瑞·

Preparação: Coze-se o camarão com sal e piri-piri e reserva-se a agua. De seguida demolha-se o pão na agua do camarão. Aquece-se o azeite com os alhos e os coentros e de seguida junta-se o camarão e por ultimo o pão. Mexe-se tudo para cozer o pão e ganhar consistencia. Por ultimo junta-se os ovos e envolve-se tudo.

Preparação:Coze-seocamarãomesal e piri-piri e预留agua。 De seguida demolha-seopãonaaguadocamarão。 Aquece-se o azeite com os alhos e os coentros e de seguida junta-seocamarãoepor ultimoopão。 Mexe-se tudo para cozeropãoeganhar consistencia。由ultimo junta-se os ovos e envolve-se tudo提供。

Nota: Receita para 4 pessoas

Nota:Receita para 4 pessoas

But if I input like this it works:

但如果我像这样输入它的工作原理:

Titulo:gfdsfdsa

Categoria: Peixe

Ingredientes: hudsbfbdsf fdsfidsfidsfsd, fdsjifjdsifdis 0palpdsandnsaud jkdosakodsakodmnsa jidsjaidsa

Ingredientes:hudsbfbdsf fdsfidsfidsfsd,fdsjifjdsifdis 0palpdsandnsaud jkdosakodsakodmnsa jidsjaidsa

Preparação: nfjdbshfbhdbjfdjs dsajijdisandiabuu fjndoisjfojidsanfds

Preparação:nfjdbshfbhdbjfdjs dsajijdisandiabuu fjndoisjfojidsanfds

Nota: fbhdubsufbndsnfs

My database table:

我的数据库表:

Nome    Tipo    Agrupamento (Collation) Atributos   Nulo    Omissao Extra   

1 ID bigint(50) Não None AUTO_INCREMENT Muda Muda Elimina
2 Titulo varchar(100) utf8_general_ci Não None Muda Muda Elimina 3 Categoria varchar(10) utf8_general_ci Não None Muda Muda
4 Ingredientes varchar(1000) utf8_general_ci Não None Muda 5 Preparacao varchar(1000) utf8_general_ci Não None Muda Muda 6 Notas varchar(1000) utf8_general_ci Não None Muda Muda

1 ID bigint(50)无无AUTO_INCREMENT Muda Muda Elimina 2 Titulo varchar(100)utf8_general_ciNãoNoMuda Muda Elimina 3分类varchar(10)utf8_general_ciNãoNoMuda Muda 4 Ingredientes varchar(1000)utf8_general_ciNãoNoMuda 5 Preparacao varchar(1000 )utf8_general_ciNãoNoMuda Muda 6 Notas varchar(1000)utf8_general_ciNãoNoMuda Muda

Sorry if this post its to long. Any ideas how to fix it?

对不起,如果这个帖子很长。任何想法如何解决它?

1 个解决方案

#1


There's probably a special character in the input that's causing a syntax error in the query.

输入中可能存在一个特殊字符,导致查询中出现语法错误。

You need to either escape your input before substituting it into the query. Add this after include ('connection.php');

在将其替换为查询之前,您需要转义输入。在include('connection.php')之后添加;

$titulo = mysqli_real_escape_string($dbc, $titulo);
$categoria = mysqli_real_escape_string($dbc, $categoria);
// and so on for all the other variables

or (better) use a prepared statement. Use this in place of your call to mysqli_query:

或(更好)使用准备好的声明。用它代替你对mysqli_query的调用:

$stmt = mysqli_prepare($dbc, "INSERT INTO receita(Titulo,Categoria,Ingredientes,Preparacao,Notas) VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, "sssss", $titulo, $categoria, $ingredientes, $preparacao, $notas);
mysqli_stmt_execute($stmt);
$registered = mysqli_stmt_affected_rows($stmt);

#1


There's probably a special character in the input that's causing a syntax error in the query.

输入中可能存在一个特殊字符,导致查询中出现语法错误。

You need to either escape your input before substituting it into the query. Add this after include ('connection.php');

在将其替换为查询之前,您需要转义输入。在include('connection.php')之后添加;

$titulo = mysqli_real_escape_string($dbc, $titulo);
$categoria = mysqli_real_escape_string($dbc, $categoria);
// and so on for all the other variables

or (better) use a prepared statement. Use this in place of your call to mysqli_query:

或(更好)使用准备好的声明。用它代替你对mysqli_query的调用:

$stmt = mysqli_prepare($dbc, "INSERT INTO receita(Titulo,Categoria,Ingredientes,Preparacao,Notas) VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, "sssss", $titulo, $categoria, $ingredientes, $preparacao, $notas);
mysqli_stmt_execute($stmt);
$registered = mysqli_stmt_affected_rows($stmt);