» »

Forma, php in mysql

Forma, php in mysql

Highlag ::

Malček se za lastno uporabo igram z bazo, formami ...
Rad bi naredil en preprost urejevalnik tabele, ki se nahaja v mysql bazi.
Našel sem en primer nečesa, kar bi mi bilo pisano na kožo vendar zadeva žal ne deluje.

Po opisu sodeč, bi zadeva morala zrisati eno tabelo, katere vrednosti celic bi se lahko urejalo oziroma zbrisalo. Žal se mi zadeva zatakne pri tejle vrstici:
echo("<a href="%s?id=%s">%s %s</a> n", $PHP_SELF, $myrow["id"], $myrow["first"], $myrow["last"]);

Natančneje napaka javi, da je enačaj preveč. Žal mi ravno tale vrstica ni popolnoma jasno kaj čara. Razumem, da bi morala izpisati povezavo na vsebino, ne pa točno detajlov oziroma kaj naj bi recimo %s?id=%s %s naredilo.

Zadevo testiram na xampp serverju na mojem računalniku, ki kot kaže deluje.
Zadeva ne bo javno dostopna, zato se z varnostjo trenutno ne obremenjujem preveč.

Je kakšen junak, ki bi lahko pomagal?

Še cela koda:
<html>
<body>
<?php
$db = mysql_connect('localhost', 'ime', 'geslo')or die('Priklop neuspešen: ' . mysql_error());
mysql_select_db("mydb",$db)or die('Ne morem izbrati želene baze podatkov');
if ($submit) { 
// here if no ID then adding else we're editing
if ($id) { $sql = "UPDATE employees SET first='$first',last='$last',address='$address',position='$position' WHERE id=$id";} 
else { $sql = "INSERT INTO employees (first,last,address,position) VALUES ('$first','$last','$address','$position')"; }
// run SQL against the DB
$result = mysql_query($sql);
 echo "Record updated/edited!<p>";
} elseif ($delete) {

 // delete a record
 
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysql_query($sql);
echo "$sql Record deleted!<p>";
} else {
// this part happens if we don't press submit
if (!$id) 
	{
		// print the list if there is not editing
		$result = mysql_query("SELECT * FROM employees",$db);
		while ($myrow = mysql_fetch_array($result)) 
			{ 
			echo("<a href="%s?id=%s">%s %s</a> n", $PHP_SELF, $myrow["id"], $myrow["first"], $myrow["last"]);
			echo("<a href="%s?id=%s&delete=yes">(DELETE)</a><br>", $PHP_SELF, $myrow["id"]);
			}
	}
?>
<P>
<a href="<?php echo $PHP_SELF?>">ADD A RECORD</a>
<P>
<form method="post" action="<?php echo $PHP_SELF?>">
 
 <?php
if ($id) {

// editing so select a record

$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];

// print the id for editing
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<?php
}
?>
First name:<input type="Text" name="first" value="<?php echo $first ?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $last ?>"><br>
Address:<input type="Text" name="address" value="<?php echo $address ?>"><br>
Position:<input type="Text" name="position" value="<?php echo $position ?>"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
}
?>
</body>
</html>
Never trust a computer you can't throw out a window

Fuks ::

Kot vidim sta z vrstico 2 težavi:

1. Sintaksa (te %s) je od printf. Torej zamenjaj echo z printf.
2. Notri maš narekovaje, ki bi jih blo treba escapeat. Torej narekovaje (razen krajnih) zamenjat z \".

Like this:
printf("<a href=\"%s?id=%s\">%s %s</a> n", $PHP_SELF, $myrow["id"], $myrow["first"], $myrow["last"]);

Zgodovina sprememb…

  • spremenilo: Fuks ()

Highlag ::

Hvala za odgovor.
Čeprav samo gledam..... ;((

printf razumem, %s je spremenljivka string.Kaj naj bi posamezni %s vsebovali mi je tudi jasno. (Vrednosti, ki so definirane izven povezave).

Drugo vrstico sem predelal takole:
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><br>", $PHP_SELF, $myrow["id"]);

Sedaj se nekaj izriše vendar dobim en kup opozoril o nedefiniranih spremenljivkah.
(submit, delete, id, PHP_self,)

Kjer so izrisane povezave se potem ko se zapeljem z miško čez izpiše naslov:
http://localhost/test.php?id=1
oziroma 2; če vrstica z delete gumbom pa
http://localhost/test.php?id=1&delete=yes


Bi moral spremenljivke kako definirati? Čeprav sem bral, da se definirajo sproti??

Moti me tudi, da so vsi prelomi čudni. Izgledajo takole:
<br />

Ni mi jasno od kje se znajde tisti znak / v kodi?
Never trust a computer you can't throw out a window

Fuks ::

Tole verjetno itak ni več in.

Namesto $PHP_SELF uporabi raje $_SERVER['PHP_SELF'], ker mislim da gre $PHP_SELF ven iz uporabe (čeprav pri tebi očitno še dela).

Submit ni definirana pri preverjanju pogoja v 6. vrstici. Podobno velja za delete in id.
Tvoja skripta verjetno zahteva da je vklopljen REGISTER_GLOBALS. To je sistem, ki vse spremenljivke tipa get pretvori v globalne spremenljivke.
Tako dostopaš do $_GET['delete'] kar z $delete.

Uporaba tega je sicer slaba praksa. Jaz bi to izklopil in sam definiral $delete takole:
$delete = $_GET['delete']

Lahko dodaš še preverjanje definiranosti.
$delete = (isset($_GET['delete'])?$_GET['delete']:false)

Za
pa ne skrbi. Mislim da je po HTML standardih takole s slashem še bolj pravilno.

technolog ::

Za
pa ne skrbi. Mislim da je po HTML standardih takole s slashem še bolj pravilno.


Ne, ni še bolj pravilno. Po html standardu ni priporočeno, je pa tolerantno. Po Xhtml standardu pa je obvezno.

Highlag ::

Jah tole kodo sem snel z neta in malo dodeloval. Žal brezuspešno. Kolikor sem brskal se s tem nihče več ne ukvarja?? Vsi vodiči in teme so stare že nekaj let.

Sem potem zadevo rešil z večimi stranimi, ki se po potrebi odprejo.

Me pa večno moti, ker nikjer ne najdem opisov takšnih detajlov kot je recimo uporaba "x" ali 'x', .. Ali pa čisto enostavno kako iz tabele izluščiti eno celico in vsebino izpisati v brskalniku. Primeri, ki podani običajno nimajo uporabljenih spremenljivk ampak imajo vpisane kar vrednosti.

mysql_select_db('baza') or die('Ne morem izbrati želene baze podatkov');
$query1 = 'SELECT  E_naslov FROM Tabela WHERE Ime = "$Vpisal" ';
$result1 = mysql_query($query1) or die('Dostop do tabele neuspešen: ' . mysql_error());
$data=mysql_fetch_assoc($result1);
echo 'Email naslov je:' . $data['E_naslov'];


Spremenljivka $Vpisal drži en ime in priimek (kolona Ime). Vrednost se nahaja v eni vrstici tabele Tabela. V isti vrstici v stolpcu E_naslov je email naslov, ki bi ga rad trenutno rad izpisal.
Never trust a computer you can't throw out a window

technolog ::

Joj, ti bi rad v enem ugrizu pojedel celo kosilo.

Pojdi prosim po korakih v razvoj spletnih strani, ker drugače boš vse pobrkljal.

Highlag ::

Eh ne mislim se it razvoja za web, tole samo za lastno uporabo. Zato se tudi nočem preveč poglabljat v svari, pa me zato zajebavajo...;)
V bistvu čakam tudi eno knjigo, da mi ne treba tule težit. Pa nekaj mečkajo, jaz bi pa malo tipkal.:D
Never trust a computer you can't throw out a window

Tody ::

Pol pa poglej kak video do takrat :) http://marketplace.tutsplus.com/item/-o...

MisterR ::

Offtopic

vi zmeraj uporabljate echo za izpis htmlja v zankah? ne uporabljate PHPja v htmlju ? torej
<a href="<?php ?>"></a>

Fuks ::

Highlag je izjavil:

Jah tole kodo sem snel z neta in malo dodeloval. Žal brezuspešno. Kolikor sem brskal se s tem nihče več ne ukvarja?? Vsi vodiči in teme so stare že nekaj let.

Sem potem zadevo rešil z večimi stranimi, ki se po potrebi odprejo.

Me pa večno moti, ker nikjer ne najdem opisov takšnih detajlov kot je recimo uporaba "x" ali 'x', .. Ali pa čisto enostavno kako iz tabele izluščiti eno celico in vsebino izpisati v brskalniku. Primeri, ki podani običajno nimajo uporabljenih spremenljivk ampak imajo vpisane kar vrednosti.


mysql_select_db('baza') or die('Ne morem izbrati želene baze podatkov');
$query1 = 'SELECT E_naslov FROM Tabela WHERE Ime = "$Vpisal" ';
$result1 = mysql_query($query1) or die('Dostop do tabele neuspešen: ' . mysql_error());
$data=mysql_fetch_assoc($result1);
echo 'Email naslov je:' . $data['E_naslov'];


Spremenljivka $Vpisal drži en ime in priimek (kolona Ime). Vrednost se nahaja v eni vrstici tabele Tabela. V isti vrstici v stolpcu E_naslov je email naslov, ki bi ga rad trenutno rad izpisal.


Enojni narekovaj načeloma prepreči da bi se vsebina ekspandirala (da bi se spremenljivke zamenjale z vrednostmi spremenljivk).

Jaz bi probal takole:

$query1 = "SELECT E_naslov FROM Tabela WHERE Ime='$Vpisal' ";

Ostalo zgleda ok.

techfreak :) ::

Potem raje:
$query1 = "SELECT E_naslov FROM Tabela WHERE Ime='".mysql_real_escape_string($Vpisal)."' ";

keworkian ::

Daj probaj za foro še tako
$qry = mysql_query(sprintf("SELECT E_naslov FROM Tabela WHERE Ime = '%s'", $vpisal));
Spremenljivka $Vpisal drži en ime in priimek (kolona Ime). Vrednost se nahaja v eni vrstici tabele Tabela. V isti vrstici v stolpcu E_naslov je email naslov, ki bi ga rad trenutno rad izpisal.


Če je iz baze ni treba nič mysql_real_escape_string

Zgodovina sprememb…

Highlag ::

Jah narekovaji so rešili težavo..
Never trust a computer you can't throw out a window


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Prosim vas za pomoč pri mysql queryju

Oddelek: Programiranje
131339 (1062) no comment
»

Dependency Injection

Oddelek: Programiranje
71472 (1240) abyssus
»

PHP-Barva texta

Oddelek: Izdelava spletišč
61407 (1305) Road Runner
»

problem z phpjem

Oddelek: Izdelava spletišč
304184 (3597) snow
»

PHP help!

Oddelek: Programiranje
251704 (1542) rc-car

Več podobnih tem