2012-07-26 8 views
0

MySQL에 데이터를 삽입하는 폼의 PHP 작업을하고 있지만 데이터가 삽입되기 전에 삽입하기 전에 다른 테이블에서 필드를 확인해야합니다. 이 값이 다른 테이블에 있으면 데이터가 주 테이블에 삽입되고 그렇지 않으면 데이터가 삽입되지 않습니다. 존재하는 경우, 다음 다른 값을 표 1에 $의 codigo를 삽입,값이 다른 테이블에 있는지 확인한 다음 삽입하십시오

 

    $host="localhost"; 
    $username="root"; 
    $password=""; 
    $db_name="forms"; 
    $tbl_name="table1"; 

    mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
    mysql_select_db("$db_name")or die("cannot select DB"); 

    $nombre=$_POST['nombre']; 
    $apellido=$_POST['apellido']; 
    $cedula=$_POST['cedula']; 
    $email=$_POST['email']; 
    $telefono=$_POST['telefono']; 
    $establecimiento=$_POST['establecimiento']; 
    $codigo=$_POST['codigo']; 

    $sql=" INSERT INTO $tbl_name(Nombre, Apellido, Cedula, Email, Telefono, Establecimiento, Codigo)VALUES('$nombre', '$apellido', '$cedula', '$email', '$telefono', '$establecimiento', '$codigo')"; 

    $result=mysql_query($sql); 

    if($result){ 
    echo "Your data was sent"; 
    } 

    else { 
    echo "You inserted a wrong code"; 
    } 

    ?> 

    

그래서, 내가해야 할 것은 표 2 값 $의 codigo을 확인하는 것입니다 :

여기에 데이터를 삽입하려면 코드입니다. 내가 붙어있는 곳이야.

임에도 불구하고 새 것이므로 나와 함께 곰.

미리 감사드립니다.

+0

가능한 복제본 http://stackoverflow.com/questions/554205/with-mysql-how-do-i-insert-into-a-table-on-condition-that-the-value-does-not-ex ? rq = 1 – FatalError

+1

또 다른 것은 mysql_ * 함수를 사용하면 안된다는 것입니다. mysqli_ * 또는 PDO와 같은 것을 사용하십시오. 현재 코딩중인 방식으로 SQL 삽입이 가능하므로 코드를 보안 위험이 커집니다. 빠른 Google 검색을 통해 올바른 방향으로 안내 할 것입니다. –

답변

0

정말로 필요한 것은 이것뿐입니다.

// Check if Codigo already exists in table2 
$codigo = mysql_real_escape_string($_POST['codigo']); 
$result = mysql_query("SELECT Codigo FROM table2 WHERE Codigo = '$codigo'"); 

if (!mysql_num_rows($result)) { 

    // Go ahead and insert everything in table1 
    $data = array(
     'Nombre' => $_POST['Nombre'], 
     'Apellido' => $_POST['apellido'], 
     'Cedula' => $_POST['cedula'], 
     'Email' => $_POST['email'], 
     'Telefono' => $_POST['telefono'], 
     'Establecimiento' => $_POST['establecimiento'], 
     'Codigo' => $_POST['codigo'] 
    ); 

    // Make sure all the data is safe for entry into the database 
    foreach ($data as $key => $val) { 
     $data[$key] = "'" . mysql_real_escape_string($val) . "'"; 
    } 

    $fields = implode(', ', array_keys($data)); 
    $values = implode(', ', array_values($data)); 

    $result = mysql_query("INSERT INTO table1 ($fields) VALUES ($values)"); 

    echo 'Your data was sent'; 

} else { 
    echo 'Codigo already exists in table2'; 
} 

하지만 훨씬 더 효율적이고 효율적인 방법은 여러 가지가 있습니다. 우선, MySQL의 권장되지 않는 mysqli 함수 (http://www.php.net/manual/en/book.mysqli.php) 대신 PHP의 mysqli 함수를 사용하는 것이 좋습니다.

SQL 인젝션에 대한 쿼리를 보호하고있는 것처럼 말입니다. 이 부분을 읽으십시오. 그러나 SQL 쿼리에 삽입하는 모든 값에 대해 real_escape_string()이 필요합니다.

INSERT INTO $tbl_name (Nombre, Apellido, Cedula, Email, Telefono, Establecimiento, Codigo) 
SELECT '$nombre', '$apellido', '$cedula', '$email', '$telefono', '$establecimiento', '$codigo' 
    FROM table2 
WHERE table2.Codigo = '$codigo' 
LIMIT 1 

그런 다음 행이 삽입 여부되었는지 여부를 결정하기 위해 mysql_affected_rows()를 삽입 된 행의 수를 확인합니다

+0

답변 해 주셔서 감사합니다. 이것은 내가 원하는 것에 더 가깝게 보이지만, 테스트 할 때 table2에서 찾지 못하면 'Codigo'를 삽입하는 것입니다. 내가 원하는 것은 다른 방법입니다 : table2에서 'Codigo'를 찾으면 table1에 'Codigo'를 삽입하십시오. – Mofo

+0

죄송합니다. 예,이 줄에서 if (! mysql_num_rows ($ result)) { '는 조건의 극성 반전을 위해'! '를 제거합니다. – BadHorsie

0

확인하고있는 데이터로 다른 테이블에서 SELECT 쿼리를 수행 한 다음 mysql_num_rows()> 0을 삽입하면됩니다. 아래와 같은 내용

$query = "SELECT * FROM otherTable WHERE infoIsSame"; 
$result = mysql_query($query) or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 
    $sql=" INSERT INTO $tbl_name(Nombre, Apellido, Cedula, Email, Telefono, Establecimiento, Codigo)VALUES('$nombre', '$apellido', '$cedula', '$email', '$telefono', '$establecimiento', '$codigo')"; 

    $result=mysql_query($sql); 

    if($result){ 
     echo "Your data was sent"; 
    }else { 
     echo "You inserted a wrong code"; 
    } 
}else{ 
    echo "Not present in Other database"; 
} 
0

한 가지 방법은 INSERT 문은 당신을위한 검사를 할 수 있도록하는 것입니다. 행 수가 삽입 될 것으로 예상되는 "규범 적"경우에 대해 데이터베이스로의 왕복 이동이 줄어 듭니다.


참고 : 대신 mysqli_ 또는 PDO를 사용하여 mysql_로 기능을 사용하여 마십시오.

관련 문제