Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Master_of_Puppets
Posted
php-nak van elmentve?

Szerveren fut php?

Csináltam már néhány php progit és az mind működött csak ezzel szenved

 

De, hogy örüljetek van egy másik kérdésem:

Ez:

<?php
foreach( $_SERVER as $kulcs=$ertek ) {
      print "\$_SERVER[\"$kulcs\"] == $ertek<br />";
}
?>

Mért nem működik???

Posted

Helyes használat:

foreach( $_SERVER as $kulcs => $ertek )

Bár nem hiba, de nem értem, hogy a 2. sorban miért van dupla egyenlőségjel, ha azt csak kiiratod ? :hááát:

Master_of_Puppets
Posted

Ja, így már működik. Köszi! :)

Posted

Sziasztok!

Megint itt! :)

Most a következõt szeretném megoldani:

checkbox-al kijelölök több elemet és egy gomb megnyomásával kívánom azt egy sql adattáblába bevinni persze egyenként, hisz mindegyik bejelölt adat más és más rekordhoz tartozik.

Ez POST-al megoldható?

Gondolom tömbben kéne, valahogy átvinnem az sql-t iró részbe a kijelölt adatokat.

De hogy?

Köszi!

Posted

A POST-tal elküldött adatok már eleve egy $_POST tömbbe kerülnek. Minden checkbox-nak adsz egy "name" attribútumot. Ezek után az értéke (value) az $_POST['name']-mel lesz egyenlõ. A "name" helyére természetesen a megfelelõ nevet kell helyettesítsd.

Posted

Ahol feldolgozod a form adatait, annak a lapnak az elejére raksz egy ilyet:

<?php
print_r($_POST);
>?

Látni fogod milyen nevekkel, milyen adatok jönnek. Annak függvényében már megtudod írni, hogy mit hova rakjon a script.

Posted

Megnéztem

Valahol ott hibázok, hogy egy while ciklussal iratom ki a checkboxokat és a hozzátartozó értékeket.

Így jelenitem meg az sql tábla adatait és minden rekordhoz egy checkboxot adok, de mindenk ugye különbözõ név kellene. Én ezt nem oldottam meg és így csak az utolsónak bejelölt értéket viszi át.

 

<?php
         while($tomb=mysql_fetch_array($eredmeny))
         {
            $cim=$tomb['cim'];
            $hossz=$tomb['hossz'];
            $kategoria=$tomb['kategoria'];
            $id=$tomb['ID'];
            ?>
            <form method="POST" action="">
            <tr>
              <td align="center" valign="center">
              <input type="checkbox" name="mit" <?php echo "value=$id"; ?> >
              </td>
              <?php
              print "<td>$cim</td><td>$hossz</td><td>$kategoria</td></tr>";
          }
          <input type="submit" name="atad" value="OK" >
         </t>
         <input type="reset" name="rgomb" value="MÉGSEM" >
         </form>
          ?>

 

Ez a kiragadott rész a kódból ahol atad gomb megnyomásával kéne átadnom a be jelölt értékeket

name="mit" -nél lehet a gond, mivel minden bejelölés felülirja az elõzõt.

Ezt hogyan lehetne megoldani?

Posted

:nyíl: Először is olyan záró tag, hogy </t> nincsen. Hol is van a táblázatod? Mert én nem látok itt olyat hogy <table> . A nélkül viszont nehéz a sorait megadni, és lezárni is. ;)

:nyíl: Másodszor pedig a checkbox neve mindig ugyanaz marad, ahányszor kiiratod, ezzel így semmire sem mész.

 

Tehát, szükséged van egy mezőre az adatbázisban, amely az egyes checkbox-ok neveit is tárolja. Ez a legtisztább megoldás, mert ugyanannyi "name" érték lesz, mint ahány "value", vagyis ahány rekord a táblában.

Posted

A php forrás még sok egyebet is tartalmaz ezért akartam csaka kiragadott résszel illusztrálni a dolgot.

De akkor megpróbálok egy olyat csinálni belõle amibe nem zavar be a többi rész és a táblázat is benn van:

 

<html>
<head>
<title>Filmek törlése</title>
<link href="stilus.css" type=text/css rel=stylesheet title=ind>
</head>
<body class="index">
<table border="0" bordercolor="#FFFFFF" width="100%" height="100%">
<tr class="menu" align="right" height="5%">
  <td valign="top">
  Itt eredetileg egy menûsor van
  </td>
</tr>
<tr class="focim" align="center" height="10%">
  <td valign="top">
  Filmek törlése
  </td>
</tr>
<tr align="center">
  <td valign="top">
    <table class="menu" border="1" cellpadding="0" cellspacing="0" 
    style="border-collapse:collapse" bordercolor="#FFFFFF" width="80%">
    <?php
    include "config.php";
    $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass);
    mysql_select_db($dbname,$kapcsolat) or die(mysql_error());
    $sql="select * from filmek order by cim";
    $eredmeny1 = mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($eredmeny1)>0)
    {
      print "<tr><th></th><th>Cím</th><th>Hossz</th><th>Kategória</th></tr><br/>"; 
      while($tomb=mysql_fetch_array($eredmeny1))
      {
        $id=$tomb['filmID'];
        $cim=$tomb['cim'];
        $hossz=$tomb['hossz'];
        $kategoria=$tomb['kategoria'];
        ?>
        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" <?php echo "value=$id"; ?> >
          </td>
        <?php
        print "<td>$cim</td><td>$hossz</td><td>$kategoria</td></tr>";
      }
    }
    else
    {
      ?>
      <tr class="uzenet" align="center">
        <td valign="top">   
        Jelenleg üres a filmtár
        </td>
      </tr> 
      <?php
    }
    ?>
    </table>
  </td>
</tr>
<tr align="center">
  <td>
  <input type="submit" name="ok" value="OK" >
  <input type="reset" name="rgomb" value="MÉGSEM" >
  </form>
  </td>
</tr>
<tr class="menu">
  <td colspan="3">
<?php
if (isset($_POST['ok']))
{
  $film=$_POST['mit'];
  include "config.php";
  $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass);
  mysql_select_db($dbname,$kapcsolat) or die(mysql_error());
  $sql="delete from filmek where convert(filmek.filmID USING utf8)='".$film."'";
  $eredmeny2 = mysql_query($sql) or die(mysql_error());
  if($eredmeny2>0)
  {
      print "Film törölve!";
  }
  else
  {
      print "Sikertelen törlés!";
  }
}
?>
  </td>
</tr>
<tr class="menu" align="center" height="10%">
  <td valign="bottom">
  Itt eredetileg egy alsó felirat van
  </td>
</tr>
</table>
</body>
</html>

 

Köszi, hogy segítesz!

Posted

Ne ezt idézd be. A HTML-kimenetet, vagyis az oldal forrását (Firefox-ban Ctrl+U ) idézd be kezdetnek, mivel HTML-gondod is van. Próbáljuk kezdetnek azt kilőni. ;) Én a fenti kódot saját szerveren nyilván nem tudom lefuttatni. :hááát:

 

A checkbox "name" problémát változatlanul nem oldottad meg. :!: A nélkül a form nem fog működni.

 

Az include helyes használata (23. sor):

include ("valami.php");

Még egy hiba (30. sor), helyesen:

print "<tr><td>Cím</td><td>Hossz</td><td>Kategória</td></tr><br/>";

Posted

Pont a checkbox miatt kérdeztem a dolgot, mert enm tudok rájönni, hogy azt hogyan kellene megcsinálnom, hogy egyszerre többet kijelölve, mindet átvigye és ne csak az utolsónak jelöltet.

Megpróbáltam azt hogy az adott sor ID-jét (ami egyedi mert kulcs) adom a name értékének

De akkor meg ott áll meg a tudományom, hogy abban a részben ahol az sql táblából törölni akarom a kívánt rekordot, hogyan nyerem ki a POST-olt adatok közül?

Ezt hozza át mondjuk két rekord kijelölésekor:

Array ( [12] => 12 [1] => 1 [ok ]=> OK )

Ebbõl kéne a 12-es és az 1-es ID-jû rekordot törölnöm.

 

De azért itt az oldal forrása:

<html>
<head>
<title>Filmek törlése</title>
<link href="stilus.css" type=text/css rel=stylesheet title=ind>
</head>
<body class="index">
<table border="0" bordercolor="#FFFFFF" width="100%" height="100%">
<tr class="menu" align="right" height="5%">
  <td valign="top">
  Itt eredetileg egy menûsor van
  </td>
</tr>
<tr class="focim" align="center" height="10%">
  <td valign="top">

  Filmek törlése
  </td>
</tr>
<tr align="center">
  <td valign="top">
    <table class="menu" border="1" cellpadding="0" cellspacing="0" 
    style="border-collapse:collapse" bordercolor="#FFFFFF" width="80%">
    <tr><th></th><th>Cím</th><th>Hossz</th><th>Kategória</th></tr><br/>        <form method="POST" action="">
        <tr>

          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=11 >
          </td>
        <td>8. utas a halál</td><td>87</td><td>Sci-fi</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=7 >

          </td>
        <td>Büszkeség és balítélet</td><td>88</td><td>Romantikus</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=10 >
          </td>
        <td>Csillagok háborúja</td><td>105</td><td>Sci-fi</td></tr>        <form method="POST" action="">

        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=4 >
          </td>
        <td>Die Hard 4</td><td>96</td><td>Kaland</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">

          <input type="checkbox" name="mit" value=14 >
          </td>
        <td>Elfújta a szél</td><td>132</td><td>Romantikus</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=6 >
          </td>

        <td>Hair</td><td>87</td><td>Zenés</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=9 >
          </td>
        <td>Karib tenger kalózai</td><td>94</td><td>Kaland</td></tr>        <form method="POST" action="">

        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=12 >
          </td>
        <td>Mekk Elek</td><td>68</td><td>Rajzfilm</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">

          <input type="checkbox" name="mit" value=2 >
          </td>
        <td>Mézga Géza</td><td>88</td><td>Rajzfilm</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=3 >
          </td>

        <td>Rettenthetetlen</td><td>102</td><td>Történelmi</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=1 >
          </td>
        <td>Shrek 3</td><td>98</td><td>Rajzfilm</td></tr>        <form method="POST" action="">

        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=5 >
          </td>
        <td>Sikoly</td><td>89</td><td>Horror</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">

          <input type="checkbox" name="mit" value=13 >
          </td>
        <td>Szombat esti láz</td><td>84</td><td>Zenés</td></tr>        <form method="POST" action="">
        <tr>
          <td align="center" valign="center">
          <input type="checkbox" name="mit" value=8 >
          </td>

        <td>Sztálingrád</td><td>105</td><td>Történelmi</td></tr>    </table>
  </td>
</tr>
<tr align="center">
  <td>
  <input type="submit" name="ok" value="OK" >
  <input type="reset" name="rgomb" value="MÉGSEM" >
  </form>

  </td>
</tr>
<tr class="menu">
  <td colspan="3">
  </td>
</tr>
<tr class="menu" align="center" height="10%">
  <td valign="bottom">
  Itt eredetileg egy alsó felirat van
  </td>
</tr>
</table>

</body>
</html>

Posted
Ezt hozza át mondjuk két rekord kijelölésekor:

Array ( [12] => 12 [1] => 1 [ok ]=> OK )

Ebből kéne a 12-es és az 1-es ID-jű rekordot törölnöm.

 

Bejárod foreach-csel az $_POST tömböt. Feltöltesz egy tömböt ($tomb) csak az értékekkel (az OK-t is levágod), és valahogy így építed fel az SQL-utasítást:

 

$sql = "DELETE FROM tablanev WHERE";
$elemek = count ($tomb);
if ( $elemek > 1 ) {
//utolsó tömbindex
  $lindex = ($elemek - 1); 
//utolsó előtti tömbindex
  $pindex = ($elemek - 2); 
   for ($c = 0; $c <= ($pindex); $c++) {
  $sql .= " id=$tomb[$c] AND";
  }
  $sql .= " id=$tomb[$lindex];";  
} else {
$sql .= " id=$tomb[0];";
}

Előtte persze irasd ki az $sql változó tartalmát, hogy lásd, hogy jó-e az utasítás. ;)

Posted

Szia!

Az sql parancsot nem így kéne lezárnom: "; ?

Posted

Kipróbáltam a kódot de sajnos nem mûködik, nem töröl az adatbázisból.

Pedig kipróbáltam, belép a for ciklusba.

Ki is tudom iratni a törölni kivánt rekordok id-it de törlés az nem hajtódik végre.

