2013-04-08 5 views
6

У меня есть php-скрипт. Я пытаюсь получить работу, которую я в основном просто вытащил из учебника и изменил в соответствии с моими потребностями. Это моя первая попытка на php, поэтому, пожалуйста, успокойся.php update sql из формы

У меня есть 3 файлов

  1. list_records.php
  2. update.php
  3. update_ac.php

List_records считывает данные из таблицы в MySQL. таблица в list_records имеет функцию редактирования, которая выводит вас на update.php, где он отображает данные в таблице db.

Update.php имеет кнопку отправки, которая предназначена для обновления mysql с помощью update_ac.php с информацией, которую вы изменили, используя поле id в URL-адресе, используя $ _GET ['id].

Я знаю, что этот скрипт очень открыт для инъекций slq, но я планирую использовать его только в локальной среде, он не будет открыт для Интернета, и только я и один человек будут использовать эту страницу, чтобы она не действительно проблема.

Во всяком случае, я подтвердил несколько вещей: -

  1. ид действительно получить взял с помощью $ _GET, я положил в эхе и распечатал его на странице update.php.
  2. я могу выполнить команду обновления в пределах значений PHP и изменения, но это не будет работать при использовании $ _GET [ID]

Может кто-нибудь мне точку в правильном направлении?

вот 3 файла с деталями соединения дб измененными

list_records.php

<title>Ports</title> 
</head> 

<?php 

// Connect to server and select database. 
mysql_connect("localhost", "username", "passsword")or die("cannot connect"); 
mysql_select_db("porting")or die("cannot select DB"); 


$sql="SELECT * FROM ports"; 
$result=mysql_query($sql); 

?> 
<body> 


<table width="1200" border="1" cellspacing="1" cellpadding="0"> 
<tr> 
<td> 
<table width="1200" border="1" cellspacing="1" cellpadding="3"> 
<tr> 
<td colspan="50"><strong>Pending Port Requests 2</strong> </td> 
</tr> 

<tr> 
<td align="center"><strong>Customer</strong></td> 
<td align="center"><strong>Number</strong></td> 
<td align="center"><strong>Type</strong></td> 
<td align="center"><strong>Completed</strong></td> 
<td align="center"><strong>Update</strong></td> 
</tr> 

<?php 
while($rows=mysql_fetch_array($result)){ 
?> 
<tr> 
<td><?php echo $rows['Customer']; ?></td> 
<td><?php echo $rows['Number']; ?></td> 
<td><?php echo $rows['Type']; ?></td> 
<td><?php echo $rows['Completed']; ?></td> 
<td align="center"><a href="update.php?id=<?php echo $rows['id']; ?>">update</a></td> 
</tr> 

<?php 
} 
?> 

</table> 
</td> 
</tr> 
</table> 
</body> 
</html> 

update.php

<title>update</title> 
</head> 

<?php 
// Connect to server and select database. 
mysql_connect("localhost", "username", "password")or die("cannot connect"); 
mysql_select_db("porting") or die("cannot select DB"); 

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



// Retrieve data from database 
$sql="SELECT * FROM porting.ports WHERE id = '$id'"; 
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 
?> 
<body> 


<table width="1200" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<form name="form1" method="post" action="update_ac.php"> 
<td> 
<table width="100%" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td>&nbsp;</td> 
<td colspan="6"><strong>Update Porting Details</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>Customer</strong></td> 
<td align="center"><strong>Number</strong></td> 
<td align="center"><strong>Type</strong></td> 
<td align="center"><strong>Completed</strong></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td align="center"> 
<input name="Customer" type="text" id="Customer" value="<?php echo $rows['Customer']; ?>"size= "15"/> 
</td> 
<td align="center"> 
<input name="Number" type="text" id="Number" value="<?php echo $rows['Number']; ?>" size="15"/> 
</td> 
<td align="center"> 
<input name="Type" type="text" id="Type" value="<?php echo $rows['Type']; ?>" size="15"/> 
</td> 
<td align="center"> 
<input name="Comments" type="text" id="Completed" value="<?php echo $rows['Comments']; ?>" size="15"/> 
</td> 
<tr> 
</table> 
<input name="id" type="hidden" id="id" value="<?php echo $rows['id']; ?>"/> 
<input type="submit" name="Submit" value="Submit" /></td> 
<td align="center">&nbsp;</td> 
</td> 
</form> 
</tr> 
</table> 
</body> 
</html> 

update_ac.php

<?php 
// Connect to server and select database. 
mysql_connect("localhost", "username", "password")or die("cannot connect"); 
mysql_select_db("porting")or die("cannot select DB"); 

// update data in mysql database 
$sql="UPDATE ports SET Customer='Customer', Number='Number' WHERE id='id'" or die ("this stuffed up"); 
$result=mysql_query($sql) or die ("this stuffedup"); 


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

else { 
echo "ERROR"; 
} 

?> 
+0

вы получаете нужное значение в $ строки [ 'Customer']; ? –

+1

Ваш код оставляет вас открытым для SQL-инъекций. Посмотрите на пример [bobby tables] (http://bobby-tables.com/) для примера. Кроме того, поскольку функции 'mysql_ *' устарели, посмотрите на MySQLi или [PDO] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers) – jcbwlkr

ответ

8

Ваш UPDA т.е запрос должен быть

// update data in mysql database 
$sql="UPDATE ports SET Customer='".$_POST['Customer']."', Number='".$_POST['Number']."' WHERE id='".$_POST['id']."'"; 

$result=mysql_query($sql)or 
die ("this stuffedup"); 
+1

Этот код уязвим для SQL-инъекции. – epicdev

+8

@flov вы даже посмотрели на вопрос? он объяснил, что он будет использовать его только локально и что это не проблема. – Daanvn

0
$sql="UPDATE ports SET Customer='Customer', Number='Number' WHERE id='id'" ; 

эта линия не так обновить его STRING вместо целого. Вы должны положить

$sql="UPDATE ports SET Customer='Customer', Number='Number' WHERE id='".intval($_REQUEST['id'])."'" 
1
1.You have to pass a id when clicking a submit in update.php by 
<a href="update_ac.php?id=<?php echo $rows['id']; ?>"><input type="submit" name="submit" value="Submit"></a>. 

2.The line $id=$_GET['id'] is used in update_ac.php before insert query. 
+1

Спасибо Махендра, что сработало.Спасибо всем за ваш совет тоже, очень ценю :) – themoose