gpt4 book ai didi

php - 字符串在一列中出现多少次

转载 作者:行者123 更新时间:2023-11-29 14:14:36 24 4
gpt4 key购买 nike

我正在编写推荐计划脚本。我有下表:

id primary key
name varchar
email varchar
ref varchar
bid varchar
reward boolean

基本上,一旦三个 friend 使用同一个ref加入,id与ref相同的人就会获得奖励。

每次有人订阅时,我都需要检查表中是否有三个相同的引用,然后将奖励设置为 true 并向 id 等于引用的人发送电子邮件。

我希望这是清楚的。

我正在努力完成它。

目前为止的整个脚本如下:

$Bname = mysql_real_escape_string($_POST['Bname']);
$Bemail = mysql_real_escape_string($_POST['Bemail']);
$Bref = mysql_real_escape_string($_POST['Bref']);
$Bid = mysql_real_escape_string($_POST['Bid']);

mysql_connect("******", "******", "*******") or die ('Error: '.mysql_error());
mysql_select_db("********");


$checkEmail = "SELECT email FROM betalist WHERE email ='".$Bemail."'";
$result = mysql_query($checkEmail);


if (mysql_num_rows($result) > 0) {
echo $Bemail." is already in our list";
exit;
}

if (mysql_num_rows($result) == 0) {
$query="INSERT INTO betalist (ID, name, email,ref,bid)VALUES ('NULL','".$Bname."','".$Bemail."','".$Bref."','".$Bid."')";
mysql_query ($query) or die ('Error updating database');

到目前为止,我已经尝试使用 mysql_num_rows 来解决这个问题:

$refCount = "SELECT id, email FROM betalist WHERE ref='".$Bref."'"; 
$result = mysql_query($refCount);
if (mysql_num_rows($result)==3)
{
echo $countarray;
}

你能帮我吗?

最佳答案

您的代码 is 容易受到 SQL Injection attack 的攻击在目前的状态下。我还看到您正在使用古老的 mysql_* 函数,该函数目前正在 deprecated 中。 。请参阅red box ?相反,您应该了解 prepared statements并使用 PDOMySQLi 。如果您无法决定,this article将有助于选择。如果你想学习,here is a good PDO tutorial 。您至少已经尝试修复 SQLi 部分,但当前的代码仍然会失败,因为 mysql_real_escape_string() 需要与数据库的打开连接(并且您仅在调用后打开数据库连接)。

使用 PDO 的代码将如下所示:

<?php
$dbConnection = new PDO('mysql:dbname=dbname;host=127.0.0.1;charset=utf8', 'user', 'pass');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
$stmt = $dbConnection->prepare('SELECT email FROM betalist WHERE email = :email');
$stmt->execute(array(':email' => $_POST['Bemail']));
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result) {
echo htmlspecialchars($_POST['Bemail']), " is already in our list";
exit;
}

$stmt = $dbConnection->prepare('INSERT INTO betalist (ID, name, email, ref, bid) VALUES (NULL, :name, :email, :ref, :bid)');
$stmt->execute(array(
':name' => $_POST['Bname'],
':email' => $_POST['Bemail'],
':ref' => $_POST['Bref'],
':bid' => $_POST['Bid'],
));

$stmt-> $dbConnection->prepare('SELECT count(id) FROM betalist WHERE ref = :ref');
$stmt->execute(array(':ref' => $_POST['Bref']));
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result['count'] == 3) {
// do stuff
}
} catch(PDOException $e) {
echo 'Something went wrong: ' , $e->getMessage();
}

最好验证用户尝试使用的电子邮件地址。这可以通过 built in filter_var() function 轻松完成:

if(filter_var($_POST['Bemail'], FILTER_VALIDATE_EMAIL) === false) {
// user entered an invalid emailaddress
}

请注意,我检查了出现次数是否正好为 3,因此您可能想检查是否是 3 的倍数。

关于php - 字符串在一列中出现多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12882935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com