Posted

A pontosvesszők a helyükön vannak. Az első sorba ne tegyél egyet se! :!: Mi az $sql tartalma, ha lefut a ciklus? Az $tomb tartalma is érdekelne, remélem nem hagytad meg társításos tömbnek (ahogy az $_POST tartalmazza), mert úgy nehéz lesz...

Posted

Biztos én bénázok!

 

Itt a kód:

<html>
<head>
<title>Filmek törlése</title>
<link href="stilus.css" type=text/css rel=stylesheet title=ind>
</head>
<body class="index">
<table class="menu" border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse" bordercolor="#FFFFFF" width="80%">
<?php
include "config.php";
$kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$kapcsolat) or die(mysql_error());
$sql="select * from filmek";
$eredmeny1 = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($eredmeny1)>0)
{
  print "<tr><th></th><th>Cím</th><th>Hossz</th><th>Kategória</th></tr><br/>"; 
  while($tomb=mysql_fetch_array($eredmeny1))
  {
     $id=$tomb['id'];
     $cim=$tomb['cim'];
     $hossz=$tomb['hossz'];
     $kategoria=$tomb['kategoria'];
     ?>
     <form method="POST" action="">
     <tr>
        <td align="center" valign="center">
        <input type="checkbox" <?php echo "name=$id value=$id"; ?> >
        </td>
        <?php
        print "<td>$cim</td><td>$hossz</td><td>$kategoria</td></tr>";
    }
    ?>
    </table>
        <input type="submit" name="ok" value="TÖRLÉS" >
        <input type="reset" name="rgomb" value="MÉGSEM" >
        </form>
      <?php
    }
    else
    {
      ?>
     </table>
      Jelenleg üres a filmtár
      <?php
    }
    ?>
    <?php
    if (isset($_POST['ok']))
    {
      //$tomb2 eloallitasa
      $j=0;
      foreach($_POST as $seged)
      {
        $tomb1[$j]=$seged;
        $j++;
      }
      $hossz=count($tomb1)-1;
      $tomb2=array_slice($tomb1,0,$hossz);
      include ("config.php");
      $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass);
      mysql_select_db($dbname,$kapcsolat) or die(mysql_error());
      $sql="delete FROM filmek WHERE";
      $elemek = count ($tomb2);
      print "$elemek";
      if ( $elemek > 1 ) 
      {
        $lindex = ($elemek - 1);
        $pindex = ($elemek - 2);
        for ($c = 0; $c <= ($pindex); $c++) 
        {
          $sql .= " id=$tomb2[$c] AND";
        }
        $sql .= " id=$tomb2[$lindex];";  
      } 
      else 
      {
        $sql .= " id=$tomb2[0];";
      }
      $eredmeny2 = mysql_query($sql) or die(mysql_error());
      if($eredmeny2>0)
      {
        print "Film törölve!";
      }
      else
      {
        print "Sikertelen törlés!";
      }
    }
    ?>
</body>
</html>

 

sql-ben semmi változás nem történik ha futtatom a kódot és bejelölök valamit és megnyomom a gombot hogy töröljön. Kiirja hogy a film törölve, de az sql-ben benn marad.

Posted

Van ez a sor:

      $eredmeny2 = mysql_query($sql) or die(mysql_error());

Ezt alakítsd így:

 

print("<br/>Ez a lekérdezésem: ".$sql."<br/>");
      $eredmeny2 = mysql_query($sql) or die(mysql_error());

 

Aztán lássuk mit ír.

Posted

A kiírás:

Ez a lekérdezésem: delete FROM filmek WHERE id=15 AND id=16;

Film törölve!

 

Itt a 15-ös és 16-os id-jû filmet töröltem volna.

Persze semmi nem történt.

Viszont ha csak egyet ejlölök be azt törli is.

 

Közben elgondolkodtam

Miért is használunk AND-et?

Inkább OR-t kellene

Átirtam és így megy!

 

Viszont hogyan alakitsam át ha egy vagy két cella értékét akarom módosítani?

Posted
[...] Inkább OR-t kellene [...]

Ezen (OR) én is gondolkodtam, mikor leírtam, de nem találtam sehol rá példát a ref. manual-ban. Nem tudom, akkor mi az AND értelme konkrét esetben. Olyan sort keres, ahol mindegyik egyedi kulcs megtalálható? Hát azt nehéz lesz... :pislog:

