0

cuzから複数の入力を取得するためのより良いコーディングスタイルがあるかどうか疑問に思っている人は、私のコーディングが長すぎて多くの行を食べると思います

<body>
    <form action="index.php" method="post">

        <input type="hidden" name="number_students" value="4">  
        <table>
            <tr>
                <td><input type="text" name="name[0]"></td>
                <td><input type="text" name="grade[0]"></td>
            </tr>
            <tr>
                <td><input type="text" name="name[1]"></td>
                <td><input type="text" name="grade[1]"></td>
            </tr>
            <tr>
                <td><input type="text" name="name[2]"></td>
                <td><input type="text" name="grade[2]"></td>
            </tr>
            <tr>
                <td><input type="text" name="name[3]"></td>
                <td><input type="text" name="grade[3]"></td>
            </tr>   
        </table>

        <input type="submit" name="submit_in" value="submit">
</form>
</body>

php ..

$button = $_POST['submit_in'];
$arrayname = array();
$arraygrade = array();
$name= $_POST['name'];
$grade = $_POST['grade'];   
$counter2 = 0;


if(isset($button)){

    foreach($name as $a => $x){ 
        $arrayname[] ="".$x;
        }  
 foreach($grade as $b => $y){
            $arraygrade[] ="".$y;
            $counter2+=1;
        }  
        for($v=0;$v<=$counter2-1;$v++){
            $insert = "INSERT INTO stud_info(stud_name,stud_grade) 
          VALUES('$arrayname[$v]','$arraygrade[$v]')";
          if(@!mysql_query($insert)){
            die('error insert'.mysql_error());
        }

        }


}

入力が動的であると仮定して、これらの値を取得するためのよりクリーンな手法があるかどうか疑問に思います。そのため、名前とIDの最後に配列を入力します。

4

3 に答える 3

0

What you are doing is not required because php return a array for multipal inputs you dont need to create a different ,$post is already array and also $post["name"] is array

      $name = $_POST['name']; 

       foreach( $name as $key => $n ) { echo "The name is ".$n.".", thank you\n"; }

See its already a array you dont need to loop and create it again Its already there

When you do $name=$_post["name"]; $name becomes array in your case

As simple as that

$button = $_POST['submit_in']; $name= $_POST['name']; $grade = $_POST['grade']; $counter2 = 0;

if(isset($button)){

for($v=0;$v<=$counter2-1;$v++){ $insert = "INSERT INTO stud_info(stud_name,stud_grade) VALUES('$name[$v]','$grade[$v]')"; if(@!mysql_query($insert)){ die('error insert'.mysql_error()); }

}

}

*NOTE * I AM ON MOBOLE BROWSER SO CODE IS NOT TESTED BUT IT SHOUL WORK

于 2012-09-21T21:14:54.137 に答える
0

I think you should also worry more about security and SQL Injection from your code ...

Revisited PHP Code (10 lines)

$sql = "INSERT INTO stud_info(stud_name,stud_grade)  VALUES('%s','%s')" ;
if (isset($_POST['submit_in'])) {
    for($i = 0; $i < count($_POST['name']); $i++)
    {
        $name = mysql_real_escape_string($_POST['name'][$i]);
        $grade = mysql_real_escape_string($_POST['grade'][$i]);
        $insert = sprintf($sql, $name, $grade);
        mysql_query($insert) or die('error insert' . mysql_error());
    }
}
于 2012-09-21T21:26:20.760 に答える
0

Executing a query in a loop is not a good thing too do, it will slow down your execution. Try this:

    if(!empty($_POST)) {

        //check if post variables are set and they are not empty

        //check that sizeof($_POST['name']) == $_POST['grade']

        //connect to db

        $name = $grade = array();
        for($i=0; $i < sizeof($_POST['name']); ++$i) { 
            $name[$i] = mysql_real_eascape_string(trim($_POST['name'][$i]));
            $grade[$i] = mysql_real_eascape_string(trim($_POST['grade'][$i]));
        } 

        $values = array();
        $insert = 'INSERT INTO stud_info(`stud_name`, `stud_grade`) VALUES';
        for($i=0; $i < sizeof($name); ++$i) { 
            $values[$i] = '(\''.$name[$i].'\', \''.$grade[$i].'\')';
        }
        $values = implode(', ', $values);
        $insert .= $values;

        if(@!mysql_query($insert)){
            die('error insert'.mysql_error());
        }

    }
于 2012-09-21T21:29:23.847 に答える