-2

http://www.phpeasystep.com/mysql/10.htmlで見つけた例を微調整して 、ニーズに合わせています。これは、個々のレコードを編集する代わりに、すべてを一度に編集できる結果の大きなテーブルです。テーブルの内容を特定の条件に制限するために検索語を渡すことができるように、オリジナルを変更しました。

タイプミスを見つけるのを手伝っていただければ幸いです。最初のクエリ $sql では、変数 $location で機能するように引用符を少し変更する必要がありました。いくつかの行を更新した後、送信をクリックすると、テーブル ヘッダーと送信ボタンが表示されます。コンテンツもデータベースへの更新もありません。最後の更新である $sql1 は最初の更新と非常に似ているため、なぜ機能しないのかわかりません。例のループ構造に問題がないかどうかを把握しようとしています。

<?php

$host="localhost"; // Host name 
$username="*****"; // Mysql username 
$password="*****"; // Mysql password 
$db_name="Inventory"; // Database name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$location=$_POST['search']; 

echo $location; 
$sql = 'SELECT * FROM `Items` WHERE `Location` = "'.$location.'"';

$result=mysql_query($sql);

// Count table rows 
$count=mysql_num_rows($result);
?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="post" action="">
<tr> 
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">

<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Present Condition</strong></td>
<td align="center"><strong>Color</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<tr>
<td align="center">
<?php $id[]=$rows['ItemNumber']; ?> <?php echo $rows['ItemNumber']; ?>
</td>
<td align="center">
<input name="ItemName[]" type="varchar" id="ItemName" value="<?php echo $rows['ItemName']; ?>">
</td>
<td align="center">
<select name="ItemCondition[]" id="ItemCondition">
    <option value="">Select...</option>
    <option value="Excellent">Excellent !</option>
    <option value="Good">Good</option>
    <option value="OK">OK</option>
    <option value="Poor">Below Average</option>
    <option value="Change">Replace</option>
   </select>

</td>
<td align="center">
<input name="ItemColor[]" type="varchar" id="ItemColor" value="<?php echo $rows['ItemColor']; ?>">

</td>
</tr>

<?php
}
?>

<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php

// Check if button name "Submit" is active, do this 
if($Submit){
    for($i=0;$i<$count;$i++){
    $sql1="UPDATE `Items` SET ItemName='$ItemName[$i]', ItemCondition='$ItemCondition[$i]', ItemColor='$ItemColor[$i]' WHERE ItemNumber='$id[$i]'";

    $result1=mysql_query($sql1);
    echo $i;
    }
}

if($result1){
header("location:inventory.php");
}
mysql_close();
?>

表はとてもシンプルです。ItemNumber (キー)、ItemName、ItemCondition、ItemColor。現在、アイテムのリストを照会し、各アイテムの値を正しく表示しますが、更新に失敗します。私は困惑しています。

百万の前もって感謝します。

4

1 に答える 1

0

あなたのコードにいくつか問題があることに気付き、その一部を作り直しました。コメント/コードで説明できることを願っていますが、ご不明な点がございましたらお気軽にお問い合わせください。

これはテストされていないため、タイプミスがある場合は事前にお詫びします。

<?php
$host = "127.0.0.1";
$username = "*****";
$password = "*****";
$db_name = "Inventory";

// When possible, you should use object-based SQL statements vs procedural
$sql = new mysqli($host, $username, $password, $db_name);

if($sql->connect_error) {
    die($sql->connect_error);
}


// This should really be checked with isset()
// It should also be sanitized to prevent SQL injections
$location = $_POST['search']; // This field should be sanitized to prevent SQL injections

$get_items = $sql->query("
    SELECT *
      FROM `Items`
     WHERE `Location` = '".$location."'
");

// count
$count = $get_items->num_rows;

// NOTE: Notice that the Submit logic comes before some of the other logic
// This is because of the header() statement. You can't change location if you've already outputted code
// One method around this is to buffer, but in this case, it's easier to just shift the code
if(isset($_POST['Submit'])) {
    for($i = 0; $i < $count; $i++) {
        $sql->query("
            UPDATE `Items`
               SET `ItemName`      = '".$_POST['ItemName'][$i]."',
                   `ItemCondition` = '".$_POST['ItemCondition'][$i]."',
                   `ItemColor`     = '".$_POST['ItemColor'][$i]."'
             WHERE `ItemNumber` = '".$_POST['id'][$i]."'
        ");
    }

    $sql->close(); // Close the connection on page-leave
    header("Location: inventory.php"); // Remember: You can't use this method to redirect if you've already displayed any content
    exit;
}
?>
<form name="form1" method="post">
    <table width="500" border="0" cellspacing="1" cellpadding="0">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Present Condition</th>
                <th>Color</th>
            </tr>
        </thead>
        <tbody>
        <?php
        while($row = $get_items->fetch_assoc()) {
        ?>
        <tr>
            <td align="center">
                <?php echo $row['ItemNumber']; ?>
                <input type="hidden" name="id[]" value="<?php echo $row['ItemNumber']; ?>">
            </td>
            <td align="center">
                <input name="ItemName[]" type="text" class="ItemName" value="<?php echo $row['ItemName']; ?>">
                <!-- This input type was "varchar" which isn't valid HTML -->
                <!-- Also, keep in mind that an ID should only be used once. Classes can be used multiple times, however. -->
            </td>
            <td align="center">
                <select name="ItemCondition[]" id="ItemCondition">
                    <option value="">Select...</option>
                    <option value="Excellent">Excellent !</option>
                    <option value="Good">Good</option>
                    <option value="OK">OK</option>
                    <option value="Poor">Below Average</option>
                    <option value="Change">Replace</option>
                </select>
            </td>
            <td align="center">
                <input name="ItemColor[]" type="text" class="ItemColor" value="<?php echo $row['ItemColor']; ?>">
            </td>
        </tr>
        <?php
        }
        ?>
        <tr>
            <td colspan="4" align="center">
                <input type="submit" name="Submit" value="Submit">
            </td>
        </tr>
        </tbody>
    </table>
</form>
<?php
$sql->close(); // Close the connection when done executing queries
?>
于 2013-04-22T22:26:54.720 に答える