使用var进行查询

时间:2014-11-16 21:17:19

标签: php mysql

这让我感到沮丧。已经工作了大约一个小时,我似乎无法找到解决方法。

我正在为学校的项目管理网站工作,这就是这样的想法:我有一个有一个组合框的表单,这个表单填充了对MySql DB的查询,到目前为止一直很好,在其他网页

在第二页中,我使用POST方法拯救了我需要的值(并且它可以工作!)。所以第二页显示以下内容:

while($row = mysql_fetch_array($result)) {
    echo "<b>Codigo Proyecto : </b>" ,$row["codigo_proyecto"] . "<br>"; 
    echo "<b>Nombre Proyecto : </b>" ,$row["nombre_proyecto"] . "<br>";
    echo "<b>Presupuesto Inicial : </b>" ,$row["presupuesto"] . "<br>";
}

这显示了我从DB获取的字段,之后有一个buton,这应该让我在点击后更新表格上的一些字段,代码:

echo '<input type="submit" name="guardar" value="Guardar"/>'

if (isset($_POST["guardar"])) {
    $insert="update proyectos_info set presupuesto_final='$_POST[presupuesto_final]' where codigo_proyecto=$_POST[selecciona_proyecto]";
    echo "insert = " .$insert;
    $ejecutar = mysql_query($insert);
}

我似乎无法将变量$_POST[selecciona_proyecto]传递给我单击按钮以完成查询的部分。我已尝试使用其他变量来存储它,仅使用fetch_array该字段(即$prueba=$row[0])它会一直空着,我知道它的空cos我回应它这是输出

insert = update proyectos_info set presupuesto_final='XX' where codigo_proyecto=     

如果您需要整个代码,请告诉我。

提前致谢。

3 个答案:

答案 0 :(得分:0)

首先,我将首先说mysql_ *系列函数已经死了。 不要使用

以下是每个PHP文档页面的摘录,其中包含mysql_ *函数

  

警告   自PHP 5.5.0起,此扩展已弃用,将来将被删除。相反,应该使用MySQLi或PDO_MySQL扩展。

假设你的表格是这样的。

<!-- I suspect that part of your problem is you don't have the form set up -->
<form method="POST">
    <input type="hidden" name="selecciona_proyecto" value="1"/>
    <input type="text" name="presupuesto_final" value="Guardar"/> 
    <input type="submit" name="guardar" value="Guardar"/> 
</form>

以下是您在PDO和mysqli之前的日子里做的事情

$presupuesto_final = mysql_real_escape_string($_POST['presupuesto_final']);
$codigo_proyecto = mysql_real_escape_string($_POST['selecciona_proyecto']);
$insert = "update proyectos_info 
           set presupuesto_final='$presupuesto_final'
           where codigo_proyecto=$codigo_proyecto";

以下是您应该如何做的。

$db = new mysqli("host", "user", "pass", "db_name");
$sql = "update proyectos_info 
       set presupuesto_final = ?
       where codigo_proyecto = ?";
$stmt = $db->prepare($sql);
if (!$stmt) return;
$vals = array($_POST['presupuesto_final'], $_POST['selecciona_proyecto']);
$stmt->bind_param('si', $vals);
$stmt->execute();

答案 1 :(得分:-1)

变化:

$insert="update proyectos_info set presupuesto_final='$_POST[presupuesto_final]' where 
codigo_proyecto=$_POST[selecciona_proyecto]";

要:

$insert="update proyectos_info set presupuesto_final='".$_POST['presupuesto_final']."' where 
codigo_proyecto=".$_POST['selecciona_proyecto'];

会让它发挥作用。但是,这实际上是一种不好的做法,因为您应该使用预准备语句或其他一些方法来缓解SQL注入。

请查看有关SQL注入的一些资源以及如何防止它们。 Here's a good place to start.

以下文章中的一些代码片段有助于入门:

使用直接PHP:

$result = pg_query_params( $dbh, 'SELECT * FROM users WHERE email = $1', array($email) );

使用mysqli

MySQL Improved扩展处理绑定参数。

$stmt = $db->prepare('update people set name = ? where id = ?');
$stmt->bind_param('si',$name,$id);
$stmt->execute();

答案 2 :(得分:-1)

不知道这是不是问题,但你错过了引号:

$insert="update proyectos_info set presupuesto_final='$_POST[presupuesto_final]' where 
codigo_proyecto=$_POST[selecciona_proyecto]";

所以给$ _POST一些引用

$insert="update proyectos_info set presupuesto_final='$_POST['presupuesto_final']' where 
codigo_proyecto=$_POST['selecciona_proyecto']";