ugrás a tartalomhoz

A felhasználó értékelhessen

Erold · 2013. Május. 8. (Sze), 18.37
Sziasztok!
Szeretném a segítségeteket kérni.
Szeretnék létrehozni az oldalamon egy olyan opciót ahol a felhasználó értékelheti az oldalon előzőleg adatbázisból kilistázott cikkeket. Aszerint hogy tetszett neki, bepipál egy checkboxot amennyiben nem akkor üresen hagyja. Az adatbázisomban tartozik minden cikkhez ez olyan mező is amely a véleményezést hivatott tárolni. Amit sikerült elérnem hogy létrehozok annyi checkboxot ahány sor találatot épp listázok az adatbázisból. Amennyiben ezek bepipálódnak szeretném az adatbázisban megváltoztatni UPDATE művelettel az adott cikkhez tartozó véleményezés mező értékét. Viszont nem tudom hogy tudnám logikailag összekapcsolni a checkboxot az adott cikkel.
Remélem érthető ez a kicsit bonyolultra sikeredett kérdés, előre is köszi a válaszokat.
 
1

Például úgy, hogy minden

hunkris · 2013. Május. 8. (Sze), 19.30
Például úgy, hogy minden cikknek adsz egy id-t, és GET-ben átadod az id-t a feldolgozó oldalnak, ami alapján már összekapcsolható a cikk a checkbox-szal.
2

form

Poetro · 2013. Május. 8. (Sze), 21.21
<form action="tetszik.php" method="post">
    <fieldset>
        <legend>Cikk 1</legend>
        <input type="hidden" name="id" value="1" />
        <input type="submit" value="Tetszik" />
    </fieldset>
</form>
<form action="tetszik.php" method="post">
    <fieldset>
        <legend>Cikk 2</legend>
        <input type="hidden" name="id" value="2" />
        <input type="submit" value="Tetszik" />
    </fieldset>
</form>
<form action="tetszik.php" method="post">
    <fieldset>
        <legend>Cikk 3</legend>
        <input type="hidden" name="id" value="3" />
        <input type="submit" value="Tetszik" />
    </fieldset>
</form>
<form action="tetszik.php" method="post">
    <fieldset>
        <legend>Cikk 4</legend>
        <input type="hidden" name="id" value="4" />
        <input type="submit" value="Tetszik" />
    </fieldset>
</form>
3

Én a cikkeket úgy generálom

Erold · 2013. Május. 9. (Cs), 08.52
Én a cikkeket úgy generálom egy adatbázisból. Tehát egy ciklus hatására íródnak ki, a checkbox/submit -al együtt, így:
print "<table>";
foreach ($table as $row){
    
    print "<tr>";
   
    foreach ($row as $value){
         
        print "<td>";
        print "$value";
        print "</td>";
    }
        print "<td>";
        print "<input type='checkbox'>";
        print "</td>";
    
    print "</tr>";
}
print "</table>";
Ekkor is működhet az ötleted, ha a táblázat helyére rakom a fieldsetet?
4

Nálam nem működik. Lehet hogy

Erold · 2013. Május. 9. (Cs), 09.43
Nálam nem működik. Lehet hogy a form feldolgozásánál rontok el valamit?
5

nem működik?

Poetro · 2013. Május. 9. (Cs), 09.54
Mi az, ami nem működik? És hogyan dolgozod fel az űrlapot, amit elronhatsz?
6

Az nem működik a mi a célom

Erold · 2013. Május. 9. (Cs), 10.20
Az nem működik a mi a célom volt, hogy az adatbázisban csak annak a cikknek a sora módosuljon ahol rá kattintok a submita. Így dolgozom fel:
if(isset($_POST["ezaz"])) {
  $id = $_POST["id"];  
    $kapcsolat = mysql_connect("localhost","root","ms1234");
        if (!$kapcsolat) {
        die('Nem sikerult kapcsolatot kiepiteni: ' . mysql_error());
                  }
        $adatbazis = mysql_select_db("metasearch",$kapcsolat);
        $sql=" UPDATE `result` SET `relevancia` = '$_POST[id]' ";
        if (!mysql_query($sql,$kapcsolat)) {
            die('Hiba: ' . mysql_error());
        }
        echo "<div class='message'>Sikeres keresés beállítás!</div>";
        mysql_close($kapcsolat);
}
7

csak annak a cikknek a sora

Poetro · 2013. Május. 9. (Cs), 10.39
csak annak a cikknek a sora módosuljon

Ehhez az UPDATE kérést kell úgy módosítanod, hogy raksz bele egy feltételt. Mert jelenleg az összes sort módosítod.

Ui: legközelebb te színezd a kódodat. A szövegdoboz alatt van leírás, hogyan, mellette pedig kényelmi gombok az elvégzéséhez.
8

Igen, de pont ezt a feltételt

Erold · 2013. Május. 9. (Cs), 10.41
Igen, de pont ezt a feltételt nem tudom jelen esetben megadni, és az én checkboxos megoldásomnál sem, mert nincs meg a kapcsolat a submit meg a cikk között. Erre vonatkozott az alap kérdésem, de akkor lehet nagyon rosszul fogalmaztam meg. Erre van valami ötleted?
11

WHERE

Poetro · 2013. Május. 9. (Cs), 10.52
Erre való a WHERE az SQL-ben. A cikk ID-jét úgy is átküldöd.
9

$sql=" UPDATE `result` SET

jgege · 2013. Május. 9. (Cs), 10.50

$sql=" UPDATE `result` SET `relevancia` = '$_POST[id]' "; // szóval a relevancia legyen egyenlő az adott ID-vel? szerintem nem ez kell... :)
Gondolom valami ilyesmit szeretnél:
print "<table>";
foreach ($table as $row){

print "<tr>";

foreach ($row as $value){

print "<td>";
print "$value";
print "</td>";
}
print "<td>";
print '<form action="tetszik.php" method="post">  
    <fieldset>  
        <legend>Cikk 1</legend>  
        <input type="hidden" name="id" value="$value" />  
        <input type="checkbox" name="relev" />
        <input type="submit" name="ezaz" value="Értékelem" /> 
    </fieldset>  
</form>';
print "</td>";

print "</tr>";
}
print "</table>";
if(isset($_POST["ezaz"])) {
	$id = $_POST["id"]; 
	$kapcsolat = mysql_connect("localhost","root","ms1234");
	if (!$kapcsolat) {
		die('Nem sikerult kapcsolatot kiepiteni: ' . mysql_error());
	}
	if(isset($_POST["relev"])){
		$adatbazis = mysql_select_db("metasearch",$kapcsolat);
		$sql=" UPDATE `result` SET `relevancia` =relevancia+1  WHERE id = '$_POST[id]' ";
		if (!mysql_query($sql,$kapcsolat)) {
			die('Hiba: ' . mysql_error());
		}
		echo "<div class='message'>Sikeres keresés beállítás!</div>";
		mysql_close($kapcsolat);
	}
}
* nem teszteltem *

Ez így fura megoldás... Ha normálisat szeretnél akkor inkább tennék egy <a href="ami_kezeli_az_ertekelest.php?cikkid=$value&ertekelem">Tetszik</a>. Remélem ezzel érted, hogy mit szerettem volna :)
10

GET

Poetro · 2013. Május. 9. (Cs), 10.51
GET kéréssel nem illik olyan műveletet csinálni, ami adatot módosít. Főleg mivel több böngésző előtölt oldalakat, ezáltal lehet, hogy több tartalmat megjelöl előre, hogy tetszik. A keresőmotorokról nem is beszélve. Szóval a linket ebben a formában elfelejteném.
13

Jogos

jgege · 2013. Május. 9. (Cs), 11.03
Ebben igazad van, eddig nem kellett értékelős dolgokat csinálnom :) Botok nálam ilyen szempontból nem lennének érdekesek, csak bejelentkezett felhasználónak engedélyezem(készülő félben)/engedélyezném, publikusan nincs sok értelme.

Átgondolva tényleg érdemes Poetro megoldásánál maradni, checkbox is felesleges :)
12

Igen, igazad van, ez így jó

Erold · 2013. Május. 9. (Cs), 10.57
Igen, igazad van, ez így jó lehet. A gond már csak az vele hogy a $_POST[id] értéke az nálam mindig 1 mert ugye a submitokat is úgy generáltam, tehát egyszer tudtam csak megadni a value értékét.
14

Sikerült megcsinálnom a

Erold · 2013. Május. 9. (Cs), 11.05
Sikerült megcsinálnom a megoldásoddal, köszönöm a segítséget. Lehet hogy ez a megoldás így tényleg kissé érdekes, ha lesz időm átalakítom a linkes verzióra.
15

