Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem: PHP class ne insertuje podatke u bazu

[es] :: PHP :: problem: PHP class ne insertuje podatke u bazu

[ Pregleda: 1415 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nadinne
Beograd

Član broj: 262233
Poruke: 3
95.180.57.*



Profil

icon problem: PHP class ne insertuje podatke u bazu28.10.2010. u 15:02 - pre 164 meseci
Zamolila bih Vas za pomoc, koristila sam simple html php dom parser za preuzimanje podataka sa jednog sajta, napravila sam klasu koja bi trebalo da parserovanim podacima popuni bazu,

problem je sto se podaci ne insertuju u bazu

Jel ima neko ideju kako da resim problem?

evo koda:
Code:


<?php
$server="localhost";
$user="root";
$pass="";
$db="baza_bioskopa";

include_once('simple_html_dom.php');
require_once('config.php');
include_once('database.php.inc');

if(isset($database)) { echo "true"; } else { echo "false"; }
echo "<br />";
echo $database->mysql_prep("it's working? <br/>");

$conn=new MySQLDatabase($server,$user,$pass,$db);
$conn->open_connection();

function nadjiPozicijuStringa($search, $string, $offset)
{
    
    $arr = explode($search, $string);
    switch( $offset )
    {
        case $offset == 0:
        return false;
        break;
    
        case $offset > max(array_keys($arr)):
        return false;
        break;

        default:
        return strlen(implode($search, array_slice($arr, 0, $offset)));
    }
}

$html = file_get_html('http://www.filmoskop.com/bioskopi');
foreach($html->find('div.list-compact') as $e)
{
    $bioskop = $e->find('a');
    $podaci = $e->find('span');
    $filmovi = $e->find('li');
        echo "BIOSKOP: " . $bioskop[0]->attr["name"];
        //echo "<br>PODACI: " . $podaci[1]->innertext;
        echo "<br>FILMOVI: <br>";
        
             
        
                foreach($filmovi as $film)
                   
                   
                     {
                     $pozicija_drugog_vece = nadjiPozicijuStringa(">", $film, 2);
                     $pozicija_treceg_manje = nadjiPozicijuStringa("<", $film, 3);
                     $imefilma = substr($film , $pozicija_drugog_vece+1, $pozicija_treceg_manje-$pozicija_drugog_vece-1);
                     
                     echo $imefilma . "<br>";
                     echo $film->plaintext. '<br>';
                     
                      
             //ekstrakcija vremena
             
             $pozicija_treceg_vece = nadjiPozicijuStringa(">", $film, 3);
             $pozicija_cetvrtog_manje = nadjiPozicijuStringa("<", $film, 4);
             $svavremena = substr($film , $pozicija_treceg_vece+1, $pozicija_cetvrtog_manje-$pozicija_treceg_vece-1);
             $svavremena = substr($svavremena, 3);
             $vremenaniz = explode(", ", $svavremena);
             foreach($vremenaniz as $vreme) {
                echo "POCETAK PROJEKCIJE:" . $vreme. '<br>';
                
                }

                    
}
}
$sql  = "INSERT INTO bioskopi (ID_bioskopa, naziv_bioskopa, podaci) VALUES (1,$bioskop,'$podaci')";
$sql  = "INSERT INTO repertoar (ID_filma, ID_bioskopa, vreme_projekcije) VALUES (1,1,'$vreme') ";
//$sql  = "INSERT INTO filmovi (ID_filma, naziv_filma, opis_filma) VALUES ('$imefilma') ";

$result = $database->query($sql);

$conn->close_connection(); 
                        
?>    





i jos
Code:

<?php

require_once('config.php');
  class MySQLDatabase{
     /* var $server="localhost";
      var $user="root";
      var $pass="";
      var $database="baza_bioskopa";
      var $conn=0;
      var $upit=0;*/
      
private $connection;
    
  function __construct() {
    $this->open_connection();
    }
    
    public function open_connection() {
        $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
        if (!$this->connection) {
            die("Database connection failed: " . mysql_error());
        } else {
            $db_select = mysql_select_db(DB_NAME, $this->connection);
            if (!$db_select) {
                die("Database selection failed: " . mysql_error());
            }
        }
    }
    public function close_connection() {
        if(isset($this->connection)) {
            mysql_close($this->connection);
            unset($this->connection);
        }
    }

    public function query($sql) {
        $result = mysql_query($sql, $this->connection);
        $this->confirm_query($result);
        return $result;
        }
        
        private function confirm_query($result) {
        if (!$result) {
            die("Database query failed: " . mysql_error());
        }
    }
        public function mysql_prep( $value ) {
        $magic_quotes_active = get_magic_quotes_gpc();
        $new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0
        if( $new_enough_php ) { // PHP v4.3.0 or higher
            // undo any magic quote effects so mysql_real_escape_string can do the work
            if( $magic_quotes_active ) { $value = stripslashes( $value ); }
            $value = mysql_real_escape_string( $value );
        } else { // before PHP v4.3.0
            // if magic quotes aren't already on then add slashes manually
            if( !$magic_quotes_active ) { $value = addslashes( $value ); }
            // if magic quotes are active, then the slashes already exist
        }
        return $value;
    }
}
$database = new MySQLDatabase();
$db =& $database;

?>






na ovom linku je taj prakticni parser:
dom parser

Hvala puno na svakoj sugestiji,

PHP Juniorka

 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-3.sezampro.rs.



+33 Profil

icon Re: problem: PHP class ne insertuje podatke u bazu28.10.2010. u 16:36 - pre 164 meseci
Teško da će sad neko od ljudi koji posećuju ovaj forum sesti, pa proučavati taj tvoj kôd, i onda ga umesto tebe debug-ovati, al' ajde...

Nisi rekla da dobijaš ikakvu grešku pri upisu u bazu, tako da je verovatno ta MySQLDatabase klasa u redu. Problem je izgleda u logici izvlačenja podataka pomoću tog dom parser-a, tačnije, pri pokušaju "čupanja" određenih elemenata iz tog DOM dokumenta kojeg dobijaš. Vidim da tu ispisuješ te neke željene sadržaje, $bioskop[0]->attr["name"], $imefilma, $film->plaintext, $vreme, itd. Da li pri tom ispisu dobijaš željene rezultate?

Takođe, vidim da u tim INSERT upitima pokušavaš da bind-uješ promenljive $bioskop i $podaci. Problem je što su te promenljie rezultat poziva tog nekog find() metoda, kojeg omogućava dom parser, a taj metod vraća niz DOMNode objekata (pretpostavljam), što svakako nije nešto što tek tako možeš da upišeš u bazu.
 
Odgovor na temu

developer10
profesor engleskog jezika, freelance web
developer

Član broj: 270189
Poruke: 27
*.ze2.dlp16.bih.net.ba.

Sajt: www.poslovni-adresar.ba


+1 Profil

icon Re: problem: PHP class ne insertuje podatke u bazu28.10.2010. u 16:54 - pre 164 meseci
Gornji post dobro kaze, tesko se uziviti u tudji kod i natjerati se da bas "zaronis" i nadjes gresku.
Ja bih uradio ovim redom:
Prvo vidi mozes li echo-vati sljedece varijable: $podaci, $vreme, $imefilma kako bi znala da li ih dobijas onako kako ocekujes.
Ako dobijas, onda je problem u samom query-ju. Pokusaj ukloniti single quotes oko tih varijabli pa pokusaj onda. AKo ni to ne pali,
onda razdvoji te varijable sasvim od ostatka:

Code:

$sql  = "INSERT INTO bioskopi (ID_bioskopa, naziv_bioskopa, podaci) VALUES (1, $bioskop, " . $podaci . ") ";
$sql  = "INSERT INTO repertoar (ID_filma, ID_bioskopa, vreme_projekcije) VALUES (1,1, " . $vreme . ") ";
//$sql  = "INSERT INTO filmovi (ID_filma, naziv_filma, opis_filma) VALUES (" . $imefilma . ") ";


Gornja verzija query-ja je bez single quotes oko pomenutih varijabli. ako ne bude radilo, ubaci jos single quotes pa mozda proradi.
 
Odgovor na temu

nadinne
Beograd

Član broj: 262233
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Re: problem: PHP class ne insertuje podatke u bazu28.10.2010. u 21:17 - pre 164 meseci
Hvala vam!

Da sve mogu da echo-ujem, snaćiću se, verovatno je query negde neispravan..

 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: problem: PHP class ne insertuje podatke u bazu29.10.2010. u 10:26 - pre 164 meseci
Sad tek vidim da, pored te sintakse greške u upitu, koju je naveo developer10, imaš i problem u logici...

Pri popunjavanju MySQL tabela koje imaju autoincrement kolonu, nikako ne treba ručno da unosiš vrednost te kolone, što ti upravo radiš u tom tvom kôdu. Makni "ID_bioskopa" iz tih zagrada u INSERT upitu, kao i tu vrednost "1". Isto važi i za tabelu "filmovi".

Dalje, tabela "repertoar", koliko vidim, predstavlja vezu između nekog filma i bioskopa, al' problem je što ti pri popunjavanju uvek unosiš samo jednu jedinu hardcode-ovanu vezu. Redosled unošenja podataka bi trebao da izlgeda npr. ovako:
1. najpre uneseš bioskop i u neku privremnu promenjlivu smestiš id bioskopa koji je unet. Pošto API tog tvog custom db adaptera (klasa MySQLDatabase) ne nudi takvu funkcionalnost, id poslednje unetog bioskopa ćeš dobiti pomoću funkcije mysql_insert_id
2. zatim uneseš film, i onda id filma koji je upravo unet, a kojeg dobijaš na način opisan u prethodnom koraku, smestiš u još jednu privremenu promenljivu (npr. $filmId)
3. na kraju ide unos u tu veznu tabelu "repertoar", tako što ćeš pri unosu iskoristiti te id-eve bioskopa i filma koje si dobila u prethodnim koracima.

Naravno, sve ovo se dešava u toj petlji, u kojoj i parsiraš sadržaj tog sajta sa kojeg uzimaš podatke, pošto si rešila da na taj način organizuješ kôd. A i najverovatnije unutar one petlje u kojoj "vrtiš" $vremenaniz, pošto tek tu dobijaš taj poslednji podatak od interesa - vreme projekcije.
 
Odgovor na temu

[es] :: PHP :: problem: PHP class ne insertuje podatke u bazu

[ Pregleda: 1415 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.