我是编程新手,还在学习。我在mySQL中创建了一个数据库来存储一家虚构餐厅的预订。我得到了我的网站的形式和运行,当您输入您的信息(电子邮件/需要座位/日期/小时),它注册并成功地输入到数据库中。但是现在我正在检查数据库中是否有两个条目,然后向我的客户发送一条消息说:“对不起,那张桌子已经预订了,请选择其他时间或日期。”
为了简单起见,我现在想要检查的是,如果有问题的“座位表”已经在数据库中超过2次,如果第三次尝试,我希望出现错误消息,但我似乎不知道如何检查我的sql,这是我现在有的代码…我检查的列是座位表" 5-8“people,我的选择是1-2,3-4和5-8。5-8是sql表列中写为"text“的内容
require_once("config.php.inc");
$idConnexion = new mysqli($serveur, $utilisateur, $motDePasse, $bd, $port);
if ($idConnexion->connect_error) {
die('Erreur de connexion (' . $idConnexion->connect_errno . ') ' .$idConnexion->connect_error);
}
$requete = $idConnexion->query("SELECT * FROM tables") or die("La requete a echouee!");
$tableau = $requete->fetch_array();
$heure_res = $tableau["heure"];
$date_res = $tableau["date_res"];
$nombre_res = $tableau["nombre_personnes"];
if (($tableau = $requete->fetch_array()) !=FALSE) {
$nombre_table = $nombre_res == "5-8";
if (count($nombre_table) >= 2) {
echo "Il n'y a plus de place, choisissez une autre heure ou date.";
} else {
$resultats = $idConnexion->query("INSERT INTO `tables` SET email = '$_GET[email]', nombre_personnes ='$_GET[nombre_personne]', date_res = '$_GET[date_res]', heure = '$_GET[heure_preference]'") or die("La requête a échouée! : (" . $idConnexion->errno . ") " . $idConnexion->error);
$message = "L'ajout de la réservation a été fait avec succès!";
include("succes_interface.php");
}
}获取数组后,我尝试查看"5-8“是否在数据库中超过两次,以返回错误,如果小于2,则PHP可以继续并将保留添加到数据库中。
我真的希望我问的问题是对的,我已经在StackOverflow上搜索了答案,但没有任何运气。
提前谢谢你。
发布于 2019-05-31 00:48:06
首先,您的代码似乎只查看了SELECT语句返回的第一行。第二,下面的语句:
$nombre_table = $nombre_res == "5-8";为$nombre_table赋值True或False。您不能对这样的值应用PHP 函数,因此下一条语句将抛出一个警告。在任何情况下,您都不会计算"5-8“在nombre_personnes.列中出现的次数要做到这一点,可以使用如下查询:
$requete = $idConnexion->query("SELECT count(*) AS cnt from tables WHERE nombre_personnes = '5-8'");当然,在读取计数和插入新行之间,有没有可能是另一个进程修改了数据库,使得您读取的计数不再是最新的,而您最终仍然出现了太多的“5-8”?在继续操作之前,您可能需要首先锁定该表以防止写入。
发布于 2019-05-30 23:40:10
您必须在表中放入一个ID (ID int NOT NULL AUTO_INCREMENT,),这样您的表才能有一个id来保证每个表都是惟一的。当有人尝试预订时,您将获得该表的id,并将其与预订进行比较,因此您不能拥有两个相同的表。
https://stackoverflow.com/questions/56381244
复制相似问题