Jaj ne linkesre ne :D Poetro

jgege · 2013. Május. 9. (Cs), 11.22
Jaj ne linkesre ne :D Poetro tényleg jól mondta :)
Mielőtt rossz irányba vinnélek:
print "<table>";  
foreach ($table as $row){  
  
print "<tr>";  
  
foreach ($row as $value){  
  
print "<td>";  
print "$value";  
print "</td>";  
}  
print "<td>";  
print '<form action="tetszik.php" method="post">    
    <fieldset>    
        <legend>Cikk 1</legend>    
        <input type="hidden" name="id" value="$value" />
        <input type="submit" name="ezaz" value="Tetszik" />   
    </fieldset>    
</form>';  
print "</td>";  
  
print "</tr>";  
}  
print "</table>";  
if(isset($_POST["ezaz"])) {  
    $id = isset($_POST["id"])? mysql_real_escape_string($_POST["id"]) :0;  // escape nélkül gyorsan leszednék az oldalad :) 
    $kapcsolat = mysql_connect("localhost","root","ms1234");  
    if (!$kapcsolat) {  
        die('Nem sikerult kapcsolatot kiepiteni: ' . mysql_error());  
    }  
    if(!empty($id)){  
        $adatbazis = mysql_select_db("metasearch",$kapcsolat);  
        $sql=" UPDATE `result` SET `relevancia` =relevancia+1  WHERE id = '$id' ";  
        if (!mysql_query($sql,$kapcsolat)) {  
            die('Hiba: ' . mysql_error());  
        }  
        echo "<div class='message'>Sikeres keresés beállítás!</div>";  
        mysql_close($kapcsolat);  
    }  
}  
16

Nos elkiabáltam ezt a sikeres

Erold · 2013. Május. 9. (Cs), 11.43
Nos elkiabáltam ezt a sikeres megoldást. Kellene még egy kis segítség.
Úgy oldottam meg hogy a submit value értéke ne legyen mindig 1 hogy előzőleg kiolvastattam az adatbázisból az id értéket és ezt adtam meg neki. A többi ua. mint a te kódodban. Elsőre működött azóta nem változattam semmit de már nem jó, nem értem
17

Jó lebontom alapokra onnantól

jgege · 2013. Május. 9. (Cs), 12.13
Jó lebontom alapokra onnantól össze fogod tudni rakni szerintem :)

Amit Poetro írt kicsit módosítva:

<form action="tetszik.php" method="post">  
        <input type="hidden" name="cikk_id" value="1" />
        <input type="submit" name="like_submit" value="Tetszik" />   
</form>
Nem túl szakmai nyelven megfogalmazva: kapunk egy Tetszik "feliratú" submit gombot. Ha rányomsz CSAK azt az adatot küldi el ami a <form></form>-on belül van. Jelen esetben 2 mező értéke fog elmenni
- cikk_id (ez a hidden mező)
- like_submit (ennek az értéke "Tetszik" lesz
Amelyik oldalnak küldi ezeket az adatokat azt az action-ben határozod meg, tehát jelenesetben a tetszik.php kapja ezt a 2 adatot.

Egy cikknek tehát most valahogy így kellene kinéznie

<h3>Cikk 1 címe</h3>
<div>Cikk szövege</div>
<form action="tetszik.php" method="post">  
        <input type="hidden" name="cikk_id" value="1" /> <!-- adott cikk id-je jön value-ba -->
        <input type="submit" name="like_submit" value="Tetszik" />   
</form>
Több cikk:

<h3>Cikk 1 címe</h3>
<div>Cikk szövege</div>
<form action="tetszik.php" method="post">  
        <input type="hidden" name="cikk_id" value="1" /> <!-- adott cikk id-je jön value-ba -->
        <input type="submit" name="like_submit" value="Tetszik" />   
</form>
<h3>Cikk 2 címe</h3>
<div>Cikk szövege</div>
<form action="tetszik.php" method="post">  
        <input type="hidden" name="cikk_id" value="2" /> <!-- adott cikk id-je jön value-ba -->
        <input type="submit" name="like_submit" value="Tetszik" />   
</form>

<h3>Cikk 3 címe</h3>
<div>Cikk szövege</div>
<form action="tetszik.php" method="post">  
        <input type="hidden" name="cikk_id" value="3" /> <!-- adott cikk id-je jön value-ba -->
        <input type="submit" name="like_submit" value="Tetszik" />   
</form>
Tehát, ha cikk2-n belüli 'Tetszik'-re nyomsz akkor a következő adatok mennek át POST-ban:
- cikk_id = 2
- like_submit = Tetszik

tetszik.php-n belül pedig fel kell dolgoznod:
if(isset($_POST["like_submit"])) {    
    $id = isset($_POST["cikk_id"])? mysql_real_escape_string($_POST["id"]) :0;  // escape nélkül gyorsan leszednék az oldalad :)   
    $kapcsolat = mysql_connect("localhost","root","ms1234");    
    if (!$kapcsolat) {    
        die('Nem sikerult kapcsolatot kiepiteni: ' . mysql_error());    
    }    
    if(!emptyempty($id)){    
        $adatbazis = mysql_select_db("metasearch",$kapcsolat);    
        $sql=" UPDATE `result` SET `relevancia` =relevancia+1  WHERE id = '$id' ";    
        if (!mysql_query($sql,$kapcsolat)) {    
            die('Hiba: ' . mysql_error());    
        }    
        echo "<div class='message'>Sikeres keresés beállítás!</div>";    
        mysql_close($kapcsolat);    
    }    
} 
Így mennyire érthető? :)
(ha túl szájbarágós akkor bocs :D)
18

Nem gond a szájbarágósság

Erold · 2013. Május. 9. (Cs), 12.41
Nem gond a szájbarágósság csak azt hiszem nem értettük meg egymást. Az én programomban ezek a bizonyos cikkeket az adatbázisból olvastatom ki dinamikusan mindig változik az értékük, milyen cikkek mennyi cikk... Ehez nekem a submitet és a hiddent is dinamikusan kell mellé generálnom. Tehát, nem tudom én előre megadni hogy a hidden value értéke az adott cikk értékével egyezzen. Ezt is az adatbázisból kellene generálnom, de nem sikerül megfelelően. Na ez itt a gond.
Kiolvasom egy lekérdezéssel a cikkek id-jét átadom egy tömbnek és ahogy generálódik a hidden szeretném ezt sorban átadni neki, de minden esetben csak a tömb utolsó elemét kapja minden hidden value értéke.
$adatbazis = mysql_select_db("metasearch",$kapcsolat);
    $keres = "SELECT `url` FROM `result` WHERE `sword` = ('".$keyword."')";
    $eredmeny = mysql_query($keres) or die("Hiba a kérésben");
   
    $table = array();
    while ($row = mysql_fetch_array($eredmeny, MYSQL_ASSOC)) {
        $table[] = $row;
    }
    mysql_close($kapcsolat);
   
 ?><form method="post" action=""> <?php
   
foreach ($table as $row){
   
    foreach ($row as $value){
        print "$value";
        print"<input type='hidden'name='id' value='$value' />";  
        print"<input type='submit' name='ezaz' value='Tetszik' />";
     }
         
}
print"</form>";

Bocsi nem tudom szinezni a kódot
19

Értjük is egymást meg nem is

jgege · 2013. Május. 9. (Cs), 13.13
Értjük is egymást meg nem is :))) Nem dobhatod az egészet egy formba. Itt épp az a "trükk", hogy egy <form>-hoz egy submit input és a cikkhez tartozó hidden input (id) tartozzon.
SELECT-nél van valami okod, hogy csak az 'url'-t kéred az adatbázistól?

Mindenképpen szeretnéd egy plusz tömbbe bepakolni($table)? :) Úgyis jó csak szerintem így egyszerűbb:
$adatbazis = mysql_select_db("metasearch",$kapcsolat);
    $keres = "SELECT id,`url` FROM `result` WHERE `sword` = ('".$keyword."')";
    $eredmeny = mysql_query($keres) or die("Hiba a kérésben"); 
   
$cikkek = "";
    $table = array();
    while ($row = mysql_fetch_assoc($eredmeny)) {
        $cikkek .= "<form method='post' action=''>
                ".$row['id']."
                <input type='hidden'name='id' value='".$row['id']."' />
                <input type='submit' name='ezaz' value='Tetszik' />
                </form>";
    }
    mysql_close($kapcsolat);
echo $cikkek;   
";
Így...? :)
20

Tökéletes! Köszönöm!

Erold · 2013. Május. 9. (Cs), 13.30
Tökéletes! Köszönöm!