Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按名称更新用户输入_Php_Sql - Fatal编程技术网

Php 按名称更新用户输入

Php 按名称更新用户输入,php,sql,Php,Sql,我正在尝试创建一个脚本来更新一行,从用户输入行到两个不同的行 比如说,表有“timeleft”和“user”。用户将键入“用户”和时间,以便更新“timeleft” 我已经试过了,但是我不能,因为我刚刚开始学习PHP,现在已经有一个星期了 $db = mysql_connect(dbhost, dbuser,dbpass); if($db){ mysql_select_db(dbname); print(' <form action="" method="

我正在尝试创建一个脚本来更新一行,从用户输入行到两个不同的行

比如说,表有“timeleft”和“user”。用户将键入“用户”和时间,以便更新“timeleft”

我已经试过了,但是我不能,因为我刚刚开始学习PHP,现在已经有一个星期了

$db = mysql_connect(dbhost, dbuser,dbpass);
if($db){
    mysql_select_db(dbname);

    print('
        <form action="" method="POST">
                <div class="InputLine"><span class="CTBanForm">Nombre: </span><input type="text" name="IntroducedName" placeholder="Nombre..."></div>
                <div class="InputLine"><span class="CTBanForm">Tiempo: </span><input type="text" name="IntroducedTime" placeholder="Tiempo en numeros..."></div>
                <input type="submit" value="Borrar" name="PerformDelete">
        </form>
        ');
    if(empty($_POST['IntroducedName'])){
        echo '<div id="IDEmpty">Introduzca un nombre porfavor...</div>';
    }else if(empty($_POST['IntroducedTime'])){
        echo '<div id="IDEmpty">Introduzca un numero porfavor...</div>';
    }else{

        /* SQL STATEMENTS! */
        $IntroducedNameSQLSelect = 'SELECT '.$_POST['IntroducedName'].'" FROM CTBan_Log';

        $IntroducedTimeSQLUpdate = 'UPDATE '.$_POST['IntroducedTime'].'" FROM CTBan_Log WHERE timeleft=?';
        /* END SQL STATEMENTS! */
        if(!empty($_POST['IntroducedName'])){

            mysql_query($IntroducedNameSQLSelect);
            if(mysql_query($delete)){
                echo '<div id="Hecho"> Hecho. </div>';
            }
            else{
                echo '<div id="NoHecho"> Error, no se pudo realizar. </div>';
            }
        }
        else if(!empty($_POST['IntroducedTime'])){

            mysql_query($IntroducedTimeSQLUpdate);
            if(mysql_query($delete)){
                echo '<div id="Hecho"> Hecho. </div>';
            }
            else{
                echo '<div id="NoHecho"> Error, no se pudo realizar. </div>';
            }
        }
    }
    mysql_close($db);
}

首先,您应该停止使用mysql扩展,因为它已被弃用。有关这方面的详细信息,请参见:

第二,回答你的问题:

displayform.html:

<form action="processform.php" method="POST">
  <div class="InputLine">
    <span class="CTBanForm">Nombre: </span>
    <input type="text" name="IntroducedName" placeholder="Nombre...">
  </div>
  <div class="InputLine">
    <span class="CTBanForm">Tiempo: </span>
    <input type="text" name="IntroducedTime" placeholder="Tiempo en numeros...">
  </div>
  <input type="submit" value="Borrar" name="PerformDelete">
</form>
processform.php:

<?php

if (isset($_POST['IntroducedName']) && isset($_POST['IntroducedTime'])) {

    $mysqli = new mysqli('localhost', 'user', 'password', 'mysampledb');

    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $stmt = $mysqli->prepare("UPDATE CTBan_Log SET timeleft=? WHERE user=?");
    // assuming user is [s]tring and timeleft is [i]nteger
    $stmt->bind_param('is', $timeleft, $user);   

    $user = $_POST['IntroducedName'];
    $timeleft = $_POST['IntroducedTime'];

    /* execute prepared statement */
    $stmt->execute();

    printf("%d Row(s) updated.\n", $stmt->affected_rows);

    /* close statement and connection */
    $stmt->close();

    /* close connection */
    $mysqli->close();
}
else{
    echo "Please go back and complete all form fields!"
}

?>

我找到了解决方案:

感谢hr.anvari,我修复了SQL语句。我用了这个:

'UPDATE CTBan_Log SET timeleft="'.$time.'" WHERE perp_name="'.$_POST['IntroducedName'].'"'

$time = mysql_real_escape_string($_POST['IntroducedTime']); // Had to use this to get numbers passed to Mysql.
而不是这个:p:

    /* SQL STATEMENTS! */
    $IntroducedNameSQLSelect = 'SELECT '.$_POST['IntroducedName'].'" FROM CTBan_Log';

    $IntroducedTimeSQLUpdate = 'UPDATE '.$_POST['IntroducedTime'].'" FROM CTBan_Log WHERE timeleft=?';
    /* END SQL STATEMENTS! */

就这些。我需要使用mysqli-tho。感谢Fredy和hr.anvariSQL

撇开最佳实践等问题不谈,您可能想看看这篇文章以获得一些提示。您实际遇到的错误是什么?您打破了SQL中的一些规则。您引入了SQL注入,然后使用了一个prepared statements'方法,其中timeleft=?没有任何约束。不要问自己为什么你的代码不起作用;你会明白我的意思的。我想知道为什么投了反对票?弗雷德,我真的想谢谢你!谢谢hr.anvari!我几乎完成了脚本的修改!那么,您做了哪些更改,以通知访问该问题的其他人?哦,我明白了……完全重写了。没有真正回答为什么他们的代码失败的问题。谢谢。但是现在,这个答案怎么办呢?当Stack允许的时候,你也可以接受你自己的答案-