Autor Zpráva
pds
Profil
Zdravím .

Na svojej stránke mám už dlhšiu dobu anketu, no prestal ami z ničoho nič fungovať a vypisuje to len nejaké chyby. Som v php lama , tak vás prosím o radu kde by mohla byť chyba. Môžem zaslať aj zdroják ak bude treba. Mám pocit že na hoste niečo prerábali a odvtedy to nefunguje...

Dotyčná stránka

Dík.

PS: Treba kliknúť a skúsiť hlasovať.
Casero
Profil
pds
myslíš ta čeština, jinak to funguje...aspon to tak vypadá...zkus mrknout na kodovani a nastavit všude stejný, i když nevím co mohl měnit host na tom
pds
Profil
nie tá čeština ale to keď klikneš na hlasovanie ...
Joker
Profil
Problém je nejspíš jen jedno varování, a to tohle:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/storage/users/p/d/s/pdsoftware/anketa/anketa_spracuj.php on line 10

To ostatní už je jenom důsledkem tohohle.
Na řádku 10 máte funkci mysql_fetch_array(), která pracuje s výsledkem nějakého dotazu. Zkuste se podívat, jak vypadá funkce mysql_query(), která vytvoří ten výsledek.

Anebo sem pošlete prvních 10 řádků toho skriptu ;)
Joker
Profil
Mimochodem, text pod anketou: Není Questbook (kniha výprav), ale Guestbook (kniha návštěv)
pds
Profil
<?php
function hlasuj($id, $answer)
{ //definovanie globalnych premennych
global $HTTP_COOKIE_VARS;
//kontrola ci uz nebolo hlasovane
if ($HTTP_COOKIE_VARS['anketa'.$id.'Voted'])
{ return; }
//DB select
$result = MySQL_Query("SELECT odpovede, separator, vysledky FROM ankety WHERE id = '$id'");
$row = MySQL_Fetch_Array($result);
//rozdelenie retazca odpovedi do pola
$options = explode($row['separator'],$row['odpovede']);
//zistime kolko je moznosti (odpovedi)
$options_count = count($options);
//ak hlasujem prvy krat (retazec vysledky je prazdy)
//tak naplnim retazec v tvare 0separator0 ...
if (empty($row['vysledky']))
{ for ($i=0; $i<$options_count; $i++)
{ $tmp .= '0'.$row['separator'];
}
//odstranime separator z konca retazca
$row['vysledky'] = substr ($tmp, 0 , strlen($tmp)-strlen($row['separator']));
}
//rozdelenie retazca vysledkov do pola
$votes = explode ($row['separator'],$row['vysledky']);
//pridanie hlasu
$votes[$answer]++;
//zlucenie hodnot pola spat do retazca
$vote_results = implode ($row['separator'], $votes);
//zapis vysledko do DB
$result = MySQL_Query("UPDATE ankety SET vysledky = '$vote_results' WHERE id = '$id'");
//zapis cookie v tvare napr. anketa1Voted = 1
//nastavenie expiracie na 7 dni
SetCookie('anketa'.$id.'Voted', '1', time()+(60*60*60) );
//navrat
return;
Joker
Profil
OK. Nemáte tam nijak podchycenou případnou chybu. Za řádek
$result = MySQL_Query("SELECT odpovede, separator, vysledky FROM ankety WHERE id = '$id'");

přidejte ještě tento řádek:
if(!$result) die('Chyba MySQL: '.mysql_error());

Uvidíte, co Vám to napíše.
Casero
Profil
pds
ale jestli ste nic neměnil, a předtím to jelo, a po nějakém zasahu hostingu, ne..je všecko v pořádku u vás v db??
pds
Profil
> Joker . no pridal som to tam a toto je výsledok:

Chyba MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'separator, vysledky FROM ankety WHERE id = '1'' at line 1
pds
Profil
> Casero.

No ja dúfam že ano
Joker
Profil
pds
Fajn, takže je chyba v tom SQL dotazu.
Bohužel zrovna "You have an error in your SQL syntax" (chyba SQL syntaxe) je taková všeobecná chyba...

SELECT odpovede, separator, vysledky FROM ankety WHERE id = '1'

Vidíte v tom někdo nějakou syntaktickou chybu?
...
...
Jo, jedna věc mě napadla: Jestli se hrabali na serveru, nejspíš tohle bude důsledek upgrade na novější verzi MySQL... takže jediné co mě napadá, že v novější verzi přidali nějaké nové vyhrazené slovo, nejspíš teda "separator".
Takže zkuste tohle:
$result = MySQL_Query("SELECT `odpovede`, `separator`, `vysledky` FROM `ankety` WHERE id = '$id'");
krteczek
Profil
napadlo mne že by mohla db žádat aby to bylo číalo int
a je lepší nejdříve dotaz sepsat a teprve potom ho použít:-)

$dotaz = "SELECT `odpovede`, `separator`, `vysledky` FROM `ankety` WHERE id = ".((int)$id);

ale myslím si že nikde neošetřuje hodnoty proměnných, podle kodu je to psane ještě pro php3, takže register_globals je na 100% off a script počítá že je on...
všechny proměnné které taháš z postu nebo getu přepiš na: $_POST['nazev_proměnné'] a $_GET['název_proměnné'] //podle toho jakou metodou je odesíláš z formuláře
krteczek
pds
Profil
>>Joker

Díky moc už to fičí. :) Ďakujem aj ostatním za pomoc .
Toto téma je uzamčeno. Odpověď nelze zaslat.

0