Aiuto codice PHP: Non aggiorna la tabella!!

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
Innanzitutto salve a tutti, sono nuovo del forum e volevo salutare tutti gli amministratori e gli iscritti, seguo da tanto il forum e finora sono sempre riuscito a risolvere i miei problemi qui...ma stavolta proprio non capisco questa cosa:

ho un sito dove è stato inserita una pagina con le NEWS che l'amministratore può scrivere. Il sistema delle news è in php, molto semplice c'è un index.php dove vengono visualizzate le news (salvate in databaase mysql) una pagina admin.php dove l'amministratore può entrare e aggiungere una nuova news (l'aggiunta della news la fa direttamente lo script del admin.php). nell'admin.php l'amministratore può anche modificare la notizia...è qui che sorge il problema: cliccando su modifica notizia viene reindirizzato ad edit_news.php dove visualizza sia il titolo della news sia il testo...una volta modificato il testo se clicco su aggiorna il browser mi dà messaggio di avvenuto aggiornamento ma se vado a controllare nell'index o nell'admin.php, la notizia rimane sempre invariata a come l'avevo scritta la prima volta...
vi posto il codice di edit_news.php in quanto credo che il problema sia lì:
Codice:
<?php

include("config.php"); // dove sono contenutte le info per la connessione al database, sono tutte corrette, ho controllato

   $newsid = $_GET['newsid'];

   if(isset($_POST['submit']))
  {

      $title = $_POST['title'];
      $text1 = $_POST['text1'];
      $text2 = $_POST['text2'];



         $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);

          echo "<b>Fatto! Notizia aggiornata";
          echo "<meta http-equiv=Refresh content=4;url=admin.php>";
}
elseif($newsid)
{

        $result = mysql_query("SELECT * FROM news WHERE newsid='$newsid' ",$connect);
        while($myrow = mysql_fetch_assoc($result))
             {
                $title = $myrow["title"];
                $text1 = $myrow["text1"];
                $text2= $myrow["text2"];
?>
<br>
<h3>::Modifica Notizia:: </h3>

<form method="post" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="newsid" value="<? echo $myrow['newsid']?>">

Titolo: 
<input name="title" size="40" maxlength="255" value="<? echo $title; ?>">
<br>
Testo1: 
<textarea name="text1"  rows="7" cols="30"><? echo $text1; ?></textarea>
<br>
Testo2: 
<textarea name="text2" rows="7" cols="30"><? echo $text2; ?></textarea>
<br>
<input type="submit" name="submit" value="Aggiorna">
</form>
<?
              }//fine ciclo while

  }//fine else
?>
Vi ringrazio in anticipo per il vostro aiuto!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
un mio consiglio
prova a dividere
$result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);
in
$query="UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ";


inserisci
var_dump($query);
$resul....
e guarda il risultato verificando se è come deve essere
se ok riunisci, altimenti vedi cosa va storto correggi e riunisci.
poi prova con var_dump() tutti gli input
 

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
Grazie per la tua riposta...
da come ho capito dovrei avere una cosa del genere:

$query="UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ";

var_dump($query);

$result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);

e il resto...

Giusto???
Scusami se te lo kiedo ma di php ne capisco poco e niente....
grazie per il tuo aiuto comunque.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
hai capito giusto
il resto rimene come è
quando avvii lo script guarda quello che risulta da var_dump
dovrebbe darti una risposta del genere

string(135) UPDATE news SET title='prima news', text1='pinco', text2='pallo' WHERE newsid='3' ";
dove 135 (ho messo a caso) è la lunghezza della stringa ed alle varie variabili viene sostituito il valore che hai immesso.
in questo modo vedi se stai facendo giusto. es se ti risultasse
string(120) UPDATE news SET title='', text1='pinco', text2='pallo' WHERE newsid='3' ";
vuol dire che c'è un errore nell'immisione di title e così via, oppure se manca un apice....
se è giusto togli il var_dump e verfica un po alla volta (sempre con var_dump) tutte le variabili
 

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
Borgo innanzitutto grazie per l'aiuto che mi stai dando,
ho fatto uqello che hai detto e il risultato è stato questo:


