Necesito ayuda con php

vilchez

Lo dicho, estoy haciendo un proyecto de fin de módulo y necesito alguien que me ayude con una cosilla, el caso es que quiero que desde una base de datos que tengo mysql me coja las filas que recoja y escribirlas en un archivo, sé que me explico fatal, pero os dejo el codigo para que veais a lo que me refiero, resulta que con esto lo que hace es solo poner la primera línea en el documento y yo quiero que me ponga todas las líneas de la consulta.

Código: http://pastebin.com/yTvV8nrF

Turco

No estoy muy puesto en php. Aún así, quisiera comentarte 2 cosillas.

1º Si con esta consulta ("SELECT * FROM acl where nombre!=''") lo que quieres es traerte todos los registros donde nombre sea distinto de vacío, es decir, que tengan algo escrito, estaría más bonito si pusieras "SELECT * FROM acl where nombre LIKE NOT NULL;

2º te es más fácil entender esta condición así -> if (strpos($linea, $buscar) == true) que así? ->
iif (strpos($linea, $buscar) !== false)?

2 respuestas
vilchez

#2 Es la misma no? de todas formas ahí no esta el problema de lo que quiero hacer, pero lo pondré igualmente si queda mejor :)

Es que al extraer los valores, solo me coge uno y lo he hecho todo ya, incluso poniendo un while, diciendo que mientras que el fetch coja un valor...etc etc etc

1 respuesta
eXtreM3

#3 y si primero haces el foreach y acumulas en una variable todos los valores de la consulta, y después esa variable la metes al fwrite?

1 respuesta
vilchez

#4 como sería? :S

Sonos
$fila = mysql_fetch_row($resultado);

Con eso solo estás consultando la primera línea, has de recorrer todas las lineas del resultado mediante mysql_fetch_array o mysql_fetch_assoc. Luego puedes guardarlo en un array PHP y con eso trabajar en tu archivo con el foreach que tienes, ej:

while( $fila= mysql_fetch_assoc($resultado)){
    $el_array[] = $fila;
}
1 respuesta
vilchez

#6 con el array que te refieres a un nombre cualquiera o a resultado?

EDITO: he hecho esto y me sale ahora solo la ultima fila de la tabla.

while ($fila = mysql_fetch_array($resultado)) {
    $fila[] = $resultado;


$filename = '/etc/squid3/squid.conf';

$accion = "$fila[5]";

if ($accion === "Permitir") {
$httpaccess = "http_access allow $fila[0] $fila[1] $fila[2] $fila[3] $fila[4]\n";
}
else {
    $httpaccess = "http_access deny $fila[0] $fila[1] $fila[2] $fila[3] $fila[4]\n";
}
if (!copy('/etc/squid3/squid.conf', '/etc/squid3/squid.bk')) {
    echo "Error al copiar backup...\n";
    exit(1);    //finalizar el script
}
   
$lineas = file('/etc/squid3/squid.conf'); // array con las lineas del fichero $ftmp = fopen('/etc/squid3/squid.temp', 'w'); // se crea el fichero y si existe se machaca $buscar = '#HTTP_ACCESS'; // línea a buscar, detrás de la que se va a insertar la nueva línea $nueva = $httpaccess; // nueva línea a insertar. Se le concatena el fin de línea End Of Line // Recorre array de lineas foreach ($lineas as $linea) { fwrite($ftmp, $linea); // escribe la línea if (strpos($linea, $buscar) !== false) { // Si la línea contiene lo que se busca fwrite($ftmp, $nueva); // se añade la nueva línea } } }

Por lo que no tengo ni idea de donde posicionar el while, que creo que es lo que me pasa y por lo que no me sale bien...

1 respuesta
eXtreM3

#7 sólo te guarda la última porque tienes el fopen dentro del while, y se queda con la última (en realidad ha escrito todas).
Abres fopen
Recorres ese while y vas metiendo fwrite
Cierras fclose

1 respuesta
RaymaN

Por curiosidad, ¿qué módulo es y qué has aprendido?

1 respuesta
vilchez

#9 ASIR, Administración de sistemas informáticos en red

#8 pero entonces ya no podría hacer el foreach que tengo al final...que es el que escribe las lineas del documento que quiero que coja de referencia para después colocar las líneas.

1 respuesta
Merkury

#2 :psyduck: :psyduck: WHERE LIKE NOT NULL??? En fin...

Para sacar lo que no es null, hay que hacer WHERE field NOT NULL

#10 Yo asi como consejo, utiliza PDO para las consultas y te ahorraras hacer el while, porque con PDO puedes sacar un array asociativo con el que iterar en el for y escribir a la vez.

El codigo que has pegado, lo siento, pero es bastante chapucero y encima te va a dar problemas. Aqui tienes un manual bastante completo, aunque para hacer queries con PDO es bastante sencillo, solo tienes que cambiar la conexion a la DB y utilizar el prepare y el fetchAll, fetch, etc.

https://phpdelusions.net/pdo

Invierte un poco de tiempo y hazlo como dios manda.

Gantorys

No entiendo cómo en los ciclos no empiezan a enseñar PDO en vez de mysql_query...

Usuarios habituales

  • Gantorys
  • Merkury
  • vilchez
  • RaymaN
  • eXtreM3
  • Sonos
  • Turco