MySQL+PHP (podmienka)

Programovacie jazyky, rady, poradňa...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

MySQL+PHP (podmienka)

Príspevok od používateľa Fata! ChaoS »

ahojte, no ako Vám nastolím problém.
Potrebujem spraviť podmienku, že ak príkaz v MySQL vyhlásy TRUE, čiže našlo niečo, tak nech spraví niečo, to niečo už ja doplním, len neviem ako spraviť ten začiatok. Presnejšie stým TRUE!
V ľudskom jazyku:

If....tu viem doplniť.....SELECT * FROM `pocitadlo_log` WHERE `Visited` = ''2007-07-01 00:00:00'' AND `ip_addr` LIKE CONVERT(_utf8 ''213.160.163.70'';....vyhlásy(tu potrebujempomôcť).... TRUE....ďalej pokračovať už viem.

Dúúúúúfam, že ste pochopili, no teraz to mám len tka nahádzané bez hlavy a pety, ale potom ten MySQL príkaz dám do nejakého premenného atď, len to neviem, že ako mám napísať, že keď vyhlásy TRUE.

Ja viem, že mne sa ťažko dá pomáhať, lebo rozmýšlam trošku svojvoľne.

V skratke chcem spraviť takúto podmienku:
Ak nájde riadok v tabulke pocitadlo_log, kde Visited je 2007-07-01 00:00:00 a ip_addr 213.160.163.70 tak blablabla

tie hodnoty si nevšímajte
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

no ved sprav ten dotaz (mysql_query)

a potom si pomocou mysql_num_rows() zisti ci to ma nenulovy pocet riadkov, nie???
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

No jasan, že ma to nenapadlo, no veľká vďaka ti.
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

trosku mimo temy... vzdy pri programovani nam unikaju tie najjednoduchsie riesenia ;)
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

turtlak69 napísal:trosku mimo temy... vzdy pri programovani nam unikaju tie najjednoduchsie riesenia ;)
ako komu :D
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Spravil som to takto
<?
$day_visit=date("Y-m-d");
$ip_visit=$REMOTE_ADDR;

$conn=mysql_connect("mysql","uzivatel","heslo");
mysql_select_db("db");

$sql="SELECT * FROM counter WHERE visited='$day_visit' AND ip_addr='$ip_visit'";
$result=mysql_query($sql);
if (mysql_num_rows($result)==0):
$sql="INSERT INTO counter (day_visit,ip_visit) VALUES ($day_visit,$ip_visit)";
mysql_query($sql);
endif;
?>
Lenže vždy mi píše
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ...
Nevedel by si mi napísať ten jeden riadok, lebo potrebujem tú podmienku, že keď $result vráti prázdný výsledok tak zapíš do ...
Len neviem ako to zapísať, bo moc toho ešte neviem a vidíš hore, že som to jak skúšal.

PS: Mám otázku, ak chcem aby sa tento kód vykonal tak stačí čeknúť adresu súboru kde je ten kód, nie?
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

ten kod vyzera v poriadku .... chyba bude zrejme v dotaze kedze ti to vracia nejaku blbost a nie resource
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

Fata! ChaoS napísal:Spravil som to takto
Lenže vždy mi píše Nevedel by si mi napísať ten jeden riadok, lebo potrebujem tú podmienku, že keď $result vráti prázdný výsledok tak zapíš do ...
Len neviem ako to zapísať, bo moc toho ešte neviem a vidíš hore, že som to jak skúšal.

PS: Mám otázku, ak chcem aby sa tento kód vykonal tak stačí čeknúť adresu súboru kde je ten kód, nie?
skus

Kód: Vybrať všetko

$riadky = mysql_num_rows($sql);
if ($riadky != "")
{
...
}
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

turtlak69 napísal:skus

Kód: Vybrať všetko

$riadky = mysql_num_rows($sql);
if ($riadky != "")
{
...
}
mysql_num_rows vracia int takze takto asi nie
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Pre skúšku som spravil, len tak aby platila podmienka

Kód: Vybrať všetko

<?
$day_visit=date("Y-m-d");
$ip_visit=$REMOTE_ADDR; 

$conn=mysql_connect("mysql","","");
mysql_select_db("");

$sql="SELECT * FROM counter WHERE visited='$day_visit' AND ip_addr='$ip_visit'";
$result=mysql_query($sql);
$i="2007-07-01";
if ($i == $day_visit):
   $sql="INSERT INTO counter (day_visit,ip_visit) VALUES ($day_visit,$ip_visit)";
   mysql_query($sql);
endif;  
?>
potom najdem na adresu .../pocitadlo.php, a chybu už nepíše, ale nezapíše sa do db nič! Ako mám vycieliť aby sa zapísalo do db?

PS: V databáze tie tabuľky day_visit a ip_visit mám varchar(20)
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

ale pani. ved optimalizujme trosku. ak potrebujes vediet ci je v databaze aspon jeden zaznam ktory vyhovuje tvojej podmienke a nepotrebujes udaje toho zaznamu tak pouzi toto

Kód: Vybrať všetko

SELECT 1 FROM tabulka WHERE tvoja_podmienka LIMIT 1
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

A keď budete niekedy potrebovať počet vyhovujúcich záznamov, môžete použiť kombináciu SQL_CALC_FOUND_ROWS + FOUND_ROWS() (je to v príkladoch k funkcii mysql_num_rows)
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Kód: Vybrať všetko

<? 
$last_visit=date("Y-m-d H:i:s"); 
$day_visit=date("Y-m-d"); 
$ip_visit=$REMOTE_ADDR; 

$conn=mysql_connect("mysql","***","***"); 
mysql_select_db("***"); 

$reload = mysql_query("SELECT 1 FROM counter WHERE day_visit='$day_visit' AND ip_visit='$ip_visit' LIMIT 1"); 
$count = mysql_num_rows($reload); 
if ($count == 0): 
$sql="INSERT INTO counter (counter_name,Visits,day_visit,ip_visit,last_visit) VALUES ($counter_name,0,$day_visit,$ip_visit,$last_visit)"; 
mysql_query($sql); 
endif; 
?>
tak v podstate to mám hotové, len neviem, čo mám robiť aby sa ten kód vykonával, lebo keď načítam ten súbor tak sa nezapíše nič do DB, prečo? čo mi tam ešte chýba?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pridaj tam výpis tej premennej $count (aby si videl, čo obsahuje). Taktiež by bolo vhodné nejako ošetriť prípadné chyby MySQL.
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

toto s chybou zrejme suvisiet nebude, ale chyba ti tam tusim:

Kód: Vybrať všetko

mysql_close();
:)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

ppt napísal:toto s chybou zrejme suvisiet nebude, ale chyba ti tam tusim:

Kód: Vybrať všetko

mysql_close();
:)
To tam byť môže, ale nemusí. :)
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

takto ti poradim ...

skus si tie tvoje query dat do phpMyAdmina co on na ne povie ... ak ti vyhodi chybu tak ti presne napise v com je problem a potom to lahko opravis ...

predpokladam ze prave tam je problem (zle query; "SELECT 1 ..." vyzera velmi cudne)

a este : v dotazoch skus zatvarat stringove hodnoty do apostrofov alebo uvodzoviek
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

gwixt napísal:predpokladam ze prave tam je problem (zle query; "SELECT 1 ..." vyzera velmi cudne)

a este : v dotazoch skus zatvarat stringove hodnoty do apostrofov alebo uvodzoviek
co je na tom cudne? normalne ti do vysledku da 1. chyba bude isto v podmiene. neporovnavas nahodou integer s retazcom?
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Jj, chyba bola v dotaze, díky Vám za pomoc.

Kód: Vybrať všetko

INSERT INTO counter (counter_name,Visits,day_visit,ip_visit,last_visit) VALUES ($counter_name,0,$day_visit,$ip_visit,$last_visit)
premenné tam mali byť v úvodzovkách

Kód: Vybrať všetko

INSERT INTO counter (counter_name,Visits,day_visit,ip_visit,last_visit) VALUES ('$counter_name',0,'$day_visit','$ip_visit','$last_visit')
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

No teraz som to celkom prerobil a už som s tým hotový, lenže mi tam píše chybu v syntaxe, ale tam žiadnú chybu nevidím a ešte k tomu vyššie je to isté a tam to nepíše chybu.
<?
$ip_addr=$REMOTE_ADDR;
$itstime=date("H:i");
$Last_visit=date("Y-m-d H:i:s");
$day_visit=date("Y-m-d H");
$day_time=date("Y-m-d");
$Conn=mysql_connect("***","***","****");
mysql_select_db("***");
$sql="SELECT * FROM Ncounter WHERE counter_name='$counter_name'";
$result=mysql_query($sql);
if (mysql_num_rows($result)==0):
$Visits=1;
$sql="INSERT INTO Ncounter (counter_name,visits,last_visit) VALUES ('$counter_name',$Visits,'$Last_visit')";
mysql_query($sql);
$sql="INSERT INTO Ncounter_log (counter_name,visiter,visit_time,ip_visiter,day_visit) VALUES ('$counter_name',$Visits,'$Last_visit','$ip_addr','$day_visit')";
mysql_query($sql);
$sql="INSERT INTO Ncounter_day (counter_name,visits,day_time) VALUES ('$counter_name',$Visits,'$day_time')";
mysql_query($sql);
endif;
$sql="SELECT * FROM Ncounter WHERE counter_name='$counter_name'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$CVisits=++$row["visits"];
$reload=mysql_query("SELECT 1 FROM Ncounter_log WHERE day_visit='$day_visit' AND ip_visiter='$ip_addr' LIMIT 1");
$count = mysql_num_rows($reload);
if ($count == "0"):
$sql="INSERT INTO Ncounter_log (counter_name,visiter,visit_time,ip_visiter,day_visit) VALUES ('$counter_name','$CVisits','$Last_visit','$ip_addr','$day_visit')";
mysql_query($sql);
$sql="UPDATE Ncounter SET Visits=$CVisits,Last_visit='$Last_visit' WHERE CounterName='$counter_name'";
mysql_query($sql);
endif;
$sql="SELECT * FROM Ncounter_log WHERE day_time='$day_time'";
$Tcount=mysql_num_rows($sql);
if ("23:59" == $itstime):
$sql="INSERT INTO Ncounter_day (counter_name,visits,day_time) VALUES ('$counter_name','$Tcount','$day_time')";
mysql_query($sql);
endif;
?>
Kde je v tom riadku chyba alebo čo tam mám zle?

PS:
Parse error: syntax error, unexpected T_STRING in ... on line 20
Napísať odpoveď