0

我正在使用 PHP 中的表单将数据插入 MySQL,但在插入数据之前,有一个字段必须在插入之前在另一个表中检查。如果其他表中存在该值,则在主表中插入数据,如果不存在,则不插入数据。

这是我插入数据的代码:

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

?>

<?php
// close connection 
mysql_close();
?>

所以,我需要检查 table2 中的值 $codigo,如果存在,然后在 table1 中插入 $codigo 和其他值。这就是我卡住的地方。

4

3 回答 3

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";
}
于 2012-07-26T16:22:39.040 回答
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';
}

但请注意,有很多方法可以做得更好、更有效。一方面,我建议您使用 PHP 的 mysqli 函数而不是已弃用的 mysql 函数(http://www.php.net/manual/en/book.mysqli.php)

更重要的是,您看起来根本没有保护您的查询免受 SQL 注入攻击。请阅读此内容,但通常只需要 real_escape_string() 对您插入 SQL 查询的任何值。

于 2012-07-26T16:39:25.973 回答
0

一种方法是让 INSERT 语句为您进行检查:

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()以确定是否插入了行。对于您希望插入一行的“规范”情况,这减少了到数据库的往返次数。


注意:避免使用 mysql_ 函数并改用 mysqli_ 或 PDO。

于 2012-07-26T16:39:38.093 回答