将数据从一个数据库中的表更新到另一个不工作的数据库中的另一个表

时间:2013-07-25 17:47:43

标签: php mysql sql-update

我正在尝试创建一个脚本,将一个数据库中的表更新数据更新到另一个数据库中的表。我是自制的,我的能力非常有限。我确信有更好的方法可以做到这一点,但它可能超出我的范围。无论如何,这就是我试图这样做的方式。

第一个文档从我想要获取信息的表中选择数据。它包含一个允许我选择要复制的行的链接。此链接基本上创建一个表单,其中包含我要复制到第二个数据库的信息。我的想法是,当我按下提交时,它会将信息发送到第二个数据库并更新字段。

我遇到的问题是,即使它说已经成功执行了查询,它也不会更新第二个数据库。

有人能看出为什么这不起作用吗?

这些是我正在使用的脚本:

TEST-Display.php的

<?php
$host="localhost"; // Host name 
$username="username"; // Mysql username 
$password="password"; // Mysql password 
$db_name="db1"; // Database name 
$tbl_name="table1"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);
?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<table width="400" border="1" cellspacing="0" cellpadding="3">
<tr>
<td colspan="4"><strong>List data from mysql </strong> </td>
</tr>

<tr>
<td align="center"><strong>Uid</strong></td>
<td align="center"><strong>User Name</strong></td>
<td align="center"><strong>Password</strong></td>
<td align="center"><strong>Email</strong></td>
<td align="center"><strong>Update</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<tr>
<td><? echo $rows['uid']; ?></td>
<td><? echo $rows['user']; ?></td>
<td><? echo $rows['password']; ?></td>
<td><? echo $rows['email']; ?></td>

// link to update.php and send value of id 
<td align="center"><a href="http://soundsurgery.co.uk/main/TEST5/TEST-EDIT.php?uid=<? echo $rows['uid']; ?>">update</a></td>
</tr>

<?php
}
?>

</table>
</td>
</tr>
</table>

<?php
mysql_close();
?>

TEST-EDIT.php

<?php
$host="localhost"; // Host name 
$username="username"; // Mysql username 
$password="password"; // Mysql password 
$db_name="db1"; // Database name 
$tbl_name="table1"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar
$uid=$_GET['uid'];

// Retrieve data from database 
$sql="SELECT * FROM $tbl_name WHERE uid='$uid'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="TEST-EXEC.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>&nbsp;</td>
<td colspan="3"><strong>Update data in mysql</strong> </td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><strong>Uid</strong></td>
<td align="center"><strong>User Name</strong></td>
<td align="center"><strong>Password</strong></td>
<td align="center"><strong>Email</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center">
<input name="uid" type="text" id="uid" value="<? echo $rows['uid']; ?>">
</td>
<td align="center">
<input name="user" type="text" id="user" value="<? echo $rows['user']; ?>">
</td>
<td align="center">
<input name="password" type="text" id="password" value="<? echo $rows['password']; ?>" size="15">
</td>
<td>
<input name="email" type="text" id="email" value="<? echo $rows['email']; ?>" size="15">
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="uid" type="hidden" id="uid" value="<? echo $rows['uid']; ?>">
</td>
<td align="center">
<input type="submit" name="Submit" value="Submit">
</td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</form>
</tr>
</table>

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

TEST-EXEC.php

<?php
$host="localhost"; // Host name 
$username="username"; // Mysql username 
$password="password"; // Mysql password 
$db_name="db2"; // Database name 
$tbl_name="table2"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// update data in mysql database 
$sql="UPDATE $tbl_name SET uname='$user', password='$password', email='$email' WHERE uid='$uid'";
$result=mysql_query($sql);

// if successfully updated. 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='TEST-DISPLAY2.php'>View result</a>";
}

else {
echo "ERROR";
}

?><!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

TEST-DISPLAY2.php与TEST-DISPLAY.php相同,区别在于它显示第二个表的结果。

2 个答案:

答案 0 :(得分:0)

您永远不会在TEST-EXEC.php中设置变量$user$password$email$uid。你需要:

$uid = mysql_real_escape_string($_GET['uid']);

$user = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);

请注意,您使用$_GET来自网址的参数$_POST来获取表单中的输入(除非表单使用method="get")。

答案 1 :(得分:0)

Eugenie,在TEST-EDIT.PHP中,您在脚本TEST-EXEC.PHP中创建了一个名为“form1”的表单,该表单使用POST方法。在form1内部,您将播放变量username,uid,password和email。当您提交form1时,TEST-EXEC.PHP需要捕获您播种的变量。你这样做:

$username = $_POST['username'];
$uid = $_POST['uid'];
$password = $_POST['password'];
$email = $_POST['email'];

$ _ POST是一个预定义变量,它从使用method =“post”发送的表单中获取值。把它们放在TEST-EXEC.PHP的顶部。你也可以使用$ user = mysql_real_escape_string($ _ POST ['user']); 就像另一个人提到的那样,变量user中的值被转义。

我会回应其他人并告诉您,您在此代码中遇到了一些严重的安全问题,因为您没有注意到您的字符串。如果你不研究人们提到的安全危险,那么如果你在生产中使用这个代码,你就会把整个数据库和网络服务器打开成恶意代码。而且这不值得。

这是您需要的功能,它是一种验证电子邮件地址以确保它们不包含不良内容的功能。

function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)
   {
      $isValid = false;
   }
   else
   {
      $domain = substr($email, $atIndex+1);
      $local = substr($email, 0, $atIndex);
      $localLen = strlen($local);
      $domainLen = strlen($domain);
      if ($localLen < 1 || $localLen > 64)
      {
         // local part length exceeded
         $isValid = false;
      }
      else if ($domainLen < 1 || $domainLen > 255)
      {
         // domain part length exceeded
         $isValid = false;
      }
      else if ($local[0] == '.' || $local[$localLen-1] == '.')
      {
         // local part starts or ends with '.'
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $local))
      {
         // local part has two consecutive dots
         $isValid = false;
      }
      else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
      {
         // character not valid in domain part
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $domain))
      {
         // domain part has two consecutive dots
         $isValid = false;
      }
      else if
(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                 str_replace("\\\\","",$local)))
      {
         // character not valid in local part unless 
         // local part is quoted
         if (!preg_match('/^"(\\\\"|[^"])+"$/',
             str_replace("\\\\","",$local)))
         {
            $isValid = false;
         }
      }
    //  if ($isValid && !(checkdnsrr($domain,"MX") || ?checkdnsrr($domain,"A")))
      if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}