CRUD'ding с PHP и Oracle

0

Я пытаюсь создать форму, которая обновляет информацию о пользователе, хранящуюся в базе данных 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, поэтому он может быть чем-то очевидным...

Заранее спасибо!

Боб Р

  • 0
    Это дает ошибку или что-нибудь? Или это просто ничего не делает?
  • 0
    Он просто ничего не делает, но если я скопирую и вставлю результат SQL в GUI на Oracle, обновление будет работать нормально
Показать ещё 9 комментариев
Теги:
database

2 ответа

1

Попробуй это:

$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. Но попробуйте.

  • 0
    Я получаю истинную отдачу от этого, но данные не обновляются в базе данных. Может ли это быть потому, что строки символов не в кавычках?
  • 0
    Этот способ является более подготовленным способом выражения. «Здесь не имеет значения, потому что oci сделает это для вас, когда вы связываете параметр». Я отредактировал свой ответ на то, что вы можете добавить сейчас, и посмотрите, в чем ошибка это ты получаешь ..
Показать ещё 18 комментариев
0

Вы не включили переменную $ memberid в qoutes в запросе

.... where memberid='$memberid';"

  • 0
    Идентификатор участника - это число, имеет ли это значение?
  • 0
    @BobP Нет, это не так.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню