Autor Zpráva
karelkarel
Profil
Ahoj,
v databázi mám tabulku s ceníkem zboží, která obsahuje několik sloupců. Jedním ze sloupců je katalogove_cislo . Chtěl bych si na stránky umístit formulář, do kterého když zákazník zadá konkrétní katalogové číslo, tak se mu zobrazí příslušný řádek s tímto katalogovým číslem. Někdy má stejné katalogové číslo i vícero řádků - zobrazili by se všechny řádky. Když by zadal číslo, které v ceníku není, zobrazila by se chybová hláška.


Mohl by mi prosím někdo napsat polopatický návod jak na to?


Díky!!
Jozin
Profil
Zdravím,

polopatický návod pro koho? Umíš HTML, PHP? Dělal si někdy s MySQL?

Pokud neumíš ani HTML, tak ti to někdo bude muset napsat úplně celé.
Pokud neumíš PHP, ale HTML znáš, tak můžeš napsat formulář, který stejně není nijak těžký (ale nejspíš ti to bude muset někdo napsat celé)
Pokud umíš HTML a PHP, ale MySQL ti nic neříká, tak se mrkni do dokumentace na MySQL a SQL syntax.

Pokud si to chceš udělat sám a neumíš ani jedno, tak se začni učit. HTML potom PHP a nakonec připojení a dotazy na databázi v PHP,

Jozin.
Sir Tom
Profil
karelkarel

Předpokládám, že víte něco málo o MySQL dotazech, výběrech dat z databáze a propojení PHP a MySQL...

Jednoduchý formulář, kam zákazník napíše číslo a pokud klikne na Odeslat, přesměruje jej to na stránku results.php.
<form action="results.php" method="post">
  <input type="text" name="q" />
  <input type="submit" />
 </form>


Na stránce results.php je tento kód:
<php
  $sql = "SELECT sloupec1, sloupec2, sloupec3 FROM tabulka1 WHERE katalogove_cislo=".$_POST["q"];
  $result = mysql_query($sql,$spojeni);
  if(mysql_num_rows($result)==0) echo "Nic nebylo nalezeno";
    else{
      while(list($sloupec1,$sloupec2,$sloupec2) = mysql_fetch_array($result)){
        echo $sloupec1." - ".$sloupec2." - ".$sloupec3;
      }
    } 
?>


SQL dotaz a vzhled výstupu si pochopitelně musíte upravit na svůj případ.

Ah, tak Jozin byl dříve - přepokládám, že umíte HTML, PHP a trošku MySQL.
karelkarel
Profil
díky za radu.

kde může být chyba? Hlásí mi to Parse error: syntax error, unexpected T_STRING in /search.php on line 2

tady je kód:


<?php
mysql_connect ("hz-mysql1", "mysql34358", "abc") or die (mysql_error());
mysql_select_db ("mysql37611");

$term = $_POST['term'];

$sql = mysql_query("select * from cenik where katalogove_cislo like '%$term%'");

while ($row = mysql_fetch_array($sql)){
echo 'ID: '.$row['ID'];
echo ' katalog: ‘.$row['katalogove_cislo'];
echo ‘ Barva: ‘.$row['barvy'];
echo ‘ 1_5: ‘.$row['Phone'];
echo ”;
}

?>


Díky!
Sir Tom
Profil
Na připojení k databázi používám toto:
  $connecting = mysql_connect($server,$user,$password);
  $result = mysql_select_db($databaseName,$connecting);


u toho $sql dotazu:
$sql = mysql_query("select * from cenik where katalogove_cislo like '%".$term."%'",$connecting);


A k tomu výstupu - nevím, jestli je možné to takhle psát. Já mám raději syntaxi s link() (viz kód výše).
jenikkozak
Profil
karelkarel:
Nepoužívej znaky a . Aby ti to fungovalo, musíš použít anglické uvozovky či apostrofy - " a ', které jsou chápány jako ohraničení řetězců.
karelkarel
Profil
Díky všem za rady, nakonec jsem splodil i podle dalších návodů na netu toto a funguje:


<?php
$host = "hz-mysql1";
$dbuser = "mysql34358";
$dbpass = "abc";
$db = "mysql37611";

$con = mysql_connect($host, $dbuser, $dbpass);
if(!$con){
die(mysql_error());
}

$select = mysql_select_db($db, $con);
if(!$select){
die(mysql_error());
}

$item = $_REQUEST['find'];

$data = mysql_query("SELECT * FROM cenik WHERE katalogove_cislo LIKE '%$item%'");

while($row = mysql_fetch_array($data)){
echo $row['1_5']. "<br>";
echo $row['id']. "<br>";
}

?>


jen ještě jedna otázka, jak udělám to, aby se výsledek hledání zobrazil pod vyhledávacím polem, nikoliv místo něj ?
okolojdouci
Profil *
karelkarel:
jen ještě jedna otázka, jak udělám to, aby se výsledek hledání zobrazil pod vyhledávacím polem

Zřejmě někde rozlišuješ, jestli byl odeslán $_REQUEST['find'] a podle toho zobrazuješ výsledky nebo formulář.
Mimochodem - když sem dáváš kód, dávej ho označený jako kód, tzn. tlačítkem <>
karelkarel
Profil
okolojdouci:
Zřejmě někde rozlišuješ, jestli byl odeslán $_REQUEST['find'] a podle toho zobrazuješ výsledky nebo formulář.

mno to mi moc nepomohlo :)
okolojdouci
Profil *
karelkarel:
mno to mi moc nepomohlo :)

Vzhledem k tomu, že je to mimo kód, který jsi sem napsal, tak víc nečekej.
Než sem zkopíruješ 200 řádků, zkus se podívat, jestli někde nad tím SELECTem není nějaký if.
jenikkozak
Profil
karelkarel:
Chápu správně, že máš na jedné nejmenované stránce ten vyhledávací formulář a na jiné stránce (results.php) zpracování tohoto formuláře?
Pokud chceš, aby se ti nad výsledky zobrazilo vyhledávací pole, tak buď ten formulářek zkopíruj i na stránku results.php, nebo skript z results.php zkopíruj na stránku, na které je ten formulář.
V tomto druhém případě ale bude nutné změnit hodnotu parametru action u toho formuláře. Buď do něj uveď tu stránku, na které se formulář zobrazuje, nebo ten parametr smaž. Rozhodneš-li se jít druhou cestou, přidej ještě podmínku, že pokud je formulář odeslán, má se vyhledávat v databázi.
karelkarel
Profil
tak taky vyřešeno. Teď mi zbývá poslední věc a to zobrazení výsledku v tabulce. Mám toto:

{
 echo ("<table><tr><td>Stránka v tištěném katalogu</td><td>Katalogové číslo</td><td>Kód výrobce</td><td>Barevnost</td><td>Velikosti</td><td>Cena 1 - 5 ks</td><td>Cena 6 - 10 ks</td><td>Cena 11 - 30 ks</td><td>Cena 31 - 100 ks</td><td>Cena 101 - 200 ks</td><td>Cena201 a více ks</td></tr><tr><td>".$row['strana_v_katalogu']."</td><td>".$row['katalogove_cislo']."</td><td>".$row['kod_vyrobce']."</td><td>".$row['barvy']."</td><td>".$row['velikosti']."</td><td>".$row['1_5']."</td><td>".$row['6_10']."</td><td>".$row['11_30']."</td><td>".$row['31_100']."</td><td>".$row['101_200']."</td><td>".$row['201_vice']."</td></tr></table>"); 
 }


Problém je v tom, že názvy sloupců se zobrazují ob řádek:
http://strojni-vysivka.cz/search.php


Chtěl bych tomu dát nějakou formu, aby názvy sloupců byly jenom nahoře, třeba tučně zvýrazněné, buňky měli stejnou velikost a viditelný rámeček....

jak na to?
jenikkozak
Profil
Do cyklu dej jen věci, o kterých chceš, aby se ti opakovaly.
Čili zapiš začátek tabulky a názvy sloupců, pod to dej cyklus while, kterým budeš postupně vypisovat nalezené hodnoty do řádků. Pak cyklus uzavři a vypiš konec tabulky. Vzniklou tabulku pak můžeš stylovat podle libosti.
karelkarel
Profil
jenikkozak:
Do cyklu dej jen věci, o kterých chceš, aby se ti opakovaly.
Čili zapiš začátek tabulky a názvy sloupců, pod to dej cyklus while, kterým budeš postupně vypisovat nalezené hodnoty do řádků. Pak cyklus uzavři a vypiš konec tabulky. Vzniklou tabulku pak můžeš stylovat podle libosti.
nějak jsem se v tom zamotal...
jenikkozak
Profil
karelkarel:
Celé to echo, které jsi tu vypsal, máš v cyklu while. Ty jsi nevytvořil jednu tabulku. Protože máš v tom cyklu i část <table><td>blabla, vytvořil jsi tolik tabulek, kolik ti to našlo záznamů v databázi. To není tvým cílem. Chceš jedinou tabulku. Ve které bude její jeden řádek odpovídat řádku v databázi.
Proto 1. vypiš začátek tabulky <table> a její hlavičku.
Za 2. cyklem while projdi nalezené záznamy a z každého vypiš jeden řádek této tabulky.
Ve třetím kroku tuto tabulku uzavři. </table>

Zkrátka ten začátek a konec tabulky vyndej z toho echa, které jsi výše uvedl.

Schématicky:
<?php
$data = mysql_query("SELECT * FROM cenik WHERE katalogove_cislo LIKE '%$item%'"); 
echo "<table><tr><td>Stránka v tištěném katalogu</td></tr>";
while($row = mysql_fetch_array($data)){ 
  echo "<tr><tr><td>".$row['strana_v_katalogu']."</td></tr>"
} 
echo "</table>";
?> 

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:

0