PHP export products from database into csv

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

adrianmihai
Junior Member
Mesaje: 41
Membru din: Mie Mar 27, 2013 9:53 am

PHP export products from database into csv

Mesajde adrianmihai » Joi Mar 23, 2017 7:43 pm

Salut baieti,

Vreau sa export niste produse din baza de date intr-un fisier csv, si nu reusesc sa fac functia de extragere a produselor din db sa mearga. Ma puteti ajuta va rog? Mersi mult. am pus codul mai jos

Cod: Selectaţi tot

<?php
include("config/db-connect.php");
function toate_produsele_active( ) {

$array_produse = mysqli_query($mysqli, "SELECT product_id, product_name, category_url, product_short_desc, product_price, cantitate, product_photo FROM mb95_products");

return array($array_produse);
}

$f = fopen('php://output', 'wb');
if($f) {
    foreach(toate_produsele_active() as $produs) {
        $coloane = array(
            $produs['product_id'],
            $produs['product_name'],
            $produs['category_url'],
            $produs['product_short_desc'],
//            $produs['ron'],
            $produs['product_price'],
            $produs['cantitate'],
            implode('[,]', str_replace('[,]', '[%2C]', $produs['product_photo'])),
        );
        fputcsv($f, $coloane, ';', '"');
    }
    fclose($f);
}
?>



adrianmihai
Junior Member
Mesaje: 41
Membru din: Mie Mar 27, 2013 9:53 am

Re: PHP export products from database into csv

Mesajde adrianmihai » Lun Apr 03, 2017 10:41 am

Asta e ceea ce am reusit sa fac dar din pacate nu returneaza nimic.
Script-ul trebuie sa returneze produsele din baza de date cu punct si virgula intre ele.
EX: 1;Produs Test; 240; RON; imagine.jpg


Cod: Selectaţi tot

function toate_produsele_active()
{   
    $push = array();
    $result = mysqli_query($mysqli, "SELECT product_id, product_name, category_url, product_short_desc, product_price, product_photo FROM mb95_products");
    while($row = mysqli_fetch_array($result, MYSQLI_NUM))
    {
        $row = array_map('stripslashes', $row);
        $push[] = $row;
    }
    return $push;
}

$f = fopen('php://output', 'wb');
if($f) {
    foreach(toate_produsele_active() as $produs) {
        $coloane = array(
            $produs['product_id'],
            $produs['product_name'],
            $produs['category_url'],
            $produs['product_short_desc'],
            $produs['product_price'],
            implode('[,]', str_replace('[,]', '[%2C]', $produs['product_photo'])),
        );
        fputcsv($f, $coloane, ';', '"');
    }
    fclose($f);
}

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: PHP export products from database into csv

Mesajde nevvermind » Lun Apr 03, 2017 1:32 pm

Merge: https://3v4l.org/VZMl0

Dar am schimbat valorile din DB cu niste date dummy. Ce-ti da var_dump(toate_produsele_active())?
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

adrianmihai
Junior Member
Mesaje: 41
Membru din: Mie Mar 27, 2013 9:53 am

Re: PHP export products from database into csv

Mesajde adrianmihai » Lun Apr 03, 2017 6:42 pm

Cod: Selectaţi tot

<?php

function toate_produsele_active()
{   
$session_start;
$db_username = 'rpre0623_mb95';
$db_password = '*************';
$db_name = 'rpre0623_mb95';
$db_host = 'localhost';
$mysqli = mysqli_connect($db_host, $db_username, $db_password, $db_name);

    $push = array();
    $result = mysqli_query($mysqli, "SELECT product_id, product_name, category_url, product_short_desc, product_price, product_photo FROM mb95_products");
    var_dump($result);

    while($row = mysqli_fetch_array($result, MYSQLI_NUM))
    {
        $push[] = $row;
    }
    return $push;
}

$f = fopen('php://output', 'wb');
if($f) {
    foreach(toate_produsele_active() as $produs) {
        $coloane = array(
            $produs['product_id'],
            $produs['product_name'],
            $produs['category_url'],
            $produs['product_short_desc'],
            $produs['product_price'],
            $produs['product_photo'],
        );
        fputcsv($f, $coloane, ';', '"');
    }
    fclose($f);
}
?>


Asta e ceea ce am mai lucrat la el pana acum. Nu am erori insa nu imi vin datele din baza de date adica imi returneaza null. Am atasat o poza sa vezi ce-mi returneaza atat script-ul cat si vardump-ul.

Imagine

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: PHP export products from database into csv

Mesajde nevvermind » Lun Apr 03, 2017 9:39 pm

Curios.

S-ar putea sa ai erori si sa nu le vezi (fiindca sunt in loguri). Pune liniile astea la inceputul scriptului, sub "<?php":

Cod: Selectaţi tot

error_reporting(E_ALL);
ini_set('display_errors', 1);

Apoi ruleaza-ti scriptul din nou.

Tu ai dat var_dump interogarii; dar nu asta am vrut.
Ce iti da

Cod: Selectaţi tot

$x = toate_produsele_active(); var_dump($x[0], phpversion());
?

Vreau sa vad daca DB iti trimite corect datele. Tu creezi bine CSV-ul, dar ma intreb daca array-ul venit din DB este corect. Pare sa fie gol.

PS: $session_start; nu face nimic acolo. Sterge variabila.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

adrianmihai
Junior Member
Mesaje: 41
Membru din: Mie Mar 27, 2013 9:53 am

Re: PHP export products from database into csv

Mesajde adrianmihai » Lun Apr 03, 2017 10:20 pm

Cu ce am aduagat de la tine am urmatorul output. Cred ca din baza produsele vin. Problema e undeva la array-ul asta. :(

Imagine

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: PHP export products from database into csv

Mesajde nevvermind » Mar Apr 04, 2017 1:54 am

A, ok, problema s-ar putea sa vina de la faptul ca PHP iti creeaza un array cu indecsi numerici (fiindca asa ii spui tu, cu MYSQLI_NUM) , iar apoi incerci sa citesti din acel array cu indecsi string.

Cum chemi tu:

Cod: Selectaţi tot

mysqli_fetch_array($result, MYSQLI_NUM)

Cum ar trebui:

Cod: Selectaţi tot

mysqli_fetch_assoc($result);

// sau...

mysqli_fetch_array($result, MYSQLI_ASSOC);

PHP iti da un array populat asa:

Cod: Selectaţi tot

$produs = array(
  0 => 123,
  1 => "numer produs",
  // etc.
);

Apoi tu incerci sa iei prima valoare cu o cheie string: $produs['product_id'], dar acea cheie nu exista, de aici si erorile de "Undefined index".
Citeste sectiunea "Parameters" din http://php.net/manual/en/mysqli-result.fetch-array.php
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: PHP export products from database into csv

Mesajde nevvermind » Mar Apr 04, 2017 1:58 am

Vezi ca nu-i prea performant sa stochezi tot result-set-ul din DB in variabila $push, doar pt a returna-o. Daca ai 10k de randuri, variabila aia o sa devina destul de mare.

Incearca sa adaugi in CSV direct in acel while-loop.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

StefaniaLaura
PHPRomania Supporter
Mesaje: 5
Membru din: Lun Apr 10, 2017 12:25 pm

Re: PHP export products from database into csv

Mesajde StefaniaLaura » Lun Apr 10, 2017 12:37 pm

Puteti cumpara licente windows 10 pro si enterprise foarte ieftin pe https://geekhost.ro !!!
In plus avem servicii de gazduire la un pret foarte accesibil.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 72 vizitatori