Autor Zpráva
luma64
Profil
Vyvyjam na mojom lokal.pc aplikaciu, u mna Apache/2.2.17 (Win32) mod_ssl/2.2.17 ;ked sa ma vykonat prikaz if (array_key_exists...vykona sa a aplikacia zobrazi pozadovane udaje. Na webserveri Apache/2.2.12 (Linux/SUSE) sa tento kod nevykona. v com je prosim problem? Mozte mi poradit? Dakujem.Kod:
.
.

$rs = sqlQuery($sql);

for ($col=1; $col <= 16; $col++) {
    
    
    $pos = $row . '_' . $col; //hodnoty tbl_row a tbl_col dostanem zo selektu

// potialto je to urcite v poriadku

    // Za tento if mi na webserveri kod neprelezie
    if (array_key_exists($pos, $rs)) {
        
          .
          .
          
    
Tori
Profil
//hodnoty tbl_row a tbl_col dostanem zo selektu
Nespoléháte na zapnutou direktivu register_globals? (tj. že místo $_POST['neco'] používáte rovnou $neco, viz Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals))
luma64
Profil
Tori:
No ale selekt nema nic spolocne s formularom.Tomuto nerozumie. Je to - ako pisete - nastavenim servera ?
Tori
Profil
luma64:
Jo SELECT z databáze, myslela jsem formulářový <select>. Potom nevím... vypsal jste si (hostingu) proměnné $rs, $pos, $row, $col, jestli tam jsou data, která očekáváte?
luma64
Profil
[b]Tori[/b
Vypisane hodnoty:
pos: 1_3
pole: Array
Tori
Profil
pole si vypište např. pomocí var_dump. Je nějaký rozdíl v tom, jaký výsledek dostanete na localhostu a na hostingu? Pokud ano, ukažte funkci sqlQuery. (I když teď mě z hlavy nenapadá žádná funkce pro práci s DB nebo s poli, která by se lišila na win/linuxu. Ale stát by se to mohlo.)
luma64
Profil
Vyzera to, ako by $rs nebolo naplnene. Vytvaram ho spustenim
$sql = "select concat(t.tbl_row,'_',t.tbl_col) as pos, t.tbl_id, t.sub_id from redips_timetable t where left(t.StartTime,10)  like '%$datumvykonu%'";
$rs = sqlQuery($sql);


function sqlQuery($sql) {
    global $db_conn;
        global $rs;
.
.
Selekt nad db zaznamy vrati.
aDAm
Profil
fuj global to nejde předat te funkci vše co je potřeba?
luma64
Profil
Funkciu som niekde opisal, poviem pravdu, nemam skusenost s poliami.
function sqlQuery($sql) {
    global $db_conn;
    global $rs;
    // execute query    
    $db_result = mysql_query($sql, $db_conn);
    // if db_result is null then trigger error
    if ($db_result === null) {
        trigger_error(mysql_errno() . ": " . mysql_error() . "\n");
        exit();
    }
    // prepare result array
    $resultSet = Array();
    // if resulted array isn't true and that is in case of select statement then open loop
    // (insert / delete / update statement will return true on success) 
    if ($db_result !== true) {
        // loop through fetched rows and prepare result set
        while ($row = mysql_fetch_array($db_result, MYSQL_NUM)) {
            // first column of the fetched row $row[0] is used for array key
            // it could be more elements in one table cell
            $resultSet[$row[0]][] = $row;
        }
    }
    // return result set
    return $resultSet;
}
Tori
Profil
Jestli toto je kompletní kód funkce, tak
1) řádek č.3 je zbytečný, s proměnnou se nikde dál nepracuje, vyhodila bych. Proměnnou $db_conn bych radši funkci předávala jako nepovinný parametr. Pokud ho neuvedete, tak se automaticky použije naposledy použité DB spojení. (= využijete to jen v případě, že budete v jednom skriptu používat několik různých připojení k DB).
2) podmínka na ř.7 by měla správně být: if ($db_result === false) { - mysql_query nevrací nikdy NULL (resp. v dokumentaci není nic takového popsané).
3) podmínka na ř.15 by měla vypadat spíš takto: if (!is_bool($db_result)) {, protože chceme odfiltrovat jak dotazy, které nevracejí žádná data (DELETE apod., vrací true), tak ty, které selhaly (vrací false).

Vyzera to, ako by $rs nebolo naplnene.
Takže nastala některá ze dvou možností: buď dotaz selhal a kvůli špatně napsané podmínce na ř.7 jste chybu nezachytil (ale v tom případě by se mělo zobrazit varování na ř.17), anebo dotaz je správně a jen nevrací žádné výsledky.
luma64
Profil
Tori:
No problem bol v tom, ze mi nevypisovalo hodnoty z dovodu, ze som mal rozdielne php verzie a precoval som s konverziou datumu. V tom kode to nie je viditelne.
Dakujem za pomoc.

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: