Mysql
 sql >> Datenbank >  >> RDS >> Mysql

HTML &PHPMySQL , Fügen Sie viele Daten aus dem Textbereich in die Tabelle ein

Ein paar Änderungen, die genügen sollten:

  • Wie RiggsFolly erwähnte, das Textfeld in das Formular verschoben werden sollen
  • Ich würde die Formularübermittlungsmethode POST machen statt GET . Auf diese Weise werden die Daten nicht an die URL (d. h. in die Abfragezeichenfolge) angehängt.

    <form method="post" id="testformid">

  • Begrenzen Sie das Zeilenumbruchzeichen (z. B. \n ) mit doppelten Anführungszeichen:z. $lines = explode("\n",$_POST['taname']);

  • Verwenden Sie mysqli-Funktionen (z. B. mysqli_connect() ). , mysqli_prepare() , mysqli_bind_param() und mysqli_execute() ) oder PDO-Funktionen um die Daten in die Datenbank einzufügen

Bearbeiten:

Der Aufruf von mysqli_bind_param() muss mit allen Parametern auf einmal aufgerufen werden, anstatt einmal pro Parameter. Um dies mit einer variierenden Anzahl von Parametern zu tun, müssen wir eine Technik wie die in dieser Artikel .

    <?php
    $lines = array();
    $output = '';
    if(array_key_exists('taname',$_POST) && $_POST['taname']) {
        $lines = explode("\n",$_POST['taname']);

        //define $host, $username, $pw, $databaseName before this
        //$host = 'localhost';...etc...
        $connection = mysqli_connect($host,$username, $pw, $databaseName);
        if ($connection) {
            $paramHolders = array_map(function() { return '?';},$lines);

            //update tablename, column name accordingly 
            $insertQuery = 'INSERT INTO tableName (columnName) VALUES ('.implode('), (',$paramHolders).')';
            $statement = mysqli_prepare($connection,$insertQuery);
            //this will be used as the first param to mysql_stmt_bind_param
            // e.g. 'ssss' - one 's' for each line
            $types = str_repeat('s',count($lines));
            $params = array($statement,&$types);
            //add each line by-reference to the list of parameters
            foreach($lines as $index=>$line) {
                $output .= '<div>inserted line: '.$line.'</div>';
                $params[] = &$lines[$index];
            }
            //call mysql_bind_param() with the varying number of arguments
            call_user_func_array('mysqli_stmt_bind_param',$params);
            $statement->execute();
        }
    }
    ?>
    <html>
        <body>
            <form method="post" id="testformid">
                <textarea name="taname" id="taid" cols="35" wrap="soft"></textarea>
                <input type="submit"/>
            </form>
            <? echo $output; ?>
        </body>
    </html>