« 1 2 »
Autor Zpráva
roboti006
Profil *
Ahoj. Mám problém: Zčerstva, včera jsem se v PHP přesunul ke spolupráci s DB.
Našel jsem si o tom mnoho stránek, pročítal... Zkoušel jsem si SQL v MySQLadminovi kde to fungovalo
ale jakmile jsem se přesunul do PHP a query, stávkovalo to.
Správné heslo i uzivatel, server ppodle informací na WZ, nespolupracuje ani v nejmenším...
Toto je můj první pokus, trochu nedomyšlený ale k prvnímu kontaktu s databází přes PHP... Zadal jsem do formuláře svůj pokus, hledal jsem je v myAdminovi, potom jsem si tam zkopíroval kód z W3Cshools, ale nic nefunguje..
Podotýkám že skoro celé je to okopírované až na údaje, formulář ap.

<?php
$_POST[urlo] == $urlo;
$_POST[url] == $url;
$_POST[over] == $ovrURL;
$_POST[overURL] == $overURL;
$_POST[email] == $email;
$datumA = date("d-m-Y-G-i-s");
    fclose($adfile);
if ($ovrURL == "no"){
    $overURL == $url;
    };
$_SERVER['REMOTE ADDR'] == $ip;
$con = mysql_connect("mysql.webzdarma.cz","#####","#####");
if (!$con)
  {
  die('Není možné se připojit k databázi' . mysql_error());
  }

 mysql_select_db("sjiaphoto", $con);
mysql_query("INSERT INTO ads (img, href, email, overurl, ip)
VALUES ('$urlo', '$url', '$email', '$overURL', $ip)");

 if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

 mysql_select_db("sjiaphoto", $con);

 $result = mysql_query("SELECT * FROM ads");

 echo "<table border='1'>
<tr>
<th>overurl</th>
<th>url</th>
</tr>";

 while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['overurl'] . "</td>";
  echo "<td>" . $row['url'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

 mysql_close($con);
?> 

Nevím... Je to moje chyba, nebo je to freehostingem?
Taps
Profil
roboti006:
zkus níže uvedené
<?php 
$urlo=$_POST['urlo']; 
$url=$_POST['url'] ; 
$ovrURL=$_POST['over']; 
$overURL=$_POST['overURL'] ; 
$email=$_POST['email'] ; 
$datumA = date("d-m-Y-G-i-s"); 
    fclose($adfile); 
if ($ovrURL == "no"){ 
    $overURL == $url; 
    }; 
$_SERVER['REMOTE ADDR'] == $ip; 
$con = mysql_connect("mysql.webzdarma.cz","#####","#####"); 
if (!$con) 
  { 
  die('Není možné se připojit k databázi' . mysql_error()); 
  } 
 
  mysql_select_db("sjiaphoto", $con); 
mysql_query("INSERT INTO ads (img, href, email, overurl, ip) 
VALUES ('$urlo', '$url', '$email', '$overURL', $ip)") or die (mysql_error()); 
 
  if (!$con) 
  { 
  die('Could not connect: ' . mysql_error()); 
  } 
 
  mysql_select_db("sjiaphoto", $con); 
 
  $result = mysql_query("SELECT * FROM ads"); 
 
  echo "<table border='1'> 
<tr> 
<th>overurl</th> 
<th>url</th> 
</tr>"; 
 
  while($row = mysql_fetch_array($result)) 
  { 
  echo "<tr>"; 
  echo "<td>" . $row['overurl'] . "</td>"; 
  echo "<td>" . $row['url'] . "</td>"; 
  echo "</tr>"; 
  } 
echo "</table>"; 
 
  mysql_close($con); 
?> 
roboti006
Profil *
Takto mi to hlásí unexpected T_STRING in /3w/euweb.cz/s/sjiaphoto/test/ad/vymenyadd.php on line 38
<?php  
$urlo=$_POST['urlo'];  
$url=$_POST['url'] ;  
$ovrURL=$_POST['over'];  
$overURL=$_POST['overURL'] ;  
$email=$_POST['email'] ;  
$datumA = date("d-m-Y-G-i-s");  
    fclose($adfile);  
if ($ovrURL == "no"){  
    $overURL == $url;  
    };  
$_SERVER['REMOTE ADDR'] == $ip;  
$con = mysql_connect("mysql.webzdarma.cz","#########","######");  
if (!$con)  
  {  
  die('Není možné se připojit k databázi' . mysql_error());  
  }  
  
   mysql_select_db("sjiaphoto", $con);  
mysql_query(INSERT INTO ads (img, href, email, overurl, ip)  
VALUES ('$urlo', '$url', '$email', '$overURL', $ip) or die (mysql_error());  
  
   if (!$con)  
  {  
  die('Could not connect: ' . mysql_error());  
  }  
  
   mysql_select_db("sjiaphoto", $con);  
  
   $result = mysql_query("SELECT * FROM ads");  
  
   echo "<table border='1'>  
<tr>  
<th>overurl</th>  
<th>url</th>  
</tr>";  
  
   while($row = mysql_fetch_array($result))  
  {  
  echo "<tr>";  
  echo "<td>" . $row['overurl'] . "</td>";  
  echo "<td>" . $row['url'] . "</td>";  
  echo "</tr>";  
  }  
echo "</table>";  
  
   mysql_close($con);  
?> 
panther
Profil
roboti006:
těch kopanců kromě Tapsem upravených tam máš hromadu:

- na ř. 10 a 12 má být jen jedno rovnítko (tím se přiřazuje, dvěma se porovnává - tedy uvnitř podmínky)
- na ř. 12 přiřazuješ do nějaké globální proměnné (do které bys mimochodem neměl sahat) hodnotu nedefinované proměnné $ip. Má to být zapsané obráceně.
- na ř. 21 neošetřuješ vstupy, které ukládáš do DB - mysql_real_escape_string, v případě čísel třeba (int)
- který z řádků v tebou uvedeném kódu je skutečný 38, kde se nachází chyba?
YoSarin
Profil
roboti006:
Tipl bych že to bude chybějícími uvozovkami kolem SQL dotazu. Taps je ve svém příspěvku má, u tebe nějak zmizely...
roboti006
Profil *
37., 38. řádek jsou
mysql_query("INSERT INTO ads ('img', 'href', 'email', 'overurl', 'ip')
VALUES ('$urlo', '$url', '$email', '$overURL', '$ip') or die (mysql_error()");



Po opravení uvozovek v query podle druhého příspěvku, mi háže část která čte informace chybu
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 ')' at line 2
panther
Profil
roboti006:
Taps v [#2] má ty uvozovky jinde. Podívej se pořádně, ani opisovat/kopírovat neumíš.
roboti006
Profil *
Ale kopírovat jo, ten kód 37,38. řádku je o 16 minut starší, teď už to mám přesně podle něj...


Teď už jde jen o to zobrazení, protože bez něj je těžké zjistit jestli se informace zapsaly nebo ne... MySQL admin na webzdarma je věčná aplikace (jeden příkaz trvá pět minut když vezmete že takový amatér jako já testuje funkčnost zadání... to máte 3-5x jeden příkaz) a navíc než se dostanete k informacím (jakože to asi nejde) které v té DB jsou tak...

  mysql_select_db("sjiaphoto", $con);

   $result = mysql_query("SELECT * FROM ads");

   echo "<table border='1'>
<tr>
<th>overurl</th>
<th>url</th>
</tr>";
  
   while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['overurl'] . "</td>";
  echo "<td>" . $row['url'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

   mysql_close($con);
Taps
Profil
roboti006:
pokud informace v databázi jsou, tak podle kódu, který uvádíš v[#8] roboti006 by se ti měli zobrazit
roboti006
Profil *
Když mám kód úplně stejný jako v příspěvku #8 napíše mi to místo tabulky:
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 ')' at line 2
Hledal jsem manuály k MySQL 5.0 (která funguje na Webzdarma), podle rady v chybovém hlášení, a všechno je to moc odborné pro takového jako jsem já, nebo tam závorkování nebylo vůbec...
YoSarin
Profil
roboti006:
Ach jo...
Nauč se postupovat podle jednoduché zásady - když ti to někde vyhodí nějakou chybu, snaž se o ní zjistit maximum informací.
Mohlo by ti pomoct:
SQL dotaz nejprve sestav a až potom vykonej:
$sql = "INSERT INTO ads ('img', 'href', 'email', 'overurl', 'ip')  VALUES ('$urlo', '$url', '$email', '$overURL', '$ip')";
mysql_query($sql) or die(mysql_error() . '<br />' . $sql);
Když skript skončí chybou uvidíš i kompletní SQL dotaz kterého se chyba týká.
Je to vhodné jen pro debug! Na ostrém webu to samozřejmě zruš.
roboti006
Profil *
Snažím se, ale když to hledám teřba na Googlu tak mi to vyhazuje samé SQL injections a to je podle mě úplně jiný problém...
No jo, amatér...

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 ''img', 'href', 'email', 'overurl', 'ip') VALUES ('', '', '', '', '')' at line 1
INSERT INTO ads ('img', 'href', 'email', 'overurl', 'ip') VALUES ('', '', '', '', '')
alespoň už ví že ta data v DB nejsou...
YoSarin
Profil
roboti006:
myslím že máme špatné uvozovky kolem názvů sloupečků - nedávej tam buď žádné nebo použij znak `:
$sql = "INSERT INTO ads (img, href, email, overurl, ip)  VALUES ('$urlo', '$url', '$email', '$overURL', '$ip')";

Pardon, původně jsem to přehlédl (jestli to je teda tím - s mysql už moc nepracuju)

A ještě - vkládáš tam prázdná data, proto to pak nic nevypíše... ověř jestli proměnným $urlo, $url, ... přiřazuješ nějaký obsah před tím sql dotazem
roboti006
Profil *
Tk jo, první úspěch, chyba byla opravdu ve znaku ' kde mělo být `
Tady je odkaz, vypsalo to, sice jen overurl, ale myslím že už to v té DB je...
ale jak jsem vypsal celou tabulku tak mi stávkuje IP...
Celé odesílání jsem dal do IFu který ověřuje vyplnění polí - ale IP pořád stávkuje, a kvůli němu to stávkuje (protože je také v IFu).
Jak bych tyto údaje mohl dosadit na místo atributů třeba něco jako echo "<img src=\".$row['img'].\">" bez while

$result = mysql_query("SELECT * FROM ads");

    while($row = mysql_fetch_array($result))
  {
  };
aby to fungovalo a neprodukovalo chemické hlášky?
YoSarin
Profil
roboti006:
Jestli máš celý kód tak, jak jsi psal v [#3], tak se nedivím že ti $ip nefunguje. Neřeknu ti proč - zkus na to přijít sám (někdo už ti totiž říkal kde ta chyba je - dokonce jsi ji i opravil, ale ne všude).
roboti006
Profil *
Už jsem konečne přišel na to co jsem celou dobu přehlížel...
Přehozené rovnítka, která tam byla vícekrát než měla a všechno co jste se mi tu snažili naznačit :D
Teď bych potřeboval poradit, jak udělat obrázek s odkazem který by se našel podle údaje v DB,
Našel jsem toto, ale kdyz to ozkouším, ale nedává to nic ani do HREF=\"\" ani do SRC=\"\"

[url=http://www.timlinden.com/blog/website-development/php-banner-rotator/]
<?
$con = mysql_connect("mysql.webzdarma.cz","#########","######");
mysql_select_db("sjiaphoto", $con);

 $query = "SELECT * FROM `ads` ORDER BY RAND() LIMIT 1";
$result = mysql_query($query, $con);
$row = mysql_fetch_array($result);

 echo "<A HREF=\"{$row["SiteURL"]}\" TARGET=\"_blank\"".
     " BORDER=\"0\"><img src=\"{$row["BannerURL"]}\"</A>";
?>
[/url] podle toho chlapíka to funguje... podle mě ne... Odkazuje to na sebe a v obrázku nemá nastavený SRC (také z DB)
Leda že by ORDER BY RAND() nebyl úplně vhodný jinak nevím
YoSarin
Profil
roboti006:
Zkus ještě před to echo přidat print_r($row); a napiš co z toho vypadne.
roboti006
Profil *
Array
(
    [0] =&gt; 
    [P_Id] =&gt; 
    [1] =&gt; 
    [img] =&gt; 
    [2] =&gt; 
    [href] =&gt; 
    [3] =&gt; 
    [email] =&gt; 
    [4] =&gt; 
    [overurl] =&gt; 
    [5] =&gt; 
    [ip] =&gt; 
    [6] =&gt; 
    [time] =&gt; 

 )
<a href="" target="_blank" border="0"><img src="" <="" a=""></a>
Toto to vyprodukovalo s print_r
a když jsem smazal _r zmizlo to a misto toho bylo jedno slovo:
Array<a href="" target="_blank" border="0"><img src="" <="" a="">
YoSarin
Profil
roboti006:
Tak si tu databázi zkus prohlédnout přes PHPmyadmina - podle všeho ji budeš mít plnou prázdných řádků... (což mimo jiné svědčí o tom, že jsi zapomněl na primární klíč s autoincrement)
roboti006
Profil *
Pomoc... Posledně když jsem se v tabulce pokoušel vytvořit AUTO_INCREMENT vyhazovalo chybu, teď také vyhazuje chybu, a dokonce ani když jsem se snažil přidat sloupec přímo pomocí MySQL admina (roletkové výběry, textová pole, OK tlačítko) tak to házelo chyby...
Rád bych vytvářel ID ale nejde to, tak jsem vymazal celou tabulku a teď ji zakládám znovu ale pořád mi to nebere to P_id nebo něco takového.
CREATE TABLE ads
(
'P_id' VARCHAR(10) NOT NULL AUTO_INCREMENT,
'img' VARCHAR(100),
'href' VARCHAR(100),
'email' VARCHAR(50),
'overurl' VARCHAR(50),
'ip' VARCHAR(15),
'time' VARCHAR(15),
PRIMARY KEY (P_id))
MySQL hlásí:
#1064 - 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 ''P_id' VARCHAR(10) NOT NULL AUTO_INCREMENT,
'img' VARCHAR(100),
'href' VARCHAR' at line 3 
YoSarin
Profil
roboti006:
No, bodejť... Jak chceš automaticky inkrementovat string? Používej odpovídající datové typy - id je integer (mimochodem, máš nějaký opravdu závážný důvod proč ten sloupeček pojmenováváš P_id a ne jen id? P_id tak trochu nabádá, že je někde nějaká tabulka P, v té je sloupeček id a čísla v něm by měla odpovídat číslům v tomhle sloupečku...).
A na sloupeček 'time' zkus DATETIME DEFAULT NOW() (pokud chceš mít jako defaultní čas čas vytvoření záznamu).
roboti006
Profil *
Toto mi vyprodukoval sám mySQLadmin -

CREATE TABLE `ads` (
`id` INT NOT NULL AUTO_INCREMENT ,
`img` VARCHAR( 100 ) NOT NULL ,
`href` VARCHAR( 100 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`overurl` VARCHAR( 50 ) NOT NULL ,
`ip` VARCHAR( 20 ) NOT NULL ,
`time` DATETIME( 15 ) NOT NULL ,
PRIMARY KEY ( `id` )
)
s tímto nastavením:

pořád produkuje chyby, a už se mi na DB pomalu začíná tvořit alergie...
#1064 - 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 '( 15 ) NOT NULL ,
PRIMARY KEY ( `id` )
)' at line 8 
Taps
Profil
roboti006:
do time nenastavuj žádnou delku !
YoSarin
Profil
roboti006:
A co konkrétně má podle tebe reprezentovat číslo v závorce za DATETIME? A myslíš že tam opravdu má být? Podívej se na syntaxi CREATE TABLE, do části data_type. Vidíš tam u typu DATETIME povolenou nějakou závorku?
roboti006
Profil *
Ani bez čísla to nevykonalo, ale dal jsem time jako varchar(15), vzalo to, budu time posílat z PHP v query...
Díky moc za ochotu, doufám že už si poradím a nebudu nucen tady den co den zakládat témata.
Hodně štěstí, zdraví no nového roku! roboti006
YoSarin
Profil
roboti006:
dal jsem time jako varchar(15)
Zaděláváš si na problémy - zbytečně. Raději zkus přijít na to kde děláš chybu než to obcházet s pomocí nějaké zhůvěřilosti...
roboti006
Profil *
Nebylo by lepší dát tam timestamp než datetime?
YoSarin
Profil
roboti006:
Záleží čeho chceš dosáhnout. Ale dá se říct, že u nějaké osobní aplikace je to v podstatě jedno.
roboti006
Profil *
No... Asi jsem blbý nebo co, pořád nemůžu vytvořit ani změnit time na typ DATETIME nebo TIMESTAMP
asi se vykašlu na čas a smažu ho. Ještě bych potřeboval když už jsme při tom, zfunkčnit toto:
<?
$con = mysql_connect("mysql.webzdarma.cz","#########","######");
if (!$con)  
  {  
  die('Není možné se připojit k databázi' . '<br/>' . mysql_error());  
  }
  mysql_select_db("sjiaphoto", $con);
$query ="SELECT * FROM `ads` ORDER BY RAND() LIMIT 1";
$result =mysql_query($query) or die(mysql_error() . '<br />' . $sql);
$row = mysql_fetch_array($result);

 echo "<a href=\"{$row["href"]}\" TARGET=\"_blank\". BORDER=\"0\"><img src=\"{$row["img"]}\"</a>";
?>
Hlavně to v tom echu, protože to vrací prázdno tam kde to vytahuje informace z DB a do ní jsem tak na 90% zapsal informace formulářem, a když to vypíšu s while jako tabulku, normálně mi to vypíše...
YoSarin
Profil
roboti006:
Zkontroluj si ten kód - na první pohled tam je patrných několik nesmyslů (možná překlepy, spíš nepozorné použití ctrl+c - ctrl+v).
Když nevíme co máš v DB, tak těžko říct co to má vypsat - podle toho co jsi tu ukazoval dřív jsi do db zapsal hromadu prázdných řádků (a možná nějaký s obsahem). Tak je prostě možné že se teď trefuješ do nějakého prázdného...

Pokud to nevypisuje žádnou chybu, tak to nejspíš funguje. A jakou chybu ti to píše při vytváření tabulky s timestampem/datetime? A jak ji vytváříš?

a ty nesmysly v kódu:
na řádku 9 v or die() chceš vypsat jakousi proměnnou $sql, kterou ale v tomhle kontextu nepoužíváš - schválně, která proměnná tam má být místo ní?
na řádku 12 ve stringu pro echo - za target se ti přimíchala nějaká tečka která tam nemá co dělat.
na řádku 12 ve stringu pro echo - nemáš uzavřený tag img

Zvaž nějaké přehlednější zapisování HTML řetězců, ať nemusíš pořád escapovat uvozovky... Zkus to třeba takhle:
echo '<a href="' . $row['href'] . ' target="_blank" border="0"><img src="' . $row['img'] . '" /></a>'; 
« 1 2 »

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0