problema con WHERE

Ciao, io ho un problema semplice da risolvere. in poche parole con la querystring GET ed il campo id il codice funziona ma se uso la where con il campo username non mi stampa il nome utente nella form . Vi posto un pò di codice.

Non stampa nemmeno info1. e username come mai? sto seguendo il corso di questo sito.

ecco il codice:

<?php

include("inc.php");

if($_POST && isset($_GET['username']))

{

   $username = $_POST['username'];

   $info1 = $_POST['info1'];

   $username = intval($_GET['username']);

   // verifico la presenza dei campi obbligatori

   if(!$nome)

   {

      $messaggio = urlencode("Non hai inserito il nome");

      header("location: $_SERVER[PHP_SELF]?username=$username&msg=$messaggio");

      exit;

   }

   // preparo la query

   $query = "UPDATE `utenti_storia` SET `username` = '$username',

         `info1` = '$info1',

         `data` = Now() WHERE `utenti_storia`.`username`='$username'";

         

   // invio la query

   $result = mysql_query($query);

   // controllo l'esito

   if (!$result) {

      die("Errore nella query $query: " . mysql_error());

   }

   // chiudo la connessione a MySQL

   mysql_close();

   $messaggio = urlencode('Aggiornamento effettuato con successo');

   echo "".$messaggio."";

   //header("location: $_SERVER[PHP_SELF]?msg=$messaggio");

}

else

{   // mostro un eventuale messaggio

   if(isset($_GET['msg']))

      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

   $username = intval($_GET['username']);

   // preparo la query

   $query = "SELECT username,info1,data FROM utenti_storia WHERE username = '$username'";

   

   // invio la query

   $result = mysql_query($query);

   // controllo l'esito

   if (!$result) {

      die("Errore nella query $query: " . mysql_error());

   }

   // controllo che la SELECT abbia restituito un record

   // l'id passato via GET potrebbe essere stato manipolato

   

   if(mysql_num_rows($result) != $username) {

      die("l'username passato via GET è errato");

   }

   list($username,$info1,$data) = mysql_fetch_row($result);

   

?>

<form name="form_storia" method="post" action="?username=<? /* QUI NON STAMPA */ echo  $username?>">

     <p>

       <label>Storia<br />

       <textarea name="info1" cols="40" rows="5"><?echo $info1?></textarea>

       </label>

     </p>

       <p>

       <input name="invia" type="submit" value="Invia" />

     </p>

   </form>

<?   

}

?>

graize mille.

inviato 9 anni fa
lab82
X 0 X

ho risolto cosi:

ho sostituito questo:

$username = intval($_GET['username']);

con questo: $username = $_GET['username'];

però il ora il problema è risolto ma ne ho uno nuovo:

Questo codice:

<?php

//.......

if(mysql_num_rows($result) != $_GET['username']) {

      die("<br>l'ID passato via GET è errato");

   }

?>

Mi dice sempre errato se passo il valore giusto,

come mai?

risposto 9 anni fa
lab82
X 0 X

Stai procedendo un po' a casaccio? mysql_num_rows fornisce il numero di record restituiti dalla query, perché lo confronti con lo username?

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ha capito,

ed come faccio ad far venire un messaggio dicento che l'username non esiste o errato?.

pensavo che faceva quel pezzo di codice,

grazie.  :)

risposto 9 anni fa
lab82
X 0 X

Effettuata la query con mysql_query devi prelevare il primo record che ha restituito, prendere da esso lo username e confrontarlo con quello inviato dall'utente.

Qui trovi un po di informazioni su come recuperare i risultati di una SELECT:

http://www.phpnews.it/corsi/corso-php-mysql/selezione-dati-recupero-risultati-i/

http://www.phpnews.it/corsi/corso-php-mysql/selezione-dati-recupero-risultati-ii/

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

grazie,

ora ho fatto da capo lo scirpt come dicevi anche se torno qui dopo un paio di giorni , ma ho dovuto da fare altre cose oltre il computer.....

passiamo al problema del where.

function mostra_form()

{

   // mostro un eventuale messaggio

   if(isset($_GET['msg']))

      echo '<b><h2>'.htmlentities($_GET['msg']).'</h2></b><<br /><br />';

   

   

// preparo la query

$id = $_GET['id'];

$query = "SELECT * FROM news WHERE id = $id"; 

// invio la query

$result = mysql_query($query);

// controllo l'esito

if (!$result) {

   die("Errore nella query $query: " . mysql_error());

}

// LINEA 89 : Mi da errore qui?.

while ($row = mysql_fetch_assoc($result)) {

   $titolo      =$row['titolo'];

   $autore     = $row['autore'];

   $testo     = $row['testo'];

   $email      = $row['mail'];

   $data = $row['data'];

?>

   <form name="form_registrazione" method="post" action="">

    Titolo:<br />

<input type="text" size="40" name="titolo" value=<?=$titolo?>" />

<br /><br />

Data:<br />

<input type="text" size="40" name="data" value="<?=$data?>">

Autore:<br />

<input type="text" size="40" name="autore" value="<?=$autore?>" />

<br /><br />

E-mail:<br />

<input type="text" size="40" name="mail" value="<?=$email?>"/>

<br /><br />

Testo:<br />

<textarea cols="60" rows="40" name="testo"><?=$testo?></textarea><br />

<br />

<br /><br />

 <input name="invia" type="submit" value="Invia" />  

</form>

<?php

// libero la memoria di PHP occupata dai record estratti con la SELECT

mysql_free_result($result);

// chiudo la connessione a MySQL

mysql_close();

}

}

ora sto faccendo la parte delle news.

ed ho abbandonato per un'attimo la parte degli utenti.

come mai se faccio update.php?id=1

il record c'è ma mi dice questo errore:

però ho visto che stampa lo stesso il record ma in fondo con qull'errore?.

Warning: mysql_fetch_assoc(): 9 is not a valid MySQL result resource in D:\xampp\htdocs\lab82\news\update.php on line 89

grazie.

 :)

risposto 9 anni fa
lab82
X 0 X

L'errore che hai ricevuto è causato non dall'istruzione mysql_fetch_assoc ma dalla precedente query che non è andata a buon fine, a causa di un errore di sintassi nella query

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ho visto altri esempi anche su html.it,

ed ho risolto con questo:

però non capisco una cosa:

perchè l'include del config lo devo inserire tutte le volte... sè no senza quello mi da errore di connessione?.

ecco la guida: http://php.html.it/guide/leggi/77/guida-phpmysql-pratica/

io praticamente ho fatto un toop_foot.php come dice la guida , ma alcuni esempi lo presi anche su qui.

ed li ho messi insieme,

però il file config.inc.php , lo devo inserire tutte le pagine perchè dopo se non lo metto mi da errore di connessione, come mai?

come posso risolvere questo problema?.

grazie.

ecco il codice come ho fatto ora ad risolverlo tramite guide su internet.

function mostra_form()

{

   include("../config.inc.php");

   $db = mysql_connect($db_host, $db_user, $db_password);

   if ($db == FALSE)

   die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

   mysql_select_db($db_name, $db)

   or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");   

   // preparo la query

   $id=$_GET['id'];

   $query = "SELECT * FROM news WHERE id='$id'";

   $result = mysql_query($query, $db);

   $row = mysql_fetch_array($result);

// invio la query

   $titolo      =$row['titolo'];

   $autore     = $row['autore'];

   $testo     = $row['testo'];

   $email      = $row['mail'];

   $data = $row['data'];

// controllo l'esito

if (!$result) {

   die("Errore nella query $query: " . mysql_error());

}

?>

   <form name="form_registrazione" method="post" action="<?=$id?>">

    Titolo:<br />

<input type="text" size="40" name="titolo" value="<?=$titolo?>" />

<br /><br />

Data:<br />

<input type="text" size="40" name="data" value="<?=$data?>">

Autore:<br />

<input type="text" size="40" name="autore" value="<?=$autore?>" />

<br /><br />

E-mail:<br />

<input type="text" size="40" name="mail" value="<?=$email?>"/>

<br /><br />

Testo:<br />

<textarea cols="60" rows="40" name="testo"><?=$testo?></textarea><br />

<br />

<br /><br />

 <input name="invia" type="submit" value="Invia" />  

</form>

<?php

// libero la memoria di PHP occupata dai record estratti con la SELECT

// chiudo la connessione a MySQL

mysql_close($db);

}
risposto 9 anni fa
lab82
X 0 X

Questo non è un problema ma è il normale funzionamento di PHP.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ok, capito.

ma non posso fare un inc.php

ed poi mettere tutte le include("config.php") include("template.php") include("functions.php") etc....

grazie.

saluti,

luigi

risposto 9 anni fa
lab82
X 0 X

si, ciò che conta è che tutti i file vengano caricati  :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ok,

grazie mille.

risposto 9 anni fa
lab82
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda