簡體   English   中英

HTML / PHP-從mysql數據庫獲取的輸入值不會更新

[英]HTML/PHP - Input value taken from a mysql database wont update

因此,基本上我有一個充滿輸入的表,這些輸入都填充有從mysql數據庫獲取的值。 我還使用單選按鈕來選擇其中的一行,然后對其進行編輯,該行應該在數據庫上進行更新,但是它一直使我拋出“默認”值,我的意思是,現有數據不是舊值,而是新的一個。 這是我的整個代碼:

    <?php
include 'config.php';

$dbname = "pruebasPHP";


$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Conexión fallida: " . mysqli_connect_error());
}


echo '<html><head><title> Modificar datos Mysql PHP </title>
    <style>  td, th { padding: 5px; border: 1px solid black;} input {border: 0px;}</style>

    <script type="text/javascript">
    //<![CDATA[

    window.onload = function(){
        var cuantos = document.getElementById("valorI").value;

        for(var x=0; x<cuantos; x++){
            var nx = document.getElementById("n".concat(x));
            nx.readOnly = true;
            var ax = document.getElementById("a".concat(x));
            ax.readOnly = true;
            var ex = document.getElementById("e".concat(x));
            ex.readOnly = true;
        }
    }


    function escritura() {
        var cuantos = document.getElementById("valorI").value;

        for(var x=0; x<cuantos; x++){
            var radiox = document.getElementById("r".concat(x));
            if (radiox.checked) {
                document.getElementById("n".concat(x)).readOnly = false;
                document.getElementById("a".concat(x)).readOnly = false;
                document.getElementById("e".concat(x)).readOnly = false;
            }
            else {
                document.getElementById("n".concat(x)).readOnly = true;
                document.getElementById("a".concat(x)).readOnly = true;
                document.getElementById("e".concat(x)).readOnly = true;
            }
        }
    }

    //]]>
    </script>


    </head><body><center></br>';

if (isset($_POST['modificar'])) {
    if(isset($_POST['radio'])){


        $datos = $_POST['radio'];
        $datosSeparados = explode(":", $datos);

        $sql = 'UPDATE tabla1 SET 
                firstname="'.$datosSeparados[0].'", 
                lastname="'.$datosSeparados[1].'", 
                email="'.$datosSeparados[2].'"
                WHERE id='.$datosSeparados[3].';';

        echo $sql;

        if (mysqli_query($conn, $sql))
            echo 'El registro con el ID=<b>' . $datosSeparados[3] . '</b> se ha modificado satisfactoriamente. </br>';
        else 
            echo 'Error. Ha ocurrido un problema tratando de modificar el registro con ID=<b>' . $datosSeparados[3] . '</b>: </br> ' . mysqli_error($conn);
    }
}

echo '<form action="" method="post"> Registros a modificar:<br/><table>';


$sql = "SELECT id, firstname, lastname, email from tabla1;";
$resultado = mysqli_query($conn, $sql);


    echo '<tr>';
if ($fila = mysqli_fetch_assoc($resultado)){ 
    foreach($fila as $x => $x_value) {
        echo '<th>' . $x . '</th>';
    }
}
    echo '</tr>';

if (mysqli_num_rows($resultado) > 0) {

    $i = 0;

    while($fila = mysqli_fetch_assoc($resultado)) {

        echo '
        <tr>
            <td> ' . $fila["id"] . '</td>
            <td><input type="text" id="n' . $i . '" name="nombre" value="' . $fila["firstname"] . '" /></td>
            <td><input type="text" id="a' . $i . '" name="apellidos" value="' . $fila["lastname"] . '" /></td>
            <td><input type="text" id="e' . $i . '" name="email" value="' . $fila["email"] . '" /></td>
            <td><input type="radio" id="r' . $i . '" name="radio" value="'.$fila["firstname"].':'.$fila["lastname"].':'.$fila["email"].':'.$fila["id"].'" onchange="escritura();" /></td>
        </tr>
        ';

        $i++;
    }

    echo '<input type="hidden" id="valorI" value="'. $i . '"/>';
} 




