我创建了一个随机字符串生成器。发生的情况是,用户单击一个按钮,并使用字母A和B,它将构造一个3个字母的字符串,例如:
AAA
AAB
ABA
ABB
BAA
BAB
BBA
BBB现在我想要的是我的随机字符串生成,以链接到"SessionId“列,该列在我的数据库的"Session”表中,这些字符串将存储在其中。我想要的是生成一个不在数据库中的字符串的按钮。例如,请看下面(会话表中的SessionId):
Session Id
AAA
AAB因为这两个会话(字符串AAA和AAB)在数据库中,所以生成器在单击按钮并生成字符串时不应该显示这两个字符串,因为它们已经在数据库中了。稍后,我希望将经过性别转换的字符串存储在数据库中,但目前我只希望生成器生成数据库中已有的字符串。
有谁知道如何将它链接到"Session“表中的"Session Id”字段,并生成数据库中没有的字符串吗?
我的代码是用jsfiddle编写的,所以您可以看到按钮的工作方式和使用的代码,单击here查看
下面是我正在使用的php代码。此php代码将让我连接到数据库和所有用户在文本框中输入一个courseId,如果courseId在文本框中,则用户可以输入,否则它将显示一个警报。以下是代码:
<?php
$username="xxxxxxxxxxx";
$password="xxxxxx";
$database="mobile_app";
mysql_connect('localhost',$username,$password);
@mysql_select_db($database) or die("Unable to select database");
foreach (array('courseid') as $varname) {
$courseid = (isset($_POST[$varname])) ? $_POST[$varname] : '';
}
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<p>Course ID: <input type="text" name="courseid" value="<?php echo $courseid; ?>" /><input type="submit" value="Submit" name="submit" /></p> <!-- Enter User Id here-->
</form>
<?php
if (isset($_POST['submit'])) {
$query = "
SELECT cm.CourseId, cm.ModuleId,
c.CourseName,
m.ModuleName
FROM Course c
INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
JOIN Module m ON cm.ModuleId = m.ModuleId
WHERE
(c.CourseId = '".mysql_real_escape_string($courseid)."')
ORDER BY c.CourseName, m.ModuleId
";
$num = mysql_num_rows($result = mysql_query($query));
mysql_close()
;
?>更新后的php代码如下:
<?php
$username=xxx";
$password="xxx";
$database="mobile_app";
$is_there = true;
$con = mysql_connect('localhost',$username,$password);
@mysql_select_db($database, $con) or die("Unable to select database");
while( $is_there ){
$id = id_generator(); // your function to generate id;
$result = mysql_query( "SELECT SessionId FROM Session WHERE SessionId = '$id'" );
if( mysql_num_rows( $result ) == 0 ) $is_there = false;
}
foreach (array('courseid', 'sessionid') as $varname) {
$$varname = (isset($_POST[$varname])) ? $_POST[$varname] : '';
}
?>
<h1>CREATING A SESSION</h1>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<p>Course ID: <input type="text" name="courseid" value="<?php echo $courseid; ?>" /><input type="submit" value="Submit" name="submit" /></p> <!-- Enter User Id here-->
</form>
<?php
if (isset($_POST['submit'])) {
$query = "
SELECT cm.CourseId, cm.ModuleId,
c.CourseName,
m.ModuleName
FROM Course c
INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
JOIN Module m ON cm.ModuleId = m.ModuleId
WHERE
(c.CourseId = '".mysql_real_escape_string($courseid)."')
ORDER BY c.CourseName, m.ModuleId
";
$num = mysql_num_rows($result = mysql_query($query));
mysql_close();发布于 2011-12-17 07:04:13
您在服务器上的代码应该如下所示:
$is_there = true;
$con = mysql_connect( address , user, pass );
mysql_select_db( DATABASE , $con );
while( $is_there ){
$id = id_generator(); // your function to generate id;
$result = mysql_query( "SELECT * FROM your_table WHERE id = '$id'" );
if( mysql_num_rows( $result ) == 0 ) $is_there = false;
}当在数据库中找不到生成的id时,此操作将停止。
<?php
...
@mysql_select_db($database) or die("Unable to select database");
$courseid = "";
while( $is_there ){
$courseid = id_generator(); // your function to generate id;
$query = "
SELECT cm.CourseId, cm.ModuleId,
c.CourseName,
m.ModuleName
FROM Course c
INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
JOIN Module m ON cm.ModuleId = m.ModuleId
WHERE
(c.CourseId = '".mysql_real_escape_string($courseid)."')
ORDER BY c.CourseName, m.ModuleId
";
if( mysql_num_rows( $result = mysql_query($query) ) == 0 ) $is_there = false;
}
mysql_close();
echo "You generated code id: " . $courseid;
?>...发布于 2011-12-17 06:48:09
如果您要做的是生成一个尚未存在于数据库中的随机会话ID,那么您可能需要创建一个服务器方法来生成一个新的会话ID,该方法将创建一个尚未存在于数据库中的ID,并使用ajax调用从服务器检索新的会话ID。
如果您尝试将所有现有的ID放入客户端,然后在客户端上生成一个新的ID,那么您将面临竞争条件,这些条件将允许两个客户端具有相同的ID(因为它们几乎同时生成一个ID)。这种类型的操作应该在服务器上使用适当的锁进行,以避免争用情况。如何在服务器上执行此操作取决于您使用的数据库/服务器框架。
https://stackoverflow.com/questions/8540966
复制相似问题