Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
SirShark
HV kasutaja
liitunud: 23.03.2007
|
06.04.2016 16:54:59
PHP ja MYSQL |
|
|
Ma ei taha et keegi mulle kohe õige koodi ette annaks -
Aga mul on vaja teha nö input form, kus asjad pannakse baasi.
Asi on mul valmis.
Probleem 1. tühja välja saab sisestada, ja läheb ka DBsse kirja. DB on struktuurilt Id ja name. Kui ma teen ühe välja tühjana names, ja määran name veeru uniqueks kas sest on tolku? Ning kui on, kas siis ma pean kuidagi nö process.phps seda errorit kuidagi handlima ka?
Ma ei tea php error handlimisest midagi, ehk saab keegi suunata probleemi lahenduse poole?
Tänud, sir.
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
06.04.2016 18:29:53
|
|
|
Ei, veel ei proovinud, ma ei kipu uskuma, et lahendus oleks nii lihtne.
Edit töötab.
Aga kas sellisena, tekkiv SQL error, ei anna võimalust sql injectioniks? Kui nüüd arendushügieenist rääkida?
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
06.04.2016 23:45:14
|
|
|
Nii, kuna mul on HTML lehed tehtud - siis mul on küll rumal küsimus, mul on tehtud hetkel HTML leht kus on siis lisatud input form , mille actioniks on siis process.php - mis sisaldab siis SQLi ühendumist, ja andmete sisestamist- OOPi vaatenurgast peaks vist olema eraldi- connect.php näiteks ja siis insert.php ?
Aga mul on küsimus, mis on võtmesõnaks, et see kinnitus, et andmete sisestus õnnestus - hetkel peale submit buttonit muljudes, suunabki lehe process.phple, ja kogu lugu...aga mul oleks tarvis et ta kuvaks seda samal lehel.
<?php
<?php
// Tegutse siis kui post pole tühi
if ( ! empty( $_POST ) ) {
// ühendumine SQLi
$mysqli = new mysqli( '****', '*****', '*****', '****' );
// Kontroll, et ühendus toimib
if ( $mysqli->connect_error ) {
die( 'Connect Error: ' . $mysqli->connect_errno . ': ' . $mysqli->connect_error );
}
// Andmete sisestus
$sql = "INSERT INTO osalejad ( kasutajatunnus ) VALUES ( '{$mysqli->real_escape_string($_POST['kasutajatunnus'])}' )";
$insert = $mysqli->query($sql);
// Vastuse kuvamine SQList
if ( $insert ) {
echo "Registreeritud!";
} else {
die("Registreerumine ebaõnnestus");
}
// Ühenduse sulgemine
$mysqli->close();
}
?>
|
HTMLis ongi lihtsalt post form actioniga sellele failile.
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
sakinaga
HV Guru
liitunud: 30.08.2006
|
06.04.2016 23:52:48
|
|
|
mysql andmebaasi info pane eraldi php faili, millel on piiratud õigused ja mille included vajadusel. Kui registreerimine ebaõnnestus, siis ühendust ei suleta.
|
|
Kommentaarid: 159 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
151 |
|
tagasi üles |
|
 |
s0wh4t?
HV vaatleja
liitunud: 18.02.2013
|
07.04.2016 22:44:04
|
|
|
Tegin veits ümber. Nii on õigem teha.
db.php lisa $db = mysqli_connect
<?php
include ("db.php");
if(isset($_POST["submit"])) {
$nimi = $_POST["nimi"];
$dbn = mysqli_real_escape_string($db, $nimi);
$dbc = mysqli_query($db, "SELECT * FROM kasutajad WHERE kasutajanimi='".$nimi."'");
if (mysqli_num_rows($dbc) > 0) {
echo 'Viga: Kasutajanimi juba kasutuses/Viga registeerimisel';
} else {
$query = mysqli_query($db, "INSERT INTO kasutajad (kasutajanimi) VALUES ('$dbn')");
echo 'Olete registeeritud.';
}
}
?>
<form method="post" action="">
Nimi
<input name="nimi" type="text" class="nimi"/>
<input type="submit" name="submit" value="Registreeru" />
</form> |
|
|
tagasi üles |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
08.04.2016 12:11:18
|
|
|
mysqli_real_escape_string() välkundit võiks siiski SELECT puhul ju ka kasutada
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
10.04.2016 14:00:33
|
|
|
Nii, sellega ma sain hakkama.
Aga
Mul on tabel osalejad siis, ja lan_brackets nimeline tabel, mille struktuuriks on id ja võiks öelda et tekst.
Mul oleks vaja võtta siis andmebaasist kõik nimed, ja segada need sellisele kujule
{"teams":[["Nimi1","Nimi2"],["nimi3","nimi4"]]} ja niimoodi neid paare tehtaks, kuniks on nimed kõik kasutusel.
Ma saan oma andmed loetud arraysse, ega ma jään hätta seal, et saaksin sellise tsükli tehtud, et tulemuseks oleks:
$stm='{"teams":[["row[0]","row[1]"],["row[2]","row[3]"]]}'
Ideaalis oleks nad veel kuidagi randomina sinna statementi pandud.
Asja eesmärk oleks siis saada lõpuks teha selline päring:
INSERT INTO `lan_brackets`('text') VALUES ($stm)
Sai vist nüüd maru segane kamarajura:D
edit: Array emplode, ja mingi regex üritada välja mõelda?
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
s0wh4t?
HV vaatleja
liitunud: 18.02.2013
|
11.04.2016 17:14:14
|
|
|
Renka kirjutas: |
mysqli_real_escape_string() välkundit võiks siiski SELECT puhul ju ka kasutada |
Nõustun sinuga. Kerge näpukas, ei kontrollinud üle.
SirShark kirjutas: |
Nii, sellega ma sain hakkama.
Aga
Mul on tabel osalejad siis, ja lan_brackets nimeline tabel, mille struktuuriks on id ja võiks öelda et tekst.
Mul oleks vaja võtta siis andmebaasist kõik nimed, ja segada need sellisele kujule
{"teams":[["Nimi1","Nimi2"],["nimi3","nimi4"]]} ja niimoodi neid paare tehtaks, kuniks on nimed kõik kasutusel.
Ma saan oma andmed loetud arraysse, ega ma jään hätta seal, et saaksin sellise tsükli tehtud, et tulemuseks oleks:
$stm='{"teams":[["row[0]","row[1]"],["row[2]","row[3]"]]}'
Ideaalis oleks nad veel kuidagi randomina sinna statementi pandud.
Asja eesmärk oleks siis saada lõpuks teha selline päring:
INSERT INTO `lan_brackets`('text') VALUES ($stm)
Sai vist nüüd maru segane kamarajura:D
edit: Array emplode, ja mingi regex üritada välja mõelda? |
Eem... Saad natuke paremini lahti seletada? Ma ei saa päris täpselt aru. Võid näidata mis sul tehtud on.
|
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
12.04.2016 12:54:06
|
|
|
Proovin seletada.
Teen baasist päringu Select name from osalejad;
Loen selle arraysse. nimetagem seda row[] 'ks
ja nüüd tahan moodustada stringi
$stm='{"teams":[["row[0]","row[1]"],["row[2]","row[3]"]]}'
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
12.04.2016 13:38:47
|
|
|
jnt, põhimõtteliselt küll. ainus häda on selles, json encode ei tee seda selliseks nagu mul vaja on
mikk36, ma ei saa kahjuks neist näidetest vähemalt esmapilgul aru, serialize puhul siis. aga ma proovin süveneda.
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
12.04.2016 13:53:26
|
|
|
SirShark, kui ei tee selliseks nagu vaja, siis pead ise kirjutama sobiva funktsiooni.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
12.04.2016 14:03:40
|
|
|
Array struktuur peab muidugi õige olema enne json_encode'i. Selle osas aga ei ole nendel stringi kujule lahkamised kuidagi seotud sellega.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Rauno266
Kreisi kasutaja
liitunud: 03.07.2009
|
12.04.2016 14:15:33
|
|
|
Ma näiteks loopiksin üle selle $row.
Midagi sellist:
$teams = '{"teams":[';
for ($i = 0; $i < count($row); $i++){
if ($i != 0){
$teams .= ',';
}
$teams .= '["' . $row[$i] . '","' . $row[++$i] . '"]';
}
$teams .= ' ]}'. |
|
|
Kommentaarid: 45 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
41 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
12.04.2016 15:39:12
|
|
|
jnt kirjutas: |
SirShark, ilmselt ei sööda sa talle ise sisse sellist array'd, nagu vaja. |
Kurat, sinna see koer ongi maetud.
Viimane loll küsimus
Spoiler 
<?php
include("connect.php");
?>
<html>
<head>
<title>jQuery Tournament Brackets</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
<script type="text/javascript" src="js/jquery.bracket.js"></script>
<script type="text/javascript" src="js/jquery.json-2.3.min.js"></script>
<?php
if($_GET['tid'])
{
$q = "SELECT * FROM lan_brackets WHERE tid = " . $_GET['tid'];
$r = mysql_query($q) or die(mysql_error());
$data = mysql_fetch_assoc($r);
$json = $data['json'];
if(!empty($json))
echo '<script type="text/javascript">var autoCompleteData = '.$json.'</script>';
else
echo '<script type="text/javascript">var autoCompleteData = {
teams : [["Devon", ""],["", ""]], results : []}</script>';
}
else
echo '<script type="text/javascript">var autoCompleteData = {
teams : [["Devon", ""],["", ""]], results : []}</script>';
if($_GET['secretMode'] == "admin")
{ ?>
<script type="text/javascript" src="js/brackets.js"></script>
<?php }
else
{ ?>
<script type="text/javascript" src="js/brackets-rd.js"></script>
<?php } ?>
<link rel="stylesheet" type="text/css" href="css/jquery.bracket.css" />
</head>
<body>
<?php
if($_GET['secretMode'] == "admin")
{
$q = "SELECT * FROM lan_tournaments";
$r = mysql_query($q) or die(mysql_error());
while($data = mysql_fetch_assoc($r))
{
echo '<a href="brackets.php?secretMode=admin&tid='.$data['id'].'">'.$data['name'].'</a><br />';
}
}
?>
<div id="autoComplete"></div>
<?php
if($_POST['data'] && $_GET['tid'] != 0 && $_GET['secretMode'] == "admin")
{
$tid = $_GET['tid'];
$json = $_POST['data'];
$q = "SELECT * FROM lan_brackets WHERE tid = " . $tid;
$r = mysql_query($q) or die(mysql_error());
if(mysql_num_rows($r) == 0)
$q = "INSERT INTO lan_brackets (tid, json)
VALUES ('".$tid."', '".$json."')";
else
$q = "UPDATE lan_brackets SET json = '".$json."' WHERE tid = " . $tid;
$r = mysql_query($q) or die(mysql_error());
}
?>
</body>
</html>
|
Ülalolevas koodis, tahaks ma nii teha, et ma saaks kutsuda kui tava bracketi kuvamist funktsioonina, ja samas ka adminni funktsioonina? On selline asi teostatav, või mitte?
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
sakinaga
HV Guru
liitunud: 30.08.2006
|
12.04.2016 15:44:05
|
|
|
Palun selgita enda probleemi arusaadavamalt, absoluutselt ei saa aru, mida teha soovitakse.
_________________ Tsensuur HinnaVaatluse foorumis |
|
Kommentaarid: 159 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
151 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
12.04.2016 22:16:11
|
|
|
Rauno266 kirjutas: |
Ma näiteks loopiksin üle selle $row.
Midagi sellist:
$teams = '{"teams":[';
for ($i = 0; $i < count($row); $i++){
if ($i != 0){
$teams .= ',';
}
$teams .= '["' . $row[$i] . '","' . $row[++$i] . '"]';
}
$teams .= ' ]}'. |
|
Selline loop vähemalt ei tööta - ma kahtlen et saab niimoodi massiivist PHPs stringi luua.
Mikk, hetkeseseisuga tahaks nii, et kui keegi tuleb minudomeen.com, näeb ta bracketsit, aga tahaks teha kuidagi nii, et get_bracket() ja get_bracketAdmin() ina, ja need lihtsalt kutsuda koodis ette.
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
12.04.2016 22:57:10
|
|
|
SirShark, siis unusta ära see vaheteema, mõtle välja mis kujule sul info saada vaja on. Kas sul liigub info algformaadis üldse PHP'st väljapoole? Kui kõik piirdub PHP'ga ja see annab kohe lõppformaadi HTML-kujul välja, siis pole neid Arraysid ju üldse millekski muuks vaja keerata.
Ühes funktsioonis/meetodis väljastad array, teises võtad vastu ja asud töötlema. Pole vaja stringiks vahepeal keerata.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
SirShark
HV kasutaja
liitunud: 23.03.2007
|
16.04.2016 16:05:30
|
|
|
sain siis oma JSONi nii lahendatud
Spoiler 
<?php
$sql = "SELECT * FROM `osalejad`;";
$result = $conn->query($sql);
$var = array();
if ($result->num_rows > 0) {
// output data of each row
while ($row = mysqli_fetch_array($result)) {
$var[] = $row["name"];
}
} else {
/// echo "0 results";
}
shuffle($var);
///print_r ($var);
$brack=json_encode($var);
//echo $brack;
$testbrack= json_encode(array_chunk($var,2));
echo $testbrack;
$algus="INSERT INTO `lan_brackets`( `json`) VALUES ";
$algus .= "('{";
$algus .= '"';
$algus .= "teams";
$algus .= '"';
$algus .= ":";
$algus .= $testbrack;
$algus .= "}' )";
echo $algus;
$conn->close();
?>
|
Aga ma tahaks teha , et enne kui ma tiimid tabelisse kannan, et siis oleks mul kontrollitud, et tableis on vähemalt kaheksa inimest, ja kui pole, siis tuleb tsükkel, mis sisestab suvaliselt stiilis vaba mingi number. hetkel ma ei saa aru mis siin invalid query on.
Spoiler 
$suvanumber=rand();
$bar = (string) $suvanumber;
$prii= "vaba" . $bar;
for($i = 0; $i<10; $i++) {
$sql="INSERT INTO osalejad ('name') VALUES ('$prii');";
$result = $conn->query($sql);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
}
?> |
EDIT:
Sain asjad tabelisse tsükliga insertima, aga imelik on see, et asi asi ei lõpeta oma loopi ära, kui paikamääratud tingimus peaks paigas olema
Spoiler 
<?php
include("connect.php");
$id = mysql_result(mysql_query("SELECT MAX(id) FROM osalejad"));
for($i=0; $i<=8; ++$i) {
$suvanumber=rand();
$bar = (string) $suvanumber;
$prii= "vaba2" . $bar;
$sql="INSERT INTO osalejad (name)
VALUES
('$prii')";
$result = $conn->query($sql);
if (!$result && $id=8) {
die('Invalid query: ' . mysql_error());
}
}
}
?> |
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
29 |
|
tagasi üles |
|
 |
|