Funkce array_search – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce array_search – PHP – Fórum – Programujte.comFunkce array_search – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Jelec0
Newbie
2. 2. 2014   #1
-
0
-

Mám funkci, kterou testuji, zda jsou v definovány všechny tabulky, ale je tu problém v tom, že funkce array_search nenajde vždy 1. hodnotu pole $tables, ať už je jeho hodnota jakákoliv, takže nakonec mi kontrolní součet nevyjde.

Děkuji všem za případné rady ;)

$tables[0] = "books";
$tables[1] = "characters";
$tables[2] = "comments";
$tables[3] = "events";
$tables[4] = "images";
$tables[5] = "ips";
$tables[6] = "locations";
$tables[7] = "messages";
$tables[8] = "news";
$tables[9] = "subsection";
$tables[10] = "users";
$checked_tables = 0;
$matching_tables = 0;
$sql = mysql_query('SHOW TABLES FROM ' . $database, $conn);
while (list($table) = mysql_fetch_row($sql)) {
//tady se vypíšou všechny tabulky v databázi
    if (array_search($table, $tables)) {
//tady to nevypíše vždy první hodnotu pole tables
        echo $table . "<br>";
        $matching_tables++;
    }
    $checked_tables ++;
}
echo $matching_tables;
echo sizeof($tables);
if ($matching_tables != sizeof($tables)) {
    die("Database error. Sorry");
}
Nahlásit jako SPAM
IP: 89.190.44.–
Kit+15
Guru
2. 2. 2014   #2
-
0
-

#1 Jelec
array_search() vrací integer nebo false. Místo

if (array_search($table, $tables)) {

 zkus

if (array_search($table, $tables) !== FALSE) {
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Jelec0
Newbie
2. 2. 2014   #3
-
0
-

Ok, jde to. Díky.

Nahlásit jako SPAM
IP: 89.190.44.–
Řešení
Kit+15
Guru
2. 2. 2014   #4
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#3 Jelec

Zkus ještě tohle: 

<?php
$matching_tables = 0;
$tables = array(
    'books', 'characters', 'comments', 'events', 'images', 'ips',
    'locations', 'messages', 'news', 'subsection', 'users'
);
$sql = "SHOW TABLES FROM $database WHERE Tables_in_test IN ('" .
    implode("', '", $tables) . "')";
$result = mysql_query($sql, $conn);
while (list($table) = mysql_fetch_row($result)) {
    echo $table . "<br>";
    $matching_tables++;
}
echo $matching_tables;
echo sizeof($tables);
if ($matching_tables != sizeof($tables)) {
    die("Database error. Sorry");
}

A nedávej výsledek dotazu do proměnné $sql, protože to není SQL, ale jeho výstup.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Jelec0
Newbie
2. 2. 2014   #5
-
0
-

Ok, změním svoje návyky s proměnýma u SQL dotazů.Dívám se, že jsem tam zapomněl jednu proměnou, která je k ničemu.

Akorát úplně nerozumím části "WHERE Tables_in_test" .

Nahlásit jako SPAM
IP: 89.190.44.–
Kit+15
Guru
2. 2. 2014   #6
-
0
-

#5 Jelec
Musel jsem nějak obejít, že starý ovladač MySQL neumí sám vložit apostrofy kolem argumentů.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý