Я пытаюсь создать форму, которая обновляет информацию о пользователе, хранящуюся в базе данных Oracle, обновления не проходят должным образом, и я не вижу проблемы, так как у меня есть форма, в которой распечатывается SQL, отправленный oracle, и все это проверяется,
Вот php, который формирует соединение:
<?php
$sql="select * from Members where MemberID = ".$_GET["memberid"];
$conn = oci_connect("user","pass", "conn");
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
$row=oci_fetch_row($stmt);
oci_free_statement($stmt);
oci_close($conn);
?>
Вот форма с примером или двумя вводами форм:
<div class="topwrapper"><img src="logo.png" alt="Peak Park Sailing Club"></div>
<form name="form1" method="post" action="editmemhandler.php">
<input name="MemberID" type=hidden id="MemberID" value=<?php print $row[0];?>>
<table class="infotable">
<tr>
<td><strong>Member ID</strong></td>
<td><input name="memberid" type="text" id="memberid" value=<?php print $row[0];?>></td>
</tr>
<tr>
<td><strong>First Name</strong></td>
<td><input name="firstname" type="text" id="firstname" value=<?php print $row[1];?>></td>
</tr>
И вот обработчик php:
<?php
IF ($_POST[groupid]=="") $groupid=0;
ELSE $groupid=$_POST[groupid];
$memberid=$_POST["memberid"];
$firstname=$_POST["firstname"];
$lastname=$_POST["lastname"];
$dob=$_POST["dob"];
$membertype=$_POST["membertype"];
$houseno=$_POST["houseno"];
$street=$_POST["street"];
$town=$_POST["town"];
$county=$_POST["county"];
$postcode=$_POST["postcode"];
$lastjoined=$_POST["lastjoined"];
$sql = "UPDATE Members SET firstname='$firstname', lastname='$lastname', dob='$dob', membertype='$membertype', groupid=$groupid, houseno='$houseno', street='$street', town='$town', county='$county', postcode='$postcode' where memberid=$memberid;";
$conn = oci_connect("user","pass", "conn");
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
print "Record updated ok </br>";
print $sql;
oci_free_statement($stmt);
oci_close($conn);
?>
Я очень новичок в php и использую его с Oracle, поэтому он может быть чем-то очевидным...
Заранее спасибо!
Боб Р
Попробуй это:
$conn = oci_connect("user","pass", "conn");
$sql = "UPDATE Members SET firstname=:firstname, lastname=:lastname, dob=:dob, membertype=:membertype, groupid=:groupid, houseno=:houseno, street=:street, town=:town, county=:county, postcode=:postcode where memberid=:memberid;";
$stmt = oci_parse($conn, $update);
oci_bind_by_name($stmt, ':firstname', $firstname);
oci_bind_by_name($stmt, ':lastname', $lastname);
oci_bind_by_name($stmt, ':dob', $dob);
oci_bind_by_name($stmt, ':membertype', $membertype);
oci_bind_by_name($stmt, ':groupid', $groupid);
oci_bind_by_name($stmt, ':houseno', $houseno);
oci_bind_by_name($stmt, ':street', $street);
oci_bind_by_name($stmt, ':county', $county);
oci_bind_by_name($stmt, ':postcode', $postcode);
oci_bind_by_name($stmt, ':memberid', $memberid);
$result = oci_execute($stmt, OCI_DEFAULT);
if (!$result) {
echo oci_error();
}
oci_commit($conn);
Этот способ работы также уменьшит вашу инъекцию sql. Я написал это только из головы. У Havn't была возможность проверить это, потому что у меня нет DB для Oracle. Но попробуйте.
Вы не включили переменную $ memberid в qoutes в запросе
.... where memberid='$memberid';"