Autor Zpráva
maxmin
Profil *
Mám menší problém s jedním kódem. Autor píše, že nepodporuje starší verze MySQL než 5,

Vypíše mi to:
Fatal error: Call to a member function on a non-object
a kde se chyba nachází. Bohužel na řádku tom řádku, co mi to vypsalo pravděpodobně žádná chyba není. Výše se includují nějaké soubory a řádky z nich se asi taky započítají.

Kdybyste si všimli nějaké špatné syntaxe, nebo něčeho, co je rozdílné pro MySQL 4 a 5, moc byste mi pomohli

<?php

require('includes/application_top.php');
if (!defined('IS_ADMIN_FLAG')) {
die('Illegal Access');
}
$ID = $_GET['ID'];

if($_GET['ID']){

#reset($options_values);
#var_dump($options_values);

$Collection = array();
$Collection2 = array();
$Collection['ID'] = $ID;

$Collection['Attributes'] = array();


if($_POST['setAttributes'] == "go"){

$query_set_product_to_use_this_values = "UPDATE products
SET products_priced_by_attribute = '2'
WHERE products_id = $ID";
$db->Execute($query_set_product_to_use_this_values);


$post_vars = $_POST;
#var_dump($post_vars);
reset ($post_vars);
$i_attr_array = 0;
foreach($post_vars As $key => $value){
if(substr($key, 0 ,6) == "Price_"){
#var_dump($value);
$Collection2['Attributes'][$i_attr_array]['products_price'] = $value;
#echo "--->>>Collection2['Attributes'][$i_attr_array]['products_price'] = $value<br>";
$i_attr_array++;
}
}
$i_attr_array = 0;
foreach($post_vars As $key => $value){
if(substr($key, 0 ,7) == "Weight_"){
#var_dump($value);
$Collection3['Attributes'][$i_attr_array]['products_weight'] = $value;
#echo "--->>>Collection2['Attributes'][$i_attr_array]['products_price'] = $value<br>";
$i_attr_array++;
}
}
reset ($post_vars);
$i_attr_array = 0;
foreach($post_vars As $key => $value){
if(substr($key, 0 ,5) == "Attr_"){
$Attr_key = substr($key,5);
$new_attributes_combi = $Attr_key;
if(strstr($Attr_key, "_") == true){
$attributes_combi = explode("_",$Attr_key);
sort($attributes_combi,SORT_NUMERIC);
$new_attributes_combi = implode("_", $attributes_combi);
}
#var_dump($new_attributes_combi);
$Collection['Attributes'][$i_attr_array]['combi_id'] = $ID."+".$new_attributes_combi;
$Collection['Attributes'][$i_attr_array]['model_number'] = $value;
#echo "Collection['Attributes'][$i_attr_array]['model_number'] = $value";
$Collection['Attributes'][$i_attr_array]['products_price'] = $Collection2['Attributes'][$i_attr_array]['products_price'];
$Collection['Attributes'][$i_attr_array]['products_weight'] = $Collection3['Attributes'][$i_attr_array]['products_weight'];
#echo "<--- Artikelnummer: ".$value." ---><br>
";
#echo substr($key,5)." => ".$value."<br>";
$arr_key = explode("_", substr($key,5));
if(is_array($arr_key)){
for($i=0;$i<count($arr_key);$i++){
#echo $arr_key[$i];
$fe_arr_key = explode("-",$arr_key[$i]);
#var_dump($fe_arr_key);
$j=0;
foreach($fe_arr_key as $table_key => $table_value){
$return[$j] = $table_value;
$j++;
}
#echo "table_key: ".$return[0]." -> table_value: ".$return[1]." <br>
";
$Collection['Attributes'][$i_attr_array]['Attributes_names'][$i] = $return[0];
$Collection['Attributes'][$i_attr_array]['Attributes_values'][$i ] = $return[1];
}
}
#echo "<br><br>
";
$i_attr_array++;
}
}

#var_dump($post_vars);


#echo "Collection: <br>";
#var_dump($Collection);
#echo "<br><br><br>";
#var_dump($Collection2);

#echo "--------------------------------------------------------------------- ----------------------
";

$query_check = "SELECT * FROM products_attributes_modelnumber";
$sql_check = $db->Execute($query_check);
#echo $sql_check->fields['products_attribute_3']."<br>
";


# var_dump($sql_check);
#var_dump( $sql_ckeck->fields["products_attribute_1"]);


} // End POST go

#var_dump( $sql_ckeck->fields["products_attribute_1"]);
$post_vars = $_POST;
reset ($post_vars);
$i_attr_array = 0;
foreach($post_vars As $key => $value){
if(substr($key, 0 ,5) == "Attr_"){
$Attr_key = substr($key,5);
$new_attributes_combi = $Attr_key;
if(strstr($Attr_key, "_") == true){
$attributes_combi = explode("_",$Attr_key);
sort($attributes_combi,SORT_NUMERIC);
$new_attributes_combi = implode("_", $attributes_combi);
}
#echo $new_attributes_combi;
$Collection['Attributes'][$i_attr_array]['combi_id'] = $ID."+".$new_attributes_combi;
#var_dump($Collection['Attributes'][$i_attr_array]['combi_id']);
$Collection['Attributes'][$i_attr_array]['model_number'] = $value;
#echo "Collection['Attributes'][$i_attr_array]['model_number'] = $value";
$Collection['Attributes'][$i_attr_array]['products_price'] = $Collection2['Attributes'][$i_attr_array]['products_price'];
$Collection['Attributes'][$i_attr_array]['products_weight'] = $Collection3['Attributes'][$i_attr_array]['products_weight'];
#echo "<--- Artikelnummer: ".$value." ---><br>
";
#echo substr($key,5)." => ".$value."<br>";
$arr_key = explode("_", substr($key,5));
if(is_array($arr_key)){
#(var_dump($arr_key));
sort($arr_key,SORT_NUMERIC);
#(var_dump($arr_key));
for($i=0;$i<count($arr_key);$i++){
#echo $arr_key[$i];
$fe_arr_key = explode("-",$arr_key[$i]);
#var_dump($fe_arr_key);
$j=0;
foreach($fe_arr_key as $table_key => $table_value){
$return[$j] = $table_value;
$j++;
}
#echo "table_key: ".$return[0]." -> table_value: ".$return[1]." <br>
";
$Collection['Attributes'][$i_attr_array]['Attributes_names'][$i] = $return[0];
$Collection['Attributes'][$i_attr_array]['Attributes_values'][$i ] = $return[1];
}
}
#echo "<br><br>
";
$i_attr_array++;
}
}

#var_dump($Collection);
foreach($Collection As $key => $value){
if($key == "Attributes"){
$p=0;
foreach($value As $key1 => $value1){
$array_model[$p] = $value1['model_number'];
$p++;
#var_dump($key1);
#var_dump($value1);
$sql_rows = "(combi_id, products_attributes_modelnumber_id, products_id, products_model, products_price, products_weight, ";
$sql_vals = " VALUES ('".$value1['combi_id']."', '', '".$Collection['ID']."', '".$value1['model_number']."', '".$value1['products_price']."', '".$value1['products_weight']."', ";
$l=0;
foreach($value1['Attributes_names'] AS $key2 => $val2){

$array_sql_rows[$l] = "products_attribute_".$val2;

$l++;
$sql_rows .= "products_attribute_$val2, ";
$check_var = "products_attribute_".$val2;
#echo $check_var."<br>
";
#var_dump( isset($sql_check->fields[$check_var]))."<br>
";
if(!isset($sql_check->fields[$check_var]) OR $sql_check->fields[$check_var] == NULL){
$query_alter = "ALTER TABLE products_attributes_modelnumber ADD $check_var int(11) DEFAULT 0";
$sql_alter = $db->Execute($query_alter);
$query_check = "SELECT * FROM products_attributes_modelnumber";
$sql_check = $db->Execute($query_check);
#var_dump($sql_check);
}
}

#echo $sql_rows;
#echo $sql_vals;
$sql_rows = substr($sql_rows,0,strlen($sql_rows)-2);
$sql_rows .= ")";
$m=0;
foreach($value1['Attributes_values'] AS $key3 => $val3){
$sql_vals .= "'$val3'
Alphard
Profil
Bohužel na řádku tom řádku, co mi to vypsalo pravděpodobně žádná chyba není.
jsi si jistý? mohl by jsi označit ten řádek, nevím kolik lidí se s nadšením vrhne do tvého kódu a bude ho konrolovat
maxmin
Profil *
Označilo mi to řádek 534, na něm je jen:

$options_values[0]->MoveNext();

Vrhat se do tak dlouhého kódu a analyzovat ho se asi nikomu nebude chtít. Spíše jsem si říkal, jestli někomu vyloženě nepadne něco do oka. Nějaká jiná syntaxe pro čtení z DB, nebo nějaká pitomost co se v MySQL 5 dělá jinak.
DoubleThink
Profil *
Fatal error: Call to a member function on a non-object
Tohle není MySQL chyba, ergo máš chybu asi jinde.
Aleš Janda
Profil
Označilo mi to řádek 534, na něm je jen:
$options_values[0]->MoveNext();


Nechce to spíš PHP 5? Tohle je myslím typická ukázka toho, co PHP4 neumí, ale PHP5 ano. Ale s MySQL to pak nemá nic společného. Kromě toho - tu hlášku vypisuje PHP, ne? Tak bude chyba v PHP :-)
nightfish
Profil
Tohle je myslím typická ukázka toho, co PHP4 neumí, ale PHP5 ano.
myslet znamená houby vědět - tenhle kód (adodb) v PHP 4.4.7 jede úplně bez problémů
maxmin
Profil *
Opravdu netuším v čem je chyba. Autor kódu uvádí, že to jede jen s MySQL 5.

Jedná se o úpravu eshopu zencart. Moc kódu php a sql nerozumím. Jel jsem přesnou instalaci podle návodu (přidat kód na řádek xxx, nahradit yyy). Tento soubor byl ale celý kompletní a nechce se mu fungovat.
nightfish
Profil
maxmin
bude to asi chtít více informací ohledně té chyby - tzn. již zmíněný řádek 534 + pár řádků před ním (určitě minimálně po první Execute() směrem nahoru)

a pokud je to $options_values[0]->MoveNext() v nějakém cyklu, tak i tělo toho cyklu

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0