Na, legalább a PHP-kód jó volt. :)

Ha a táblában módosítani akarsz valamit, akkor:

 

UPDATE tablanev SET valtozo1=valtozo2 WHERE feltetel

De konkrét példa kell nekem ahhoz, hogy értelmesen át tudjam írni. ;)

Posted

Köszönöm a segítséged, mert végül is el kellett jutni az AND-ig is onnan már csak egy lépés volt az OR. Az sql paranccsal tisztában vagyok. A probléma ott van, ha több rekordban (persze minden rekordban ugyanazokat ugyanazt a mezőt) akarok változtatni. Tehát elvileg minden sornál be kéne olvastatni a változo1=változo2-t.

 

Valahogy így:

if (isset($_POST['ok']))
{
    $j=0;
    foreach($_POST as $seged)
    {
       $tomb1[$j]=$seged;
       $j++;
    }
    $hossz=count($tomb1)-1;
    $tomb2=array_slice($tomb1,0,$hossz);
    $ma=date("Y-m-d");
    include "config.php";
    $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass);
    mysql_select_db($dbname,$kapcsolat) or die(mysql_error());
    $sql="update filmek ";
    $elemek = count ($tomb2);
     if ( $elemek > 1 ) 
     {
        $lindex = ($elemek - 1);
        $pindex = ($elemek - 2);
        for ($c = 0; $c <= ($pindex); $c++) 
        {
          $sql .= "set be='$ma' WHERE' id=$tomb2[$c] OR";
        }
        $sql .= "set be='$ma' WHERE' id=$tomb2[$lindex];";  
      } 
      else 
      {
         $sql .= "set be='$ma' WHERE' id=$tomb2[0];";
      }
      $eredmeny2 = mysql_query($sql) or die(mysql_error());
      if($eredmeny2>0)
      {
        print "Adat módosítva!";
      }
      else
      {
        print "Sikertelen módosítás!";
      }
}

Posted

Srácok!

Köszönöm mindenkinek a segítséget! Közben az OR-ral megoldottam ezt is csak egy helyen kimaradt egy sor azért nem ment elsőre. Valószinűleg még igénybe veszem a tanácsaitokat, ha nem probléma. Még egyszer köszi mindenkinek!

Jó hétvégét!

Posted

Ugye mondtam, hogy ha kiíratod a $sql tartalmát rájössz a hibára. És így is lett.

 

Posted
Nem tudom, akkor mi az AND értelme konkrét esetben. Olyan sort keres, ahol mindegyik egyedi kulcs megtalálható? Hát azt nehéz lesz... :pislog:

Jó, de nem csak az id mezõket lehet logikai mûveletekbe foglalni. Mutatok egy példát egy szép lekérdezésre, amiben aztán van AND bõven:

 

    $sql = "select p.products_id           as id,
                   m.manufacturers_name    as gyarto,
                   pd.products_name        as nev,
                   p.master_categories_id  as mkatid,
                   c.parent_id             as pkatid,
                   p.products_price        as ar,
                   t.tax_rate              as afa,
                   pd.products_description as leiras,
                   p.products_image        as kep

              from shop_products p,
                   shop_products_description pd,
                   shop_manufacturers m,
                   shop_categories c,
                   shop_tax_rates t

             where p.products_status = '1'
               and p.master_categories_id NOT IN $category_filter
               and pd.products_id  = p.products_id
               and m.manufacturers_id = p.manufacturers_id
               and c.categories_id = p.master_categories_id
               and t.tax_class_id = p.products_tax_class_id 
               and pd.language_id = 2
    
             order by p.products_id";

 

Posted

Azért mondtam, hogy konkrét esetben. Persze aki jártas az SQL-ben, annak nem okozna gondot az, ami miatt én elakadtam. Amit beidéztél szép, ilyen példákból tényleg meg lehet tanulni az SQL-t. :) (Egyetlen gondom az, hogy, hacsak nem állok neki [valamilyen csoda folytán] -- lustaságomat lekûzdve -- pl. egy egyszerûbb webáruház építésének, az ilyet megtanulom, aztán el is felejtem, ahogy van.)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...