string(791) "UPDATE news SET title='Nuovo Sito!!', text1='www', text2='Grazie a tutti e buona navigazione!!' WHERE newsid='' "

Le variabili sono tutte piene eccetto dove c'è WHERE newsid=" ". la newsid cioè il numero della news che deve andare a modificare è vuota... quindi è qualcosa che manca...il problema è che nn so cosa...:confused:
cioè forse è un errore di sintassi??o ci manca effettivamente qualkosa??
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
la sintassi è corretta, manca però l'id.
sotto
$newsid = $_GET['newsid'];
metti
var_dump($_GET['newsid']);
oppure o anche
var_dump($newsid);
e guarda il risultato
se ti da NULL o vuota, o perdi per strada il valore (ma non mi sembra) o l'errore nasce dalla pagina da cui invii il get.
nelle righe in cui prelevi i vecchi testi da modificare, non puoi prelevare anche l'id, aggingendo?

while($myrow = mysql_fetch_assoc($result))
{
$title = $myrow["title"];
$text1 = $myrow["text1"];
$text2= $myrow["text2"];
$newsid=$myrow["id"];//verifica nome campo
eccetera.........
poi lo trasmetti via post con un campo hidden, prelevendolo come per title, tesxt1..... con un bel

if(isset($_POST['submit']))
{

$newsid = $_POST['newsid'];
$title = $_POST['title'];
$text1 = $_POST['text1'];
$text2 = $_POST['text2'];
eccetera.......................
 

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
si infatti lo perdo per strada...perchè quando clicco su modifica notizia, la pagina riesce a farmi visualizzare il testo scritto in precedenza e il titolo, il problema sorge quando lo modifico che perde il numero id della notizia...

che consiglio mi dai??
 

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
niente...

niente....ho provato anche ad inviare come hidden con POST la variabile newsid ma nulla...facendo come hai detto tu.

mhà!...kissà perchè!!
 

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
ecco il codice di modifica_news.php
così è con l'ultima modifica
Codice:
<?php

//LAST UPDATE
// 27-09-2007

include("config.php");

   $newsid = $_GET['newsid'];

   if(isset($_POST['submit']))
  {
      $newsid = $_POST['newsid'];
      $title = $_POST['title'];
      $text1 = $_POST['text1'];
      $text2 = $_POST['text2'];



         $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);

          echo "<b>Fatto! Notizia aggiornata";
		  echo "<b>Attenzione la notizia non verrà visualizzata subito.<br><br>Reindirizzamento tre 4 sec.";
          //echo "<meta http-equiv=Refresh content=4;url=admin.php>";
}
elseif($newsid)
{

        $result = mysql_query("SELECT * FROM news WHERE newsid='$newsid' ",$connect);
        while($myrow = mysql_fetch_assoc($result))
             {
			    $newsid = $myrow["newsid"];//verifica nome campo
                $title = $myrow["title"];
                $text1 = $myrow["text1"];
                $text2= $myrow["text2"];
?>
<br>
<h3>::Modifica Notizia:: </h3>

<form method="post" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="newsid" value="<? echo $myrow['newsid']?>">

Titolo: 
<input name="title" size="40" maxlength="255" value="<? echo $title; ?>">
<br>
Testo1: 
<textarea name="text1"  rows="7" cols="30"><? echo $text1; ?></textarea>
<br>
Testo2: 
<textarea name="text2" rows="7" cols="30"><? echo $text2; ?></textarea>
<br>
<input type="submit" name="submit" value="Aggiorna">
</form>
<?
              }//fine ciclo

  }//fine else
?>
Per la tabella ti mostro il file sql

CREATE TABLE `news` (
`newsid` int(11) NOT NULL auto_increment,
`dtime` datetime default NULL,
`title` varchar(255) default NULL,
`text1` text,
`text2` text,
PRIMARY KEY (`newsid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
per prima cosa correggi

<form name ="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="newsid" value="<?php echo $myrow['newsid'];?>">

la sintassi giusta dovrebbe essere $_SERVER['PHP_SELF'];

poi ti sei dimenticato di chiudere con ; e (conviene) scrivere <?php non solamente <?
poi convine sempre dare un nome al form

comunque a parte questo ci sto dando un occhi. poi ti posto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao, prova così. leggi i commenti che ho messo

PHP:
<?php
/*
non ti serve il ciclo while in quento estrai comunque un record solo e,
 secondo me,
nemmeno l' elseif perchè o arrivi tramite pagina precedente e
 quindi hai il $_GET, oppure
se inserici nel bw l'URL della pagina il $_GET è vuoto 
e non trova la news

*/
//LAST UPDATE
// 27-09-2007

include("config.php");
$newsid = $_GET['newsid'];//viena da una querystringa di pagina precedente?
/*poi, se funzia, togli tutti i var_dump*/
var_dump($newsid);
 if(isset($_POST['submit']) && $_POST['submit']=="Aggiorna"){
      $newsid = $_POST['newsid'];
	  var_dump($newsid);
	  /*ti conviene inserire delle verifiche se l'aggiornamento non lo fai tu
	  in modo che qualcuno non possa inserire del codice malevolo es.
	  <a href="http://www.porno_pon_pon.ru">clicca qui</a>
	  comunque come minimo addslashes in modo che se il titolo ha degli
	  apici (apostrofi) non ti mandi in tilt il db. quando leggi li togli
	  inserendo stripslashes
	  poi dovresti, forse, verificare che un campo non venga
 completamente cancellato
	  modifica si, cancellazione no; soprattutto per title
	  */
      $title = $_POST['title'];
      $text1 = $_POST['text1'];
      $text2 = $_POST['text2'];
	  $query="UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid'";
	  var_dump($query);
      $result = mysql_query($query,$connect);
      echo "<b>Fatto! Notizia aggiornata";//manca chiusura </b>
	  echo "<b>Attenzione la notizia non verrà visualizzata subito.<br><br>Reindirizzamento tre 4 sec.</b>";
      //echo "<meta http-equiv=Refresh content=4;url=admin.php>";
}//fine if
      $query="SELECT * FROM news WHERE newsid='$newsid'";
	  var_dump($query);
	  $result = mysql_query($query,$connect);
      $myrow = mysql_fetch_assoc($result)){
	  $newsid = $myrow["newsid"];//verifica nome campo
      $title = $myrow["title"];
      $text1 = $myrow["text1"];
      $text2= $myrow["text2"];
?>
<br>
<h3>::Modifica Notizia:: </h3>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];  ?>">
<input type="hidden" name="newsid" value="<? echo $newsid;?>">

Titolo: 
<input name="title" size="40" maxlength="255" value="<? echo $title; ?>">
<br>
Testo1: 
<textarea name="text1"  rows="7" cols="30"><? echo $text1; ?></textarea>
<br>
Testo2: 
<textarea name="text2" rows="7" cols="30"><? echo $text2; ?></textarea>
<br>
<input type="submit" name="submit" value="Aggiorna">
</form>
 

lucmel

Nuovo Utente
19 Lug 2009
7
0
0
funziona...

borgo ti devo ringraziare tantissimo...
ora funziona..
però ho notato una cosa:
una volta che aggiorni la news
nella pagina index dove chiunque la può vedere nn si aggiorna subito, ma se si entra come admin e quindi hai la possibilità di modificare la news la vedi corretta...

cmq l'importante è che funzioni...
secondo me il ritardo può essere dato dal fatto che il sito è appoggiato sul server di altervista. Infatti il server è molto lento, anche nel caricamento dei file in ftp: nel senso che i file risultano essere inseriti effettivamente dopo 30 minuti....
cmq graazie ancora!!