Foros del Web » Programando para Internet » PHP »

no se como hacer esto:

Estas en el tema de no se como hacer esto: en el foro de PHP en Foros del Web. Saludos a todos, Quisiera hacer lo siguiente: formar un formulario con datos de una b.d.: input type=text name=referencia value=row[referencia] input type=text name=nombre value=row[nombre] input type=text ...
  #1 (permalink)  
Antiguo 23/05/2005, 06:25
Avatar de ibme74  
Fecha de Ingreso: marzo-2004
Mensajes: 81
Antigüedad: 20 años, 1 mes
Puntos: 0
no se como hacer esto:

Saludos a todos,

Quisiera hacer lo siguiente:

formar un formulario con datos de una b.d.:
input type=text name=referencia value=row[referencia]
input type=text name=nombre value=row[nombre]
input type=text name=cantidad value=0
una vez formado el formulario con todas las referencias el usuario deberia
introducir las cantidades y enviar el formulario,
luego el php deberia discriminar las cantidades que esten a cero e insertar en la bd la referencia y la cantidad de las que tengan cantidad. pero no lo consigo, he intentado con foreach y no se como hacerlo.

¿Me pueden orientar?
gracias
  #2 (permalink)  
Antiguo 23/05/2005, 07:00
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Concretamente qué no sabes hacer, qué tienes hecho y por qué no sirve?

.. lo primero parece que tienes la idea... ... pero con errores de comillas:
Código PHP:
echo "<input type=\"text\" name=\"referencia\" value=\"".row['referencia']"\">"
Para recojer cantidades sabrás como se hace.... ... no estoy 100% seguro pero leí por ahí que si ingresar un valor de 0 en un campo empty() lo reconoce como vacio... tons, por ahí está la cosa: www.php.net/empty

Por el foreach... quizá te refieras a algo como:
Código PHP:
 <form method="post" action="<?=$_SERVER['PHP_SELF'?>"> 
    <p>
      <input type="text" name="campo1">
      <input type="text" name="campo2">
      <input type="text" name="campo3">
      <input type="text" name="campo4">
      <input type="submit" name="Submit" value="Enviar">
    </p>
</form> 
  <br>
  <?php
if(isset($_POST['Submit'])) {
foreach(
$_POST as $indice => $valor) {
    if(!empty(
$valor) && $indice!='Submit') {
        
$campos[]= $indice;
        
$values[]= "'$valor'";
    }
}
$camposimplode(", "$campos);
$valuesimplode(", "$values);
echo 
"INSERT INTO ($campos) VALUES ($values)";
}
?>
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 23/05/2005 a las 07:07
  #3 (permalink)  
Antiguo 23/05/2005, 07:31
Avatar de ibme74  
Fecha de Ingreso: marzo-2004
Mensajes: 81
Antigüedad: 20 años, 1 mes
Puntos: 0
Gracias por contestar jam1138,

El problema del foreach, (este seria el codigo que me diste)

<? require("../php/conexion2.php");
$query = "SELECT * FROM referen ORDER BY nombre";
$result=mysql_db_query($dbdat,$query,$link);
while ($row = mysql_fetch_array($result)){
print("
<form method='post' action=''>
<p>
<input type='text' name='referen' value=\"".$row[codigo]."\" />
<input type='text' name='nombre' value='$row[nombre]' />
<input type='text' name='cantidad' value='0'/>
");}
print("
<input type='submit' name='Submit' value='Enviar'>
</p>
</form>
<br>");
if(isset($_POST['Submit'])) {
foreach($_POST as $indice => $valor) {
if(!empty($valor) && $indice!='Submit') {
$campos[]= $indice;
$values[]= "'$valor'";
}
}
$campos= implode(", ", $campos);
$values= implode(",", $values);
echo "INSERT INTO ($campos) VALUES ($values)";
}
?>

es que solo me coje los valores del ultimo registro de la tabla,
por ejemplo me devuelve este resultado:
INSERT INTO (referen, nombre, cantidad) VALUES ('0000000011','nombre','8')
y lo quiero que haga es que recorra todos los registros uno por uno insertandolos en la tabla si cantidad no es cero o esta vacio.

saludos,
  #4 (permalink)  
Antiguo 23/05/2005, 23:59
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
- Por favor ilumina tu código
- Te mencioné sobre el cómo imprimir los elementos del formulario... haz uso correcto de las comillas
- Aparentemenete tu error está en que al imprimir el formulario dentro del ciclo, igual imprimies la etiqueta <form> (la cuál no tiene action), por lo que estarías creando n formularios y tu botón submit() solo responderá a uno... en este caso el último... ve tu código fuente.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 24/05/2005, 06:01
Avatar de ibme74  
Fecha de Ingreso: marzo-2004
Mensajes: 81
Antigüedad: 20 años, 1 mes
Puntos: 0
no se como hacer esto

Hola Jam,
Saque el form del bucle como me dijiste pero sigo sin obtener resultados, siempre muestra la ultima referencia de la tabla.Quizas no se pueda hacer con foreach y tenga mas que ver con los arrays bidemencionales (de los que no tengo ni idea).

lo de las comillas no lo entiendo ¿Que hago mal?

Código PHP:
<form method="post" action="<?=$_SERVER['PHP_SELF'?>"> 
     <?  require ("../php/conexion2.php");
                   
$query "SELECT * FROM referen ORDER BY nombre";
                   
$result=mysql_db_query($dbdat,$query,$link);
                     while (
$row mysql_fetch_array($result)){ 
                             print(
"
                                     <p>
       <input type='text' name='referen' value=\""
.$row[codigo]."\" /> 
      <input type='text' name='nombre' value=\""
.$row[nombre]."\" /> 
      <input type='text' name='cantidad' value='0' /> 
             </p>
             <br />
            "
);
            }
            
mysql_close();
            
?> 
      <input type="submit" name="Submit" value="Enviar"> 
    
</form> 
  <br> 
  <?php 
if(isset($_POST['Submit'])) { 
foreach(
$_POST as $indice => $valor) { 
    if(!empty(
$valor) && $indice!='Submit') { 
        
$campos[]= $indice
        
$values[]= "'$valor'"
    } 

$camposimplode(", "$campos); 
$valuesimplode(", "$values); 
echo 
"INSERT INTO ($campos) VALUES ($values)"

?>
  #6 (permalink)  
Antiguo 24/05/2005, 20:44
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
... lo de las comillas.. no es que esta mal... pero no esta bien... lo dije desde mi primer respuesta y mostré la forma correcta de hacerlo...

Ahora bien... ya veo el error ... gracias por colorear el código... .

La cuestión es que tú estás imprimiendo los textboxes por un ciclo, pero mandas a imprimir exáctamente el mismo nombre para todos los "n" registros que salen de tu consulta, entonces al recojer ¿cómo vaz a diferenciar esos campos si como los imprimies "son todos el mismo"???... simplemente no lo "piensa" y toma a el último....

Solución? 2 posibles:
1) y más sencilla... manejar names diferentes pero relacionados...
2) quizá más recomendable... usar names como arreglos.. al recojer tendrías una matriz bidimencional ... no debería ser complicado pero por ahora no puedo ayudarte.

El problema es ese... piensa en una solución a como te comodes... trata de entender las matrizces multidimencionales, es algo interezante y si sabes como usarlo te será de mucha utilidad: www.php.net/array

Intentalo y haznos saber qué intentaste y de no lograrlo menciona los errores... espero otro día con tiempo pueda ayudarte mejor.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:25.