2011-12-16 5 views
0

임의의 문자열 생성기를 만들었습니다.데이터베이스에 연결하는 방법

AAA 
AAB 
ABA 
ABB 
BAA 
BAB 
BBA 
BBB 

이제 내가 원하는 무엇으로 연결하는 내 임의의 문자열 생성은 다음과 같습니다 무슨 일 사용자가 버튼과 사용 문자로 클릭하고 예를 들어 다음과 같은 세 문자로 구성된 문자열을 구성합니다 B 것입니다 "SessionId"열은 내 데이터베이스의 "Session"테이블에 있으며이 문자열은 저장됩니다. 원하는 것은 단추가 데이터베이스에없는 문자열을 생성하는 것입니다. 예를 들어 (세션 표에서 세션 ID) 아래에 보이는 : 버튼을 클릭하고 생성 할 때이 두 세션 (문자열 AAA 및 AAB)로

Session Id 

AAA 
AAB 

발전기가 모두이 두 문자열을 표시해서는 안 데이터베이스에있는 문자열은 이미 데이터베이스에 있습니다. 나중에 나는 genrated 문자열을 데이터베이스에 저장하고 싶지만 현재는 제너레이터가 이미 데이터베이스에있는 문자열을 생성하기를 원합니다.

누구든지 이것을 "세션"테이블의 "세션 ID"필드에 연결하고 데이터베이스에없는 문자열을 생성하는 방법을 알고 있습니까? 버튼 작동 및 사용되는 코드는,

아래 나는 순간에 사용하고 내 PHP 코드는 볼 수 here을 클릭하는 방법을 볼 수 있도록

내 코드 jsfiddle입니다. 이 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(); 
+3

죄송합니다. 내 두뇌가 도망 갔다. 너 뭐하려고? (인형 설명) –

+0

@MichaelSazonov ... 연말 연시입니다. 내 두뇌는 또한이시기에 느슨해지는 경향이 있습니다. – rdlowrey

+0

난 세션 테이블을 포함하는 데이터베이스가 있습니다. 세션 테이블 내부에는 세션 ID가 있습니다. SessionId는 선택된 이전에 생성 된 문자열에 저장합니다. 이제 "AAA"와 같은 문자열이 이미 데이터베이스에 있으면 사용자가 새 문자열을 생성 할 때 이미 가져온 문자열 ("데이터베이스에 이미 저장되어 있음")을 생성하지 않습니다. 이렇게 정확하게 작업해야합니다. – BruceyBandit

답변

0

코드는 같이해야한다.

<?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; 

       ?>... 
+0

안녕하세요, PHP 코드가 포함되어 있습니다. 다른 쿼리를 추가해야합니까, 아니면 현재 쿼리에 WHERE 절을 포함시킬 수 있습니까? – BruceyBandit

+0

jfriend00이 말했듯이 서버에 ID를 생성하는 것이 좋습니다. 정확히 어떻게 쿼리를 작성했는지 알지 못했습니까? mysql_query()를 잊었거나 다른 것이 있습니까? –

+0

안녕하세요, 아니 거기에 더 많은 PHP는 어디에 결과 = mysql_query,이 방금 내 PHP 코드의 하단에 표시되었습니다. 희망이 도움이 :) :) – BruceyBandit

0

무엇을 당신이하려는 것은 그때는 아마 필요가 데이터베이스에없는 임의의 세션 ID를 생성하는 경우 이미 데이터베이스에없는 ID를 생성하는 새로운 세션 ID를 생성하기위한 서버 메소드를 생성하고 서버로부터 새로운 세션 ID를 검색하기 위해 ajax 호출을 사용한다.

클라이언트에 기존 ID를 모두 가져 와서 클라이언트에 새 ID를 생성하려고하면 클라이언트가 둘 다 동일한 ID를 가질 수있는 경쟁 조건에 직면하게됩니다 같은시기에). 이러한 유형의 작업은 경쟁 조건을 피하기 위해 적절한 잠금을 사용하여 서버에서 수행해야합니다. 서버에서 수행하는 방법은 사용중인 데이터베이스/서버 프레임 워크에 따라 다릅니다. 생성 된 ID가 DB에서 발견되지 않을 때

$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; 
} 

이 중지됩니다 : 서버에

+0

안녕하세요, 문제는 이론을 알고 있지만, 난 정말 자바 스크립트를 배우는 오전, 나는 당신이 또는 누군가가 제공 할 수있는 경우, 2 년 동안 PHP를 사용 havn't 그것을 코딩하지 않을 생각이 없다 예제 코드를 입력하면 내 사양과 일치하도록 시도하고 수정할 수 있습니다. 이 일을 할 수 있다면 크게 고마워요 – BruceyBandit

+0

그런데 내 사이트가 아닌 PHP, mySQL 질문 (자바 스크립트와 관련 없음) 인 – BruceyBandit

+0

에 의해 MYSQL 데이터베이스를 사용하고 있습니다. 희망을 갖고 다른 사람이 도움을 청할 수 있기를 바랍니다. – jfriend00

관련 문제