echo '
    </table>
    <br/>
    <input type="submit" name="modificar" value="Modificar">
    <input type="reset" value="Limpiar">
    </form>';

echo '</center>
    </body>
    </html>';

?> 

關於MVC(模型視圖控制器)的詳細解釋有些冗長,但是您可以在Google上找到大量信息。 簡而言之,它是分層的。 模型(處理數據,數據庫查詢),控制器(邏輯構建視圖所需的數據),視圖(html,css,js)。上面的代碼很難遵循,我相信您將從MVC中受益圖案。

無論如何,要開始分離代碼,您需要開始進行一些整理。 我會將您的初始SQL查詢放在最上面(模仿數據層),然后在下面需要任何邏輯,最后是html。

我將向您展示如何重做您的代碼。 所有這些代碼都放在一個文件中,僅用於演示目的。 最終,您要將其分開在不同的文件中。

這是頁面的頂部,模擬從數據庫到PHP的數據 我會將這些數據分配給您的變量$resultado

<?php
$resultado = array(
    array(
        "id" => 1,
        "firstname" => "John",
        "lastname" => "Doe",
        "email" => "j@d.com"
    ),
    array(
        "id" => 2,
        "firstname" => "Jane",
        "lastname" => "Johnson",
        "email" => "ja@d.com"
    ),
    array(
        "id" => 3,
        "firstname" => "Tom",
        "lastname" => "Brady",
        "email" => "b@d.com"
    )
);
?>

然后,由於沒有太多邏輯發生,因此我將輸出“視圖”或HTML。 在這里,您會注意到我創建了一個不同的功能來“鎖定”所有輸入,另一個功能將傳遞當前的廣播並“解鎖”這些輸入。 請注意,所有嵌入式PHP都被HTML內的那些PHP標簽所包圍。

<html>
    <head>
        <script type="text/javascript">

            window.onload = function () {
                lock_inputs();
            };

            function lock_inputs() {
                var inputs = document.getElementsByTagName('input');
                for (var i = 0; i < inputs.length; i++) {
                    if (inputs[i].type === "text") {
                        inputs[i].readOnly = true;
                    }
                }
            }

            function escritura(radio, i) {
                lock_inputs();
                if (radio.checked) {
                    document.getElementById("n".concat(i)).readOnly = false;
                    document.getElementById("a".concat(i)).readOnly = false;
                    document.getElementById("e".concat(i)).readOnly = false;
                }
            }
        </script>
    </head>
    <body>
        <form action="" method="post">
            Registros a modificar:<br/>
            <table>
                <?php
                $i = 0;
                foreach ($resultado as $fila) {
                    ?>
                    <tr>
                        <td><?php echo $fila["id"] ?></td>
                        <td>
                            <input type="text" id="n<?php echo $i ?>" name="nombre" value="<?php echo $fila["firstname"] ?>"/>
                        </td>
                        <td>
                            <input type="text" id="a<?php echo $i ?>" name="apellidos" value="<?php echo $fila["lastname"] ?>"/>
                        </td>
                        <td>
                            <input type="text" id="e<?php echo $i ?>" name="email" value="<?php echo $fila["email"] ?>"/>
                        </td>
                        <td>
                            <input type="radio" id="r<?php echo $i ?>" name="radio" value="<?php echo $fila["firstname"] . ':' . $fila["lastname"] . ':' . $fila["email"] . ':' . $fila["id"] ?>" onchange="escritura(this,<?php echo $i ?>);"/>
                        </td>
                    </tr>
                    <?php
                    $i++;
                }
                ?>
            </table>
        </form>
    </body>
</html>

希望您現在可以更好地理解此代碼。 我確實刪除了許多其他代碼,以便您可以了解並理解分離的重要性。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM