2014-02-22 2 views
2
$student_info = array(
       'student_number'=>$_POST['student_number'], 
       'student_first_name'=>$_POST['student_first_name'], 
       'student_middle_name'=>$_POST['student_middle_name'], 
       'student_last_name'=>$_POST['student_last_name']); 

foreach($student_info as $table_row=>$information){ 
    $sql = "INSERT INTO student_info_db (`$table_row`) VALUES(`$information`)"; 

    echo $table_row . " " . $information; 
} 

im не очень уверен, почему он не вставляет никаких данных в базу данных. информация echo $ table_row $ предназначена только для того, чтобы получить значение, и оно преуспевает, но все равно не вставляет никаких данных. вопрос в том, что было не так? im довольно уверен, что я делаю правильный sql .. или я нет?для каждого цикла PHP, вставить в SQL, не вставляя данные

+2

Вы не используете запрос. Используйте mysqli_query ($ query) после строки запроса –

+0

Все, что вы делаете здесь, помещает запрос в переменную .... – jraede

ответ

2

кажется, что ваша строка SQL-запрос не является правильным. вы выполняете запрос для каждого элемента! он будет вставлять данные в каждый столбец за каждый раз! у вас будет 4 записи для одной информации о студенте в вашем столе!

Вы также не выполнили запрос в цикле.

вы должны создать запрос внутри цикла, а затем выполнить запрос после цикла

Вы должны сделать строку запроса первый из вашего массива.

Сначала сделайте запрос, как это:

попробовать так:

$student_info = array(
       'student_number'=>mysql_real_escape_string($_POST['student_number']), 
       'student_first_name'=>mysql_real_escape_string($_POST['student_first_name']), 
       'student_middle_name'=>mysql_real_escape_string($_POST['student_middle_name']), 
       'student_last_name'=>mysql_real_escape_string($_POST['student_last_name'])); 

foreach($student_info as $table_row=>$information){ 
    $cols .= "`".$table_row."` ,"; 
    $vals .= "'".$information . "' ,"; 
    } 
$cols = rtrim($cols,","); 

$vals = rtrim($vals,","); 

$sql = "INSERT INTO student_info_db (".$cols . ") VALUES(".$vals .")"; 

живой демо с данными выборки: https://eval.in/104428

Затем нужно запустить этот $sql запрос

как это:

if(mysqli_query($con, $sql) 
echo "successfully inserted"; 
else 
echo "something is wrong!"; 
+0

@Bobski: Вы попробовали это? –

+0

gotta попробуйте это, извините, что нужно его понять подробнее> _ Bobski

+0

-1, вложение несвязанного ввода из '$ _POST' в SQL-запрос - это [плохая идея] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php). –

0

В вашем цикле foreach запустите запрос. как это:

$student_info = array(
     'student_number'=>$student_number, 
     'student_first_name'=>$student_first_name, 
     'student_middle_name'=>$student_middle_name, 
     'student_last_name'=>$student_last_name); 

foreach($student_info as $table_row=>$information) 
{ 
    $sql = "INSERT INTO student_info_db (`$table_row`) VALUES('".mysqli_real_escape_string($connection, $information)."')"; 
    mysqli_run($connection, $sql); 
    echo $table_row . " " . $information; 
} 

Более подробную информацию о mysqli_query here

+2

вы запускаете запрос для каждого элемента массива! –

+0

вы должны понимать, так как OP new comer in php. и это не редизайн его логики –

+0

-1, вложение неэкранированного ввода из '$ _POST' в SQL-запрос - это [плохая идея] (http://stackoverflow.com/questions/60174/how-can-i-prevent- SQL-инъекция-в-РНР). –

2

Вы не выполнили запрос! Сначала установите соединение с базой данных. Затем добавьте mysql_query ($ sql) для выполнения запроса.

$student_info = array(
      'student_number'=>mysql_real_escape_string(htmlspecialchars($_POST['student_number'])), 
      'student_first_name'=>mysql_real_escape_string(htmlspecialchars($_POST['student_first_name'])), 
      'student_middle_name'=>mysql_real_escape_string(htmlspecialchars($_POST['student_middle_name'])), 
      'student_last_name'=>mysql_real_escape_string(htmlspecialchars($_POST['student_last_name']))); 

//First we need to make a connection with the database 
$host='localhost'; // Host Name. 
$db_user= 'root'; //User Name 
$db_password= 'nopass'; 
$db= 'product_record'; // Database Name. 
$conn=mysql_connect($host,$db_user,$db_password) or die (mysql_error()); 
mysql_select_db($db) or die (mysql_error()); 

$column = ""; 
$value = ""; 
foreach($student_info as $table_row=>$information){ 
    if($column != ""){ 
    $column .= ","; 
    $value .= ","; 
    } 

    $column .= $table_row; 
    $value .= "'".$information."'"; 

} 

$sql = "INSERT INTO student_info_db (".$column.") VALUES(".$value.")"; 

mysql_query($sql); 
mysql_close($conn); 
+0

-1, вложение неэкранированного ввода из '$ _POST' в SQL-запрос - это [плохая идея] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php). –

+0

Я редактирую свой ответ. Не могли бы вы проверить это? :) –

+0

Теперь все выглядит нормально, хотя я [повторю свой предыдущий комментарий к Awlad] (http://stackoverflow.com/questions/21949944/for-each-loop-php-insert-into-sql-not-inserting -data/21966893? noredirect = 1 # comment33292440_21950038) об экранировании как можно позже. Но в любом случае я дам вам обоим, так как ваши ответы кажутся по существу правильными. –

0

proper way сделать это использовать prepared statement with placeholders:

$sql = <<<'END' 
    INSERT INTO student_info_db (
     student_number, 
     student_first_name, 
     student_middle_name, 
     student_last_name 
    ) VALUES (?, ?, ?, ?) 
END; 

$stmt = $dbConnection->prepare($sql) 

$stmt->bind_param('s', $_POST['student_number']); 
$stmt->bind_param('s', $_POST['student_first_name']); 
$stmt->bind_param('s', $_POST['student_middle_name']); 
$stmt->bind_param('s', $_POST['student_last_name']); 

$stmt->execute(); 

или, если вы настаиваете на использовании массива в качестве промежуточной стадии:

$student_info = array(
    'student_number'  => $_POST['student_number'], 
    'student_first_name' => $_POST['student_first_name'], 
    'student_middle_name' => $_POST['student_middle_name'], 
    'student_last_name' => $_POST['student_last_name'] 
); 

$keys = array_keys($student_info); 
$columns = implode(',', $keys); 
$holders = implode(',', array_fill(0, count($keys), '?')); 

$sql = "INSERT INTO student_info_db ($columns) VALUES ($holders)"; 
$stmt = $dbConnection->prepare($sql) 

foreach ($keys as $key) { 
    $stmt->bind_param('s', $student_info[$key]); 
} 
$stmt->execute(); 
Смежные вопросы