Это мои коды update.php. Я уже проверил другие php-файлы и не нашел проблем. Эти коды не имеют ошибки, но не могут обновлять данные в базе данных.
require_once "conn.php"; $conn=connect(); $db=connectdb(); $id= ""; $parcelno = ""; $items = ""; if(isset($_REQUEST['id'])){ $id= $_REQUEST['id']; } if(isset($_REQUEST['parcel'])){ $parcel = $_REQUEST['parcel']; } if(isset($_REQUEST['items'])){ $items = $_REQUEST['items']; } mysql_select_db($db,$conn) or die (mysql_error()."\n"); $sql="UPDATE parcel SET parcelno='$parcelno', items='$items' where id='$id'"; $result=@mysql_query($sql) or die(mysql_error()."\n");
Это код edit.php, который используется для формы обновления:
<?php $ic = $_REQUEST["ic"]; require_once "conn.php"; $conn = connect(); $db = connectdb(); mysqli_select_db($conn,$db) or die (mysqli_error($conn)."\n"); $query_usr = "select * from parcel"; $usr = mysqli_query($conn,$query_usr) or die (mysqli_error($conn)."\n".$query_usr); $row_usr = mysqli_fetch_assoc($usr); ?> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> body { background-color: #CCC; } </style> </head><body><center><p><a href="adminselect.php"><img src="image/header.png" width="800" height="200"></a></p></center> <form action="update.php" method="get"> <?php $sql = "SELECT * FROM parcel where ic = $ic"; $result1 = mysqli_query($conn,$sql); while ($row=mysqli_fetch_assoc($result1)){ ?> <center><table border="0"> <tr> <td colspan="3" bgcolor="#0066FF"><strong><center>Update Registration </strong></td> </tr> </tr> <tr> <td bgcolor="#0099FF">Parcel Number</td> <td>:</td> <td bgcolor="#FFFFFF"><input name="parcelno" type="text" id="parcelno" value="<?php echo $row["parcelno"];?>" size="50"></td> </tr> <tr> <td bgcolor="#0099FF">Items</td> <td>:</td> <td colspan="2" bgcolor="#FFFFFF"> <p> <label for="select"></label> <select name="items" size="1" id="items"> <option><?php echo $row["items"];?></option> <option>Pos Laju</option> <option>Pos Ekspress</option> <option>Skynet</option> <option>GDEX</option> <option>Nationwide Express</option> <option>FedEx</option> <option>UPS</option> </select> </p></td> </tr> <tr> <td> </td> <td> </td> <td colspan="2" bgcolor="#CCCCCC"> <input name="" type="submit" value="Update"></td> </tr> <?php }?> </table></center> </form></body></html>
Я исследовал эту проблему почти полдня, и ничего не работает: /
Вы используете две разные переменные:
$parcelno
в вашем запросе UPDATE
и $parcel = $_REQUEST['parcel'];
обе переменные должны совпадать. Если этого не произойдет, ваш запрос будет терпеть неудачу.
Добавьте отчет об ошибках в начало файла (ов) сразу после открытия <?php
, что поможет во время предварительного тестирования.
error_reporting(E_ALL); ini_set('display_errors', 1);
Ваш существующий код открыт для SQL-инъекции . Используйте подготовленные заявления или PDO с подготовленными заявлениями .
Плюс, я цитирую nkchandra
в комментарии +1
(если можно):
«Не имеет отношения к вашему вопросу, но FYI, PHPMyAdmin – это не база данных, а инструмент для взаимодействия с базой данных, такой как mysql в вашем случае»
Изменить: после прочтения вашего комментария кажется, что вам нужно будет переключиться на функции mysqli_
.
Это просто быстрое решение, прежде чем вы научитесь использовать подготовленные заявления.
<?php error_reporting(E_ALL); ini_set('display_errors', 1); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $DB_HOST = "xxx"; // replace with yours $DB_USER = "xxx"; // replace with yours $DB_PASS = "xxx"; // replace with yours $DB_NAME = "xxx"; // replace with yours $conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if($conn->connect_errno > 0) { die('Connection failed [' . $conn->connect_error . ']'); } $id= ""; $parcelno = ""; $items = ""; if(isset($_REQUEST['id'])){ $id= mysqli_real_escape_string($conn,$_REQUEST['id']); } if(isset($_REQUEST['parcel'])){ $parcelno = mysqli_real_escape_string($conn,$_REQUEST['parcel']); } if(isset($_REQUEST['items'])){ $items = mysqli_real_escape_string($conn,$_REQUEST['items']); } $sql="UPDATE parcel SET parcelno='$parcelno', items='$items' where id='$id'"; $result=mysqli_query($conn,$sql) or die(mysqli_error()."\n"); if (!$result) { throw new Exception($conn->error); } else { echo "Success"; } mysqli_close($conn); // close the connection
Плюс, в соответствии r3wt's
комментарием r3wt's
: вы также можете использовать:
$result= $conn->query($sql) or die(mysqli_error()."\n");
вместо
$result=mysqli_query($conn,$sql) or die(mysqli_error()."\n");
<?php ini_set('display_errors', '1'); error_reporting(E_ALL ^ E_NOTICE); require_once "conn.php"; $conn=connect(); $db=connectdb(); $id= ""; $parcelno = ""; $items = ""; if(isset($_REQUEST['id'])){ $id= $_REQUEST['id']; } if(isset($_REQUEST['parcel'])){ $parcel = $_REQUEST['parcel']; } if(isset($_REQUEST['items'])){ $items = $_REQUEST['items']; } mysql_select_db($db,$conn) or die (mysql_error()."\n"); $sql="UPDATE parcel SET parcelno='".$parcel."', items='".$items."' where id='".$id."'"; $result=mysql_query($sql) or die(mysql_error()."\n"); ?>
Попробуй это.
В вашем запросе есть проблема с переменной синтаксического анализа. Попробуй это:
$sql="UPDATE parcel SET parcelno='" . $parcelno . "', items='" . $items . "' where id='" . $id . "'";