2013-07-25 154 views
-1

我试图创建一个脚本,将数据从一个数据库中的表更新到另一个数据库中的表。我是自制的,我的能力非常有限。我确信有这样做的更好的方式,但它可能是我无法接触的。无论如何,这是我试图去做的。从数据库中的一个表更新数据到不同数据库中的另一个表不工作

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

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

任何人都可以看到为什么这不工作?

这是我使用的脚本:

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是一样的s TEST-DISPLAY.php,区别在于它显示第二个表的结果。

+1

请不要在新的应用程序中使用'mysql_query'。这是一个从PHP中删除的不推荐使用的界面,如果您使用不当,它会很危险。你在这里有一些**严重的[SQL注入漏洞](http://bobby-tables.com/),因为你没有[正确地转义你的值](http://bobby-tables.com/ PHP)。像[PDO这样的现代替代品并不难学](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)并且将确保您的数据库代码在未来版本的PHP中可用。 – tadman

回答

0

Eugenie,在TEST-EDIT.PHP中,您通过使用POST方法的“form1”名称在脚本TEST-EXEC.PHP中创建了一个表单。在form1里面,你正在播种变量username,uid,password和email。当您提交form1时,TEST-EXEC.PHP需要捕获您播种的变量。

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

$ _ POST是一个预定义变量,从方法=“邮报”发出的形式得到的值:您可以通过做到这一点。把这些放在TEST-EXEC.PHP的顶部。你也可以使用$ user = mysql_real_escape_string($ _ POST ['user']); 像另一个人提到的那样,变量用户的值被转义。

我打算回复其他人,并告诉您,由于您没有关注您的字符串,因此您在此代码中发生了一些严重的安全问题。如果您不研究人们提及的安全危险,那么如果您在生产中使用此代码,则会将整个数据库和Web服务器打开为恶意代码。这不值得。

这是你需要的东西,它是一个验证电子邮件地址以确保它们不包含坏东西的函数。

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; 
} 
+0

嗨,谢谢你。是的,我开始有点担心所有的警告。所有这些脚本都是供内部使用的,也就是说,我自己管理网站。它不会对公众开放。我不知道这是否有所作为。 你们吓到我了,所以我想暂时坚持手动方法。只是试图为自己做些简单的事情,但看起来我可能会为此付出高昂的代价,所以我会等到我能以正确的方式做事。 谢谢大家的帮助和建议! – Eugenie

+0

如果这仅仅是为了您的个人内部使用,请不要担心,只需花时间学习最佳实践,以便您将来总是在安全性方面正确编写代码。 –

0

你永远设置变量$user$password$email,或$uid在TEST-EXEC.php。您需要:您使用$_GET的参数从URL,$_POST用于从输入的形式(除非表单使用method="get"

$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']); 

通知。

+0

查看下面的评论 – Eugenie

+0

嗨,谢谢你的回复。由于缺乏资金,我不得不自己创建我的网站,而我只是从互联网上获取代码。一旦你把我从非常非常简单的东西中解救出来,我一点头绪都没有。 如何设置变量?我粘贴你的代码,它只是给了我很多错误。 – Eugenie

+0

这就是你设置变量的方法。这段代码应该在'mysql_connect()'之后和'mysql_query()'之前。尽管如此,我只能帮助完全不懂编程的人。这个网站不是取代你知道你在做什么;如果您不知道如何编程,您应该找到不同的工作路线,因为这是创建网站的先决条件。 – Barmar

相关问题