Anime i manga en català

Moderadors: Guiru, Maki

 
Avatar de l’usuari
Dende
Sushinchu
Sushinchu
Entrades: 604
Membre des de: dv. 25 nov. 2005, 22:30
Ubicació: Camp Nou
Contacta:

PHP i MySQL

dl. 01 set. 2008, 15:14

És el primer cop que intento programar en PHP i m'agradaria fer una web on hi hagués validació d'usuaris.

L'error em sorgeix quan entra a la pàgina personal de cada jugador on hi ha un include que enllaça amb un bloc per comprovar que s'hagi validat l'usuari.

Cito els arxius user.php i seg.php

user.php
<?php 
include 'seg.php';
?>
<html>
<head><title>Cromos de <?php echo $_SESSION['User']; ?></title></head>
<body>
<?php
if (!isset($_POST['lista'])) { ?>
   <h1>Cromos de <?php echo $_SESSION['User']; ?></h1>
   <table border="0">
      <tr>
         <td><a href="user.php?lista=faltas">Ver lista de faltas</a></td>
         <td><a href="user.php?lista=repes">Ver lista de repetidos</a></td>
      </tr>
      <tr>
         <td><a href="user.php?lista=modfaltas">Modificar lista de faltas</a></td>
         <td><a href="user.php?lista=modrepes">Modificar lista de repetidos</a></td>
      </tr>
   </table>
<?php
}else{
   if (($_POST['lista'])=="faltas") {
      mysql_select_db("Cromos");
      $query  = "SELECT * FROM Faltas";
      $result = mysql_query($query);// or die ("El usuario no tiene datos sobre esta coleccion")
      ?>
      <table border="0" bgcolor="#CCFFCC">
      <th><td>Número</td><td>Nombre completo del jugador</td><td>Falta o no?</td><td>Envio pendiente de:</td></th>
      <?php
      while($row = mysql_fetch_array($result, MYSQL_ASSOC))
      {
            echo "<tr>";
         echo "<td> {$row['idCromo']} </td><td> {$row['nombrecompleto']}</td><td> {$row['Tengo?']} </td><td>{$row['Pendiente']}</td>";
         echo "</tr>";
      }
   }
}
?>


seg.php
<?php
//Inicio la sesión
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTICADO
if ($_SESSION["sesion"] != "ON") {
//si no existe, va a la página de autenticacion
header("Location: login.php");
//salimos de este script
exit();
}
?>


Surt un error que diu:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/prova/seg.php:2) in /var/www/prova/seg.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/prova/seg.php:2) in /var/www/prova/seg.php on line 8


A veure si em podeu ajudar.

Gràcies!
 
Avatar de l’usuari
Maki
Moderadors
Moderadors
Entrades: 6323
Membre des de: dt. 18 maig 2004, 17:02
Ubicació: Donde-puedo-verte
Contacta:

dl. 01 set. 2008, 15:38

diria que es tracta que el session_start() l'has de fer a la pagina en questió i no pot anar dintre d'un include.
prova de posar-ho a user.php
Imatge
 
Avatar de l’usuari
Dende
Sushinchu
Sushinchu
Entrades: 604
Membre des de: dv. 25 nov. 2005, 22:30
Ubicació: Camp Nou
Contacta:

dl. 01 set. 2008, 17:50

He pogut solucionar allò d'abans, però ara el problema sorgeix al fer la consulta a MySQL amb el while.

El problema que em dóna és:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/prova/user.php on line 37


I l'arxiu user.php sencer:
<?php 
session_start();
if ($_SESSION['Sesion']!="ON"){
   header("Location: login.php");
}

?>
<html>
<head><title>Cromos de <?php echo $_SESSION['User']; ?></title></head>
<body>
<?php
if (!isset($_GET['lista'])) { ?>
   <h1>Cromos de <?php echo $_SESSION['User']; ?></h1>
   <table border="0">
      <tr>
         <td><a href="user.php?lista=faltas">Ver lista de faltas</a></td>
         <td><a href="user.php?lista=repes">Ver lista de repetidos</a></td>
      </tr>
      <tr>
         <td><a href="user.php?lista=modfaltas">Modificar lista de faltas</a></td>
         <td><a href="user.php?lista=modrepes">Modificar lista de repetidos</a></td>
      </tr>
   </table>
<?php
}
else
{
$var=$_GET['lista'];
   if ($var=="faltas"){
      mysql_select_db("Cromos");
      $query  = "SELECT * FROM Faltas";
      $result = mysql_query($query);
      ?>
      <table border="0" bgcolor="#CCFFCC">
      <th><td>Número</td><td>Nombre completo del jugador</td><td>Falta o no?</td><td>Envio pendiente de:</td></th>
      <?php
      while($row = mysql_fetch_row($result))
      {
         $num=$row[0];
         $nom=$row[1];
         $tengo=$row[2];
         $pen=$row[3];            
         echo "<tr>";
         echo "<td>$num</td><td>$nom</td><td>$tengo</td><td>$pen</td>";
         echo "</tr>";
      }
   }
}
?>


Sóc molt nou en PHP i no me'n surto gaire... xD

Gràcies
 
Avatar de l’usuari
Maki
Moderadors
Moderadors
Entrades: 6323
Membre des de: dt. 18 maig 2004, 17:02
Ubicació: Donde-puedo-verte
Contacta:

dl. 01 set. 2008, 18:07

On fas la conexió a la base de dades mysql_connect(database, user, pass) ?

Recorda:
1. Connectar
2. Seleccionar la bbdd
3. Query
4. fetch_row o similar
Imatge
 
Avatar de l’usuari
.:MorPheuS:.
Ushinchu
Ushinchu
Entrades: 1344
Membre des de: dg. 08 gen. 2006, 12:17
Ubicació: Barcelona
Contacta:

dl. 01 set. 2008, 18:12

És possible que no t'hagis connectat correctament a la base de dades. Et suggereixo que facis quelcom com això:

if ($row = mysql_fetch_row($res))
{
...
}
else
{
print (mysql_error());
}

Així potser t'orientaràs millor. Ànims!

EDIT: fes el que et diu el Maki xD
Imatge
 
Avatar de l’usuari
Dende
Sushinchu
Sushinchu
Entrades: 604
Membre des de: dv. 25 nov. 2005, 22:30
Ubicació: Camp Nou
Contacta:

dl. 01 set. 2008, 18:13

Maki ha escrit:
On fas la conexió a la base de dades mysql_connect(database, user, pass) ?

Recorda:
1. Connectar
2. Seleccionar la bbdd
3. Query
4. fetch_row o similar


La connexió la faig al validar el login. S'ha de fer dos cops?
 
Avatar de l’usuari
Maki
Moderadors
Moderadors
Entrades: 6323
Membre des de: dt. 18 maig 2004, 17:02
Ubicació: Donde-puedo-verte
Contacta:

dl. 01 set. 2008, 18:24

a cada pagina, sempre que es vol consultar dades, s'ha de conectar. Quan no necessitis més la conexió, allibera-la amb un mysql_close();
Imatge
 
Avatar de l’usuari
Mad93
Moderadors
Moderadors
Entrades: 5850
Membre des de: dj. 27 nov. 2003, 20:00
Ubicació: Vivint a la universitat ><
Contacta:

dl. 01 set. 2008, 18:49

A veure, les sessions SEMPRE s'han d'obrir al principi, abans d'enviar qualsevol tipus de codi al navegador, sinó diu aquest error.

Hi ha dues solucions, o tens control del servidor i fas que primer el servidor generi la plana i després l'enviï (el servidor ja ho enviarà en l'ordre correcte) o fas que la sessió sempre s'iniciï al principi de tot.
Imatge
Tant avorrit que m'he fet un bloc... un més. Servidor mig online...
 
Avatar de l’usuari
Dende
Sushinchu
Sushinchu
Entrades: 604
Membre des de: dv. 25 nov. 2005, 22:30
Ubicació: Camp Nou
Contacta:

dt. 02 set. 2008, 15:19

Jo pensava que només calia obrir-los un cop i llavors iniciant sessió n'hi havia prou.

Ara tinc un altre problema. El que vull és actualitzar una taula de la base de dades que tinc mitjançant un formulari. Aquest formulari conté checkboxes que serveixen per saber si tens un cromo o no. També conté una columna on hi ha inputs de text per escriure unes dades.

El problema sorgeix al rebre altre cop les dades per post. No sé com agafar-les ni com saber si el checkbox estava activat o no.

Us deixo el codi del fitxer user.php:

<?php
include 'conexion.php';
session_start();
if ($_SESSION['Sesion']!="ON"){
   header("Location: login.php");
}

?>
<html>
<head><title>Cromos de <?php echo $_SESSION['User']; ?></title>
<script language="javascript">
function refrescar()
{
location.reload()
}
</script></head>
<body>
<?php
if (!isset($_GET['lista'])) { ?>
   <h1>Cromos de <?php echo $_SESSION['User']; ?></h1>
   <table border="0">
      <tr>
         <td><a href="user.php?lista=faltas">Ver lista de faltas</a></td>
         <td><a href="user.php?lista=repes">Ver lista de repetidos</a></td>
      </tr>
      <tr>
         <td><a href="user.php?lista=modfaltas">Modificar lista de faltas</a></td>
         <td><a href="user.php?lista=modrepes">Modificar lista de repetidos</a></td>
      </tr>
      <tr>
         <td><a href="user.php?lista=llenarlista">Llenar lista de cromos</a></td>
      </tr>
   </table>
<?php
}
else
{
$var=$_GET['lista'];
   if ($var=="faltas"){
      $query  = "SELECT * FROM Faltas";
      $result = mysql_query($query);
      ?>
      <h2>Faltas de Mundicromo</h2>
      <table cellpadding="5" cellspacing="5">
      <th><td>Nombre completo del jugador</td><td>Envio pendiente de:</td></th>
      <?php
      while($row = mysql_fetch_row($result))
      {
         $num=$row[0];
         $nom=$row[1];
         $tengo=$row[2];
         $pen=$row[3];
         if ($num/2==0){
            $color="#CCFFCC";
         } else {
            $color="#FFFF99";
         }
         if ($tengo==0) {
            echo "<tr>";
            echo "<td align=center bgcolor=$color>$num</td><td align=center bgcolor=$color>$nom</td>" .
            "<td align=center bgcolor=$color>$pen</td>";
            echo "</tr>";
         }
      }
      echo "</table>";
   }
   if ($var=="repes")
   {
      $query  = "SELECT * FROM Repes";
      $result = mysql_query($query);
      ?>
      <h2>Repes de Mundicromo</h2>
      <table cellpadding="5" cellspacing="5">
      <th><td>Apellidos</td><td>Nombre</td><td>Veces repetido</td><td>Enviando a:</td></th>
      <?php
      while($row = mysql_fetch_row($result))
      {
         $num=$row[0];
         $apellidos=$row[2];
         $nom=$row[1];
         $veces=$row[3];
         $envio=$row[4];
         if ($num/2==0){
            $color="#CCFFCC";
         } else {
            $color="#FFFF99";
         }
            echo "<tr>";
            echo "<td align=center bgcolor=$color>$num</td><td align=center bgcolor=$color>$apellidos</td>" .
            "<td align=center bgcolor=$color>$nom</td><td><td align=center bgcolor=$color>$veces</td>".
            "<td align=center bgcolor=$color>$envio</td>";
            echo "</tr>";
      }
      echo "</table>";
   }
   if ($var=="modfaltas")
   {
      if (!isset($_POST['add']))
      {
      $query  = "SELECT * FROM Faltas";
      $result = mysql_query($query);
      $count=mysql_num_rows($result);
      ?>
      <h2>Faltas de Mundicromo</h2>
      <table cellpadding="5" cellspacing="5">
      <form name="f" method="post" action="user.php?lista=modfaltas">
      <th><td>Seleccionar</td><td>Apellidos</td><td>Nombre</td><td>Pendiente de:</td></th>
      <?php
      while($row=mysql_fetch_array($result))
      {
         if ($num/2==0){
            $color="#CCFFCC";
         } else {
            $color="#FFFF99";
         }
         if ($row['Tengo']==0) {
            $tengo="<input name=tengo[] id=tengo type=checkbox value=0>";
         } else {
            $tengo="<input name=tengo[] id=tengo type=checkbox checked value=1>";
         }
         ?>
         <tr>
         <td align=center bgcolor="<?php echo $color; ?>"><?php echo $id[]=$row['idCromo']; ?><?php echo $row['idCromo']; ?></td>
         <td align=center bgcolor="<?php echo $color; ?>"><?php echo $tengo; ?></td>
         <td align=center bgcolor="<?php echo $color; ?>"><?php echo $row['Apellidos']; ?></td>
         <td align=center bgcolor="<?php echo $color; ?>"><?php echo $row['Nombre']; ?></td>
         <td align=center bgcolor="<?php echo $color; ?>"><input name="pendiente[]" type="text" id="pendiente"
         value="<? echo $row['Pendiente']; ?>">
         </td></tr>
            <?php
      }
      ?>
      <td colspan=5 align=center><input type=submit id=add value=Actualiza la lista><input type="button" onClick="refrescar()"          value="Restablece los valores anteriores">
      </form>
      </table>
      <?php
      } else
      {   
      extract($_POST);
         for($i=0;$i<$count;$i++)
      {
         if(f.$tengo[$i].checked)
         {
            $marca=1;
         } else {
            $marca=0;
         }
         $sql1="UPDATE Faltas SET Tengo='$marca', Pendiente='pendiente[$i]' WHERE idCromo='$id[$i]'";
         $result1=mysql_query($sql1);
      }
      
      }
   }
      
}
mysql_close($conn);
?>


Quan clico al botó Actualitza no actualitza sinó que manté la taula exactament com abans.

A veure si em podeu ajudar aquesta vegada.

Gràcies!
 
Avatar de l’usuari
Mad93
Moderadors
Moderadors
Entrades: 5850
Membre des de: dj. 27 nov. 2003, 20:00
Ubicació: Vivint a la universitat ><
Contacta:

dt. 02 set. 2008, 19:40

Prova canviant això:

         if(f.$tengo[$i].checked)
         {
            $marca=1;
         } else {
            $marca=0;
         }


Per:

         if(f.$tengo[$i]==1)
         {
            $marca=1;
         } else {
            $marca=0;
         }


Diria, i dic diria, que el checked deu mirar si el valor és nul o no, i un valor 0 no és nul.
Imatge
Tant avorrit que m'he fet un bloc... un més. Servidor mig online...

Qui està connectat

Usuaris navegant en aquest fòrum: No hi ha cap usuari registrat i 6 visitants