« 1 2 »
Autor Zpráva
edm
Profil *
Celé odpoledne (hafo hodin) bojuju s jedním problémem - vložení dat z formuláře do databáze SQL.
Mám stránku kde se vypní informace - napřl:jméno, příjmení, telefon, adrese atd, pak se to přesměruje na další stránku, kde je to už zpracované - jednoduše pomocí $ proměné a když to chci na podruhé potvrdit a uložit do databáze, nejde mi to. Opravdu jsem zkoušel strašně moc věcí, ale není mi jasný jak použít stávající proměné a přes ně to tam hodit. Zkoušel jsem: $result = mysql_query ... $insertQuery atd, ale bez výsledků... (problém se spojením se s databází nemám, jde mi jen o ten příkaz zapsání a následovný echo na další stránce...)
pomožte mi pls někdo, už mi z toho pomalu hrabe =)
DÍKY!!!
centi
Profil
Ukážka zdrojáku by pomohla.
ash
Profil
Formulár:

<form action="spracovanie.php" method=post>
<input type="text" name="meno" value="">
<input type="text" name="priezvisko" value="">
<input type="submit" value="Prihlásiť">
</form>


volá spracovanie.php

po prihlásení k databáze:

mysql_query("INSERT INTO tabulka(meno, priezvisko) VALUES ('$_POST[meno]', '$_POST[priezvisko]'");


vypísanie:

$vysledok=mysql_query("SELECT meno, priezvisko FROM tabulka'");

while ($riadok=mysql_fetch_array($vysledok) {

echo "meno=$riadok[meno], priezvisko=$riadok[priezvisko]";

}
edm
Profil *
Díky, ale pořád je nějaká chyba v:

while ($riadok=mysql_fetch_array($vysledok)

Když jsem to vymazal, ukázalo se mi pouze:
meno=, priezvisko=
ale stejně se to nezapsalo do databáze - i když to neukáže žádnou chybu. Vytvořil jsem úplně novou databázi - přizpůsobil jsem ji tvému pojmenovaní, ale stejnak..nee
Anonymní
Profil *
Chýba mi tam uzatváracia zátvorka:
while ($riadok=mysql_fetch_array($vysledok))
edm
Profil *
hmmmm...pořád nee.

chyba stále ve while:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\www\pok\spracovanie.php on line 13

a celý soubor zní:

<html>
<head>
</head>
<body>
<?php
$spojeni = mysql_connect("localhost","root","");
mysql_select_db("pokus", $spojeni);

mysql_query("INSERT INTO info(meno, priezvisko) VALUES ('$_POST[meno]', '$_POST[priezvisko]'");

$vysledok=mysql_query("SELECT meno, priezvisko FROM info'");

while ($riadok=mysql_fetch_array($vysledok)){

echo "meno=$riadok[meno], priezvisko=$riadok[priezvisko]";

}

$spojeni ?>
</body>
</html>¨






Ale i ikdyž je ta chyba ve výpisu, nevím proč neproběhne alespoň ten zápis - do databáze POKUS, tabulka INFO. ___________????
ash
Profil
Buď nie si prihlásený k databáze, alebo je tabuľka prázdna.

Skús si dať ešte pred zápisom do databázy vypísať hodnoty premenných

echo "meno=$_POST[meno], priezvisko=$_POST[priezvisko]";

či náhodou nie sú prázdne
edm
Profil *
Vypíše se to v pořádku. Navíc spojení s databází je také v pořádku, protože při příkazu:

$result = mysql_query ("SELECT * FROM info", $spojeni);
while ($row = mysql_fetch_row($result))
{ for ($i=0; $i<mysql_num_fields($result); $i++)
echo $row[$i] . " ";
}

se mi vypíšou všechna data z tabulky INFO.
Ale aby se tam zapsaly????_________NE!!!! =)
centi
Profil
edm
od tadeto:

mysql_query("INSERT INTO info(meno, priezvisko) VALUES ('$_POST[meno]', '$_POST[priezvisko]'");

to prepíš na:

$qIns = "INSERT INTO info(meno, priezvisko) VALUES ('$_POST[meno]', '$_POST[priezvisko]'";
if (!mysql_query($qIns))
{
die(mysql_error());
}
else
{
$qSel = "SELECT meno, priezvisko FROM info'";
if (!@$vysledok=mysql_query($qSel))
{
die(mysql_error());
}
else
{
while ($riadok=mysql_fetch_array($vysledok))
{
echo "meno=$riadok[meno], priezvisko=$riadok[priezvisko]";
}
}
}

je to síce trocha dlhšie, ale ak je tam náhodou chyba v SQL dotaze, tak ti ju aj vypíše.
edm
Profil *
Tak to vypsalo:

"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 1"

Verzi mám - PHP Version 5.0.0
a myadmin - 2.3.4
ash
Profil
chýba tam ukončovacia zátvorka
VALUES('$_POST[meno]', '$_POST[priezvisko]')

Upravím to radšej aj v pôvodnom príspevku nech sa to tu nemnoží :-(
kubika
Profil *
Nechci vám do tohomoc mluvit,ale tady můžeš najít inspiraci:http://knihy.cpress.cz/BookDoc.asp?DocID=0&BookID=1122&Downl oadSection=2
Jsou to zdr. kódy ke knize PHP a Mysql,jsou v češtině.
edm
Profil *
To Ash, už jsem měl naději, že je to jen tou závovrkou, ale chyba dál přetrvává - stejná. Přijde mi, že je to nějaký zakletý....

To Kubika: Díky za tip, stáhnul jsem si to, ale pročíst se tím celým bude docela náročnější na čas - nechám si to na víkend. Ta knížka by se k tomu hodila =)
Já mám Php a MySql od O'reilly - databáze winestore, docela sem se v tom něco naučil, ale spoustakrát to udělám přesně podle toho a nejde mi to....něco podobnýho jako to, co tady celou dobu řešíme. Zkusil jsem to podle tý knížky, ale též bez výsledku...Přitom je to tak základní úkon - formulář, který zapíše do databáze.....nevim =)
kubika
Profil *
skus si skopírovat skripty 6.1-pojmenuj zahlavi.inc(je to jen první část,která se
načte do 6.3-index.php)a 6.2 tj pata.inc do složky sablony,kterou si udeláš na servru ve složce C/www(jak jsi instaloval PhP).Ke slozce sablony si pridej 6.3 tj index.php-tím to jenom spustíš,načte se zahlavi.inc,pata.inc a vypíše ti nabídku-odkazy na stránky.Dál si k index.php a k složce sablony,nakopíruj 6.5-mysql_spojit.php,což je program kterej tě spojí s databází a volá si ho registruj.php-6.6 asi uprostřed.Do mysql_spojit.php si dej heslo které používáš,název databáze a ostatní nech tak.V 6.6 jak se spojuješ s databází,require_once(); tak je před mysql toto:../.Záleží v jaké úrovni máš napsané 6.5 a podle toho to vymaž nebo nech-poznáš jestli jsi se spojil či nikoli.6.6si tam dej k index.php-ten zapisuje řádek do databáze,6.7 ten čte řádek z databáze název:zobraz_uzivatele.php.Dál si musíš vytvořit databázi 'mojedata' a vní tabulku uzivatele

CREATE TABLE `uzivatele` (
id_uzivatele MEDIUMINT(8) UNSIGNED NOT NULL auto_increment,
uziv_jmeno VARCHAR(20) NOT NULL,
jmeno VARCHAR(15) NOT NULL,
prijmeni VARCHAR(15) NOT NULL,
email VARCHAR(40),
heslo VARCHAR (16) NOT NULL,
datum_registrace DATETIME NOT NULL,
PRIMARY KEY (id_uzivatele),
KEY datum_prijeti (datum_registrace));

to si dej do sql prikazu,mnelo by se to vytvorit.a muzes tvorit.
edm
Profil *
heeeej....tak zítra tomu věnuju odpoledne....DÍKY.....jestli to pofachčí, budu skákat deset minut do stropu, jestli ne, tak vyhazuju komp z okna.
(ale stejně by mě zajímalo proč nejde ten jednoduchý skript od Ashe. Přitom by měl být v pořádku...třeba až rozeběhnu celou tu tvou registraci, vytáhnu z toho danou syntaxi a budu vědět, v čem byl zakopanej pes.)
kubika
Profil *
ted jsem to skousel,mnel jsem to tam za deset minut nasázený,když ti to nepojede tak se ještě ozvi
centi
Profil
edm
Problém bude len v chybnej syntaxi SQL požiadavky.
Prvú by som ja prepísal takto:

$qIns = "INSERT INTO info (meno, priezvisko) VALUES ('".$_POST[meno]."', '".$_POST[priezvisko]."'";

a z druhej vyhodil ten apostrof (či čo je to ten predposledný znak :-))

$qSel = "SELECT meno, priezvisko FROM info";

A tiež skús namiesto
die(mysql_error());

zadať
die("insert poziadavka: ".$qIns);
die("select poziadavka: ".$qSel);

Keď nastane chyba, tak ti aspoň vypíše konkrétnu SQL požiadavku, ktorá bola chybná a možno tak objavíš problém.
krteczek
Profil
Pánové stále tam máte chybu!!!
$_POST[meno]

nebo
$_POST['meno']

to druhé je správně a proto máš stále pázdnou databázi.
ještě jeden dodatek: pokud používám $_POST k zápisu do databáze tak to zapisuji takhle:
where id='{$_POST['id']}' 

krteczek
PS: vyčetl jsem to z PHP a MySQL Hotová řešení
ash_
Profil
Vyskúšal som to u seba a funguje toto:

tabulka:

CREATE TABLE `tabulka` (
`id` int(6) unsigned NOT NULL auto_increment,
`meno` varchar(20) default NULL,
`priezvisko` varchar(20) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) TYPE=MyISAM;



index.html:


<html>
<head>
</head>
<body>
<form action="spracovanie.php" method=post>
meno:<input type="text" name="meno" value="">
priezvisko:<input type="text" name="priezvisko" value="">
<input type="submit" value="Zapísať">
</form>

</body>
</html>




spracovanie.php (do mysql sa prihlasujem na localhoste ako user bez mena a hesla):

<html>
<head>
</head>
<body>
<?

mysql_connect('localhost') or die(mysql_error());
mysql_select_db('test');

echo "z formulára: meno=$_POST[meno], priezvisko=$_POST[priezvisko]<hr>";

mysql_query("INSERT INTO tabulka(meno, priezvisko) VALUES ('$_POST[meno]', '$_POST[priezvisko]')") or die(mysql_error());

$vysledok=mysql_query("SELECT meno, priezvisko FROM tabulka");

echo "z databázy:<br>";
while ($riadok=mysql_fetch_array($vysledok)) {
echo "meno=$riadok[meno], priezvisko=$riadok[priezvisko]<br>";
}

?>
<hr><a href="index.html">ďalšie zadávanie</a>
</body>
</html>
edm
Profil *
JOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooo!!!!!!!!!!!!!!!!!!!!!!!! !!!!
Je to tam!!!!Díky šéfe, kdybys byl někde ve středočeským kraji, koupil di minimálně plzeň!!!
=]
(takže to byly ty uvozovky, co?)


každopádně všem dík za pomoc v vyřešení tohodle problému, na kterým jsem se zasek.
ASH!!máš to u mě.
Anonymní
Profil *
To ash_: nevím jak máš nastavený lokalhost a jakou verzi lokalhostu používáš, ale ten zápis co používáš je na normálních hostinzich a na většině špatný ( musí se nastavit něco v php.ini aby to takhle fungovalo. V podstatě je to nestandartní a tudíž nedoporučovaný postup který při přechodu na jiný hosting, nebo přenesení aplikací na novější verzi php nebude bez zásahu fungovat
PS: pokud se mýlím, tak mne opravte. ( .htaccess neberu jako standartní možnost zprovoznění )

krteczek
ash
Profil
to edm
Rado sa stalo :-)

to krteczek
Čo konkrétne myslíš?
krteczek
Profil
ash: prostě jsem chtěl říct že je dost divné že ti to funguje tak jak jsi to zde publikoval. myslím že kdybysi to hodil někam na web tak máš problém s nefunkčním skriptem
krteczek
ash
Profil
to krteczek

Môžeš to upresniť? Fakt ma to zaujíma. Myslel som si, že je to všetko štandardné.

Ak myslíš mysql_connect, tak samozrejme, že na sieti je nutné špecifikovať všetky parametre.

Ak myslíš konštrukciu OR DIE - tak to mám z oficiálneho manuálu.

Ak myslíš premenné v stringu, to mám tiež z manuálu.

Nič iné mi nenapadá.
krteczek
Profil
ash: myslím konkrétně tohle:
mysql_query("INSERT INTO tabulka(meno, priezvisko) VALUES ('$_POST[meno]' , '$_POST[priezvisko]' )") or die(mysql_error());
prostě ti tam chybí uvozovky, nebo apostrofy správný zápis je $_POST['meno']' nebo ještě lepší : '{$_POST['meno']' }'
krteczek
ash
Profil
to krteczek

nie, apostrofy sa píšu len, keď array premenná nie je vrámci stringu.
Vrámci stringu ti ich PHP nerozparsuje (teda ak ju nedáš do{}).

tu je výpis z manuálu http://sk2.php.net/types.string

<?php
// These examples are specific to using arrays inside of strings.
// When outside of a string, always quote your array string keys
// and do not use {braces} when outside of strings either.

// Let's show all errors
error_reporting(E_ALL);

$fruits = array('strawberry' => 'red', 'banana' => 'yellow');

// Works but note that this works differently outside string-quotes
echo "A banana is $fruits[banana].";

// Works
echo "A banana is {$fruits['banana']}.";

// Works but PHP looks for a constant named banana first
// as described below.
echo "A banana is {$fruits[banana]}.";

// Won't work, use braces. This results in a parse error.
echo "A banana is $fruits['banana'].";

// Works
echo "A banana is " . $fruits['banana'] . ".";

?>
krteczek
Profil
Jenže u proměnné $_POST je rozdíl mezi $_POST[neco] a $_POST['neco']
krteczek
ash
Profil
Ak by si mal nadefinovanú konštantu NECO, tak áno.

Mimo stringu vždy používam $_POST['neco'], to len vrámci stringu $_POST[neco].

Ak použijem $_POST[meno] mimo stringu, PHP zistí, že konštanta neexistuje a predpokladá, že je to $_POST['meno'] a zahlási mi varovanie v error logu:
PHP Notice: Use of undefined constant meno - assumed 'meno' in c:\www\nic\spracovanie.php on line 12

Inak, ak otestujem $_POST[meno]===$_POST['meno'], výsledkom je TRUE (s varovaním v logu)

Preto si myslím, že zápis "Moje meno je $_POST[meno]" je správny.
krteczek
Profil
Dovolím si zde skopírovat část textu z WEBLOGU:http://www.php-weblog.com/archiv/2005/unor/3/nejcastejsi-chyby-zacatec niku-v-php-I.html :
********************************************************************** *************************************************

Když jsme u tohoto tématu, také ještě zmíním tento špatný zápis:

$sql="INSERT INTO komentare (name) VALUES ('$jmena[krestni]')";

Tento zápis sice bude vyhodnocen korektně, protože ‚krestni‘ se bere jako neznámá konstanta, kterou interpret nezná (proměnná ani řetězec to není), která je vyhodnocena jako krestni. Tato vlastnost se dá využít všude v kódu, nicméně se to nedoporučuje.

echo krestni; //vypise krestni


Tento příklad funguje obdobně, neznámá konstanta vyhodnocena jako krestni a to se vypíše. Nicméně není to příliš hezké a navíc si nemůžeme být jisti, že některé z těchto konstant nebude v dalších verzích PHP přiřazena nějaká hodnota a nám z ničeho nic přestanou fungovat skripty.

Proto se doporučuje používat raději toto:

$sql="INSERT INTO komentare (name) VALUES ('{$jmena['krestni']}')";

Ale celé to po vzoru minulé aplikace můžeme vyřešit nejelegantněji takto, i když třeba s menší přehledností (záleží na vkusu autora):

$sql="INSERT INTO komentare (name) VALUES ('".$jmena['krestni']."')";

Podobně to je i s funkcemi v php a proměnnými. Například:

echo "$pocasi";

je skutečně velice odpudivý zápis :).

********************************************************************** ************************************

tolik citace a vlastně i zdůvodnění, proč používat uvozovky nebo apostrofy u proměnných které jsou poli
krteczek
ash
Profil
Vďaka za odkaz, tento blog som nepoznal.
Ale nepresvedčil ma, že
$sql="INSERT INTO komentare (name) VALUES ('$jmena[krestni]')";

je nesprávne. (pripúšťam, že možno pomalšie)


Súhlasím s Jakubom Vranom - komentár č. 9 :
„$jmena[krestni]“ je naprosto korektní zápis a není pravda, že krestni se v této situaci chápe nejprve jako konstanta.

Aj autor PIF v komentári č. 15 uznal, že: ...Uvnitr retezce se konstatny neparsuji...
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.