Что не так с моим исходным кодом php / MySQL?

#php #foreach

#php #foreach

Вопрос:

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

 <input id="Valor" type="text" name="Valor[]" value="<?php echo $row2["Valor"];  ?>" />
 

и флажок похож:

 <input type="checkbox" name="Pago[]" id="Pago" value="<?php echo $row2["IdSolicitudTarjeta"]; ?>" />
 

Но когда я отправлю форму по адресу ‘insertmultiple.php «Я использую следующий код, но показывает только 2 результата. Неважно, сколько раз я пытался показать остальное, не работает:

 foreach($_POST['Pago'] as key => $val) {
$Producto = $_POST['Producto'][$key];
$FormaPago = $_POST['FormaPago'][$key];
$FechaConsignacion = $_POST['FechaConsignacion'][$key];
$Valor = $_POST['Valor'][$key];
$Detalle = $_POST['Detalle'][$key];
$FechaRegistrar = $_POST['FechaRegistrar'][$key];

echo $Pago."amp;nbsp;--amp;nbsp;".$FechaConsignacion."amp;nbsp;--amp;nbsp;".$Producto."amp;nbsp;--amp;nbsp;";
echo $FormaPago."amp;nbsp;--amp;nbsp;".$Valor."amp;nbsp;--amp;nbsp;".$Detalle."amp;nbsp;--amp;nbsp;";
echo $FechaRegistrar."<br>";

}
 

пожалуйста, помогите! 🙁

Комментарии:

1. Где есть код mysql …? Кроме того, у вас есть много уязвимостей для внедрения xss.

2. Можете ли вы показать нам код страницы, которая отображает форму? Немного сложно понять, что происходит до выполнения этого кода.

3. $ AInsertar = «(«.$Ider.»,».$Producto.»,'».$FechaRegistrar.»‘,'».$FechaConsignacion.»‘,».$FormaPago.»,».$Pagado.»,'».$Valor.»‘,'».$Detalle.»‘,'».$FechaAprobado.»‘».»);»; $ sql = » ВСТАВИТЬ В compras(IdCliente,IdProducto,FechaSolicitud,FechaPago,IdFormaPago,RealizoPago,ValorPagado,Detalles,FechaAprobacionPago ) ЗНАЧЕНИЯ «.$AInsertar; echo $sql;conectar(); mysql_query($sql) или die (mysql_error()); desconectar();

4. print_r($_POST) пожалуйста

Ответ №1:

Первое: не key но $key

 foreach($_POST['Pago'] as $key => $val) {
 

Однако я не вижу никакого кода SQL.

ДОБАВЛЕНИЕ

Хм … похоже, это действительно грязный способ вставки чего-либо в базу данных. Как заметил Cyclone, вы не очищаете свой ввод перед вставкой даты. Это неправильно, но это история для другого поста: p

Кроме того, рассмотрим одну вещь:

Вы уверены, что хотите использовать

 $Producto = $_POST['Producto'][$key];
 

и не:

 $Producto = $_POST['Producto'][$val];
 

Кажется, вы храните какой-то идентификатор в этих флажках … в противном случае у вас может быть сценарий, подобный:

 1  [x]
2  [ ]
3  [ ]
4  [x]
 

Итак, я полагаю, что у этого $_POST['Pago'] будет только 2 поля 1 и 4… но их ключ будет равен 1 и 2, поскольку неактивные флажки не будут иметь значения и не попадут в массив. Хотя я могу ошибаться… к стыду признаться, я не помню, как это работает точно.o

Комментарии:

1. Вы правы, но я не понимаю, почему, когда я ставлю $val, это не работает: ( об инъекциях, как я могу что-то улучшить или сделать? и я не знаю, что делать с моим беспорядком кода. Я попытаюсь поместить некоторое значение в непроверенные значения, чтобы посмотреть, какой результат появится сейчас. Любая идея о том, что я должен делать, приветствуется.

2. Привет, извините за отсутствие ответа ранее. Что касается проверки данных, это сложнее, но проще всего было бы убедиться, что вы используете функцию mysql_real_escape_string() для каждого поля, которое поступает из формы. Это, по крайней мере, устранит угрозу SQL-инъекции. Проверьте эту функцию на php.net/manual/en/function.mysql-real-escape-string.php

Ответ №2:

Проблема решена, спасибо за вашу помощь !!!!!, это работа со следующими изменениями:

 if(!empty($_POST['Pago'])) {
    $aLista = array_keys($_POST['Pago']);
    $Valor = $_POST['Valor'];
    $Pago = $_POST['Pago'];
    $Producto = $_POST['Producto'];
    $FormaPago = $_POST['FormaPago'];
    $FechaConsignacion = $_POST['FechaConsignacion'];
    $Detalle = $_POST['Detalle'];
    $FechaRegistrar = $_POST['FechaRegistrar'];
foreach($aLista as $key => $val) {
      print "$aLista[$key] => $val";
      echo "amp;nbsp;amp;nbsp;------amp;nbsp;amp;nbsp;";
      print "$Valor[$val]";
      echo "amp;nbsp;amp;nbsp;------amp;nbsp;amp;nbsp;";
      print "$Producto[$val]";
      echo "amp;nbsp;amp;nbsp;------amp;nbsp;amp;nbsp;";
      print "$FormaPago[$val]";
      echo "amp;nbsp;amp;nbsp;------amp;nbsp;amp;nbsp;";
      print "$FechaConsignacion[$val]";
      echo "amp;nbsp;amp;nbsp;------amp;nbsp;amp;nbsp;";
      print "$Detalle[$val]";
      echo "amp;nbsp;amp;nbsp;------amp;nbsp;amp;nbsp;";
      print "$FechaRegistrar[$val]";
      echo "<br><hr>";
}
unset($val);
 

}

Думаю, теперь я могу вставлять эти строки без проблем,

Комментарии:

1. Привет, извините за отсутствие ответа ранее. Что касается проверки данных, это сложнее, но проще всего было бы убедиться, что вы используете функцию mysql_real_escape_string() для каждого поля, которое поступает из формы. Это, по крайней мере, устранит угрозу SQL-инъекции. Проверьте эту функцию на php.net/manual/en/function.mysql-real-escape-string.php

2. Хорошо, спасибо. Я прочитаю это и сейчас применю на практике: D