modifica dati, e cambio username.

Salve, ho questo codice che devo modificare l'articolo. In un menu a tendina faccio selezionare l'utente che la scritta, ora mi viene un problema, se cambio l'username avendo una campo che si chima UserID nella tabella degli articoli, come faccio ad cambiare anche quello perchè adesso aggiorno solo il campo art_autore ma per l'id?.

Vi posto il codice:

<?php
session_start();
require_once(dirname(__FILE__) . '/../inc.php'); ?>
<?php


      $db = new DbConnector();               
      $db->connect();                              
      $art_id = mysql_codifica($_GET['edit']);
      $query = "SELECT * FROM articoli WHERE art_id='$art_id'";
      $result = $db->query($query);
      $rows = mysql_fetch_assoc($result);

if(isset($_POST["submit"]))
{
   
       if($_POST["Username"]=="" )
      { 
        $error =  "Error: No Name  supplied, try again.";
         
      }
      
      elseif($_POST["Tipo"] ==  "")
      {
      $error = "Non hai selezionato il tipo di utenza";
      }
      elseif($_POST["art_titolo"] == "")
      {
         $error = "Non hai inserito il titolo";
      }
      elseif($_POST["art_articolo"] == "")
      {
         $error = "Non hai inserito articolo";
      }elseif($_POST["art_data"] == "")
      {
         $error = "Non hai inserito data";
      }
      
      elseif($_POST["art_stato"] == "")
      {
         $error = "Inseriro lo stato della notizia";
      }
      else
      {
         // Connect to the database
      
      
         $db = new DbConnector();
         $db->connect();
            
         $query = "UPDATE articoli SET ";
            
         $query.="art_sezioni_id='".mysql_codifica($_POST["Tipo"])."',";
         $query.="art_autore='".mysql_codifica($_POST["Username"])."',";
         $query.="art_titolo='".mysql_codifica($_POST["art_titolo"])."',";
         $query.="art_articolo='".mysql_codifica($_POST["art_articolo"])."',";
         $query.="art_stato='".mysql_codifica($_POST["art_stato"])."',";
         $query.="art_data='".mysql_codifica($_POST["art_data"])."'";
      
         $query.="WHERE art_id=$art_id";
         
            $result = $db->query($query);
            echo $query;
            
            $msg =  "Modificata con sucesso <a href=\"../view.php\">log in</a><br><br><br><br><br>";
         }
      }
?>
<?php require_once(dirname(__FILE__) . '/../template/admin/header.php');  ?>
<?php   if ( isset ( $error ) )   { echo '         <p class="error">' . $error . '</p>' . "\n";   }   ?>
<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   } else {//if we have a mesage we don't need this form again.?>
    <script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script><script type="text/javascript">
        tinyMCE.init({
            // General options
            mode: "textareas",
            theme: "advanced",
            plugins: "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

            // Theme options
            theme_advanced_buttons1: "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
            theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
            theme_advanced_buttons3: "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
            theme_advanced_buttons4: "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
            theme_advanced_toolbar_location: "top",
            theme_advanced_toolbar_align: "left",
            theme_advanced_statusbar_location: "bottom",
            theme_advanced_resizing: true,

            // Example content CSS (should be your site CSS)
            content_css: "css/content.css",

            // Drop lists for link/image/media/template dialogs
            template_external_list_url: "lists/template_list.js",
            external_link_list_url: "lists/link_list.js",
            external_image_list_url: "lists/image_list.js",
            media_external_list_url: "lists/media_list.js",

            // Replace values for the template plugin
            template_replace_values: {
                username: "Some User",
                staffid: "991234"
            }
        });
</script><form id="formYIW" method="post" action="<?php echo $dir_site;?>admin/articoli_edit.php?edit=<?php echo $art_id; ?>">

<table width="100%" border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td width="17%" height="28">Autore</td>
    <td width="83%">
          <select name="Username">
        <option selected="selected" value="">SELEZIONA</option>
  <?php
   $query = "SELECT * FROM users";
   
   $db = new DbConnector();               // Create an instance of the database class
         $db->connect();   
   $result = $db->query($query);
   while($row = mysql_fetch_array($result))
   {
      
      $username = $row['Username'];
      $userID = $row["id"];
?>
        <option value="<?php echo $username; ?>" <?php if($rows["art_autore"]=="".$username."") echo 'selected'?>><?php echo $username; ?></option>
        <?php
  }
?>
    </td>
    </tr>
  <tr>
    <td>Categoria</td>
    <td>
      <select name="Tipo">
        <option selected="selected" value="">SELEZIONA</option>
  <?php
   $query = "SELECT * FROM articoli_sezioni";
   
   $db = new DbConnector();               // Create an instance of the database class
         $db->connect();   
   $result = $db->query($query);
   while($row = mysql_fetch_array($result))
   {
      $art_sezioni_id= $row['art_sezioni_id'];
      $art_sezioni_titolo = $row['art_sezioni_titolo'];
?>
        <option value="<?php echo $art_sezioni_id; ?>" <?php if($rows["art_sezioni_id"]=="".$art_sezioni_id."") echo 'selected'?>><?php echo $art_sezioni_titolo; ?></option>
        <?php
  }
?>
        </select>
      </td>
  </tr>
  <tr>
    <td>Titolo</td>
    <td>
      <input type="text" name="art_titolo"    value='<?php if ( isset ( $_POST['art_titolo'] ) ) { echo $_POST['art_titolo']; } else { echo $rows['art_titolo']; } ?>' />
    </td>
  </tr>
  <tr>
    <td>art_articolo</td>
    <td>
      <textarea name="art_articolo"><?php if ( isset ( $_POST['art_articolo'] ) ) { echo $_POST['art_articolo']; } else { echo $rows['art_articolo']; } ?></textarea>
      </td>
  </tr>

  <tr>
    <td>Data</td>
    <td><input type="text" name="art_data" value='<?php if ( isset ( $_POST['art_data'] ) ) { echo $_POST['art_data']; } else { echo $rows['art_data']; } ?>' /></td>
  </tr>
  <tr>
    <td>Stato</td>
    <td><input type="text" name="art_stato"   value='<?php if ( isset ( $_POST['art_stato'] ) ) { echo $_POST['art_stato']; } else { echo $rows['art_stato']; } ?>' /></td>
  </tr> 
  <tr>
    <td colspan="2" align="center" valign="middle">
      <input class="submit" type="submit" name="submit" value="Aggiungi Art." />
      </td>
  </tr>
</table>

    </form>
   
   <?php

}  require_once(dirname(__FILE__) . '/../template/admin/footer.php');  ?>
inviato 6 anni fa
luigi
X 0 X
Salve, ho questo codice che devo modificare l'articolo. In un menu a tendina faccio selezionare l'utente che la scritta, ora mi viene un problema, se cambio l'username avendo una campo che si chima UserID nella tabella degli articoli, come faccio ad cambiare anche quello perchè adesso aggiorno solo il campo art_autore ma per l'id?.

Puoi gentilmente riformulare la richiesta?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

in poche parole devo ricuperare il nome dell'autore e il suo id prendentole dalla tabella users e fare che mentre cambio l'autore della notizia, mi cambia sia il nome dell'autore e il suo id associato alla tabella articoli.

devo fare la modifica ai campi art_autore , art_userID, con il menu a tendina che ho creato.

ad esempio:

luigi - id 1

cambio in  : davide - id 3

Solo che rilevo solo  art_autore e invece  art_userID no,

Mi protesti dire come si può risolvere il problema.?

risposto 6 anni fa
luigi
X 0 X

Puoi anche indicare uno schema di come è il database (tabelle interessate e i loro campi)?

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Puoi anche indicare uno schema di come è il database (tabelle interessate e i loro campi)?

ad esempio:

Visualizzo la notizia da modificare di luigi - id 1

e la cambio con l'user  : davide - id 3

si, ecco:

la tabella users

CREATE TABLE `users` (
  `id` bigint NOT NULL auto_increment,
  `Password` varchar(255) ,
  `Email` varchar(255),
  `Username` varchar(50),
  `User_Title` varchar(50),
  `Name` varchar(50),
  `Surname` varchar(50),
  `Birth` varchar(50),
  `sex` int(11),
  `state` varchar(50),
  `city` varchar(50),
  `telephone` varchar(255),
  `MSN` varchar(255),
  `SKYPE` varchar(255),
  `WWW` text,
  `Occupazione` text,
  `Interessi` text,
  `info` longtext,
  `picurl` text,
  `Active` int(11),
  `_Group` bigint(11),
   `SignUpDate` datetime,
  `LastSignIn` datetime,
  `Dir` int(11),
  `ip` varchar(255),
  `login` tinyint(1)  NOT NULL default '0',
  `login_date` varchar(255),
  `register_date` varchar(255),
  `Random_key` varchar(32) default NULL,
  `Users_Register` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id))TYPE=MyISAM;

la tabella articoli:

CREATE TABLE `articoli` (
  `art_id` int(11) NOT NULL auto_increment,
  `art_userID` bigint(11),
  `art_sezioni_id` bigint(11),
  `art_autore` varchar(40) NOT NULL default '',
  `art_titolo` varchar(100) NOT NULL default '',
  `art_articolo` longtext NOT NULL,
  `art_tag` text,
  `art_stato` int,
  `art_data` varchar(50),
  `art_online` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY  (`art_id`))TYPE=MyISAM;
risposto 6 anni fa
luigi
X 0 X

Se fai query con join delle tabelle è inutile salvare il nome dell'autore nella tabella articoli, ti conviene salvare solamente l'id dell'autore.

Ora per rispondere alla tua domanda: devi prima recuperare l'id dell'utente che sta facendo la modifica. Lo puoi fare con un select dalla tabella degli utenti e come criterio di ricerca usare il nome dell'utente (immagino però che possano esistere più utenti con lo stesso nome per cui c'è il rischio di sbagliarsi) se questo è univoco, lo è?

Altro sistema è mettere un altro campo di input nel tuo form in modo che invii anche l'id dell'utente e non solo il nome. La cosa però non ha un rischio perchè anche se il campo lo metti come nascosto (hidden) si può modificare in un qualche modo (leggi come maggiori rischi per la tua applicazione).

Come preferisci procedere?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

si forse , fare la join come dici tu e salvare solo l'id dell'utente,

però in questo codice come faccio ad fare la join sia tabella users  e articoli?

Ecco il codice:

<?php 
session_start();
require_once(dirname(__FILE__) . '/../inc.php');
require_once(dirname(__FILE__) . '/../template/header.php'); 
?>
   <div align="center"><p class="title1">News</p></div>
<?php
   $db = new DbConnector();
   $db->connect();

   $righe_per_pagina = 10;
   $url_base = "index.php";
   $pagine_vicine = 1;


// ----------------------------------------------------------------
//    C A L C O L O   D E L   N U M E R O   D I   P A G I N E
 
// ricavo il numero totale di record

$query = "SELECT COUNT(*) FROM articoli WHERE art_stato='1' ORDER BY art_data ASC";
$result = $db->query($query);
// record complessivi
$tot_righe = mysql_result($result,0);
// totale pagine
$tot_pagine = ceil($tot_righe / $righe_per_pagina);

// ----------------------------------------------------------------
//                 P A G I N A   C O R R E N T E

$pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;

// ----------------------------------------------------------------
//            E S T R A Z I O N E   D E I   R E C O R D

// calcolo la prima riga da estrarre con la query
$prima_riga = ($pagina_corrente - 1) * $righe_per_pagina;

$query = "SELECT *
          FROM articoli  WHERE art_stato='1' ORDER BY art_data ASC  LIMIT $prima_riga, $righe_per_pagina";
         
$result = $db->query($query);

if (mysql_num_rows($result) == 0) { 
echo "non trovato";
}else
{
if (!$result) {
    die("Errore nella query $query: " . mysql_error());
}

$elenco_articoli = array();

while ($row = mysql_fetch_assoc($result)) {
    $elenco_articoli[] = $row;
}

// creazione dei link di paginazione
$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine);

// carico il template HTML
include 'articoli.html';
}
require_once(dirname(__FILE__) . '/../template/footer.php'); 
?>

articoli.html

<?php foreach($elenco_articoli as $riga):?>
<table style=" width: 100%;" border="0"
 cellpadding="2" cellspacing="2" >
  <tbody>
    <tr>
      <td colspan="2" rowspan="1"><p class="title1"><?php echo $riga["art_titolo"]; ?></p></td>
      <td style="text-align:right;color:Purple;">Scritta il : <?php echo $riga["art_data"]; ?></td>
    </tr>
    <tr>
      <td colspan="3" rowspan="1" style="text-align:justify;"><?php echo $riga["art_articolo"]; ?></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td  style="text-align:right;color:Green;">Scritta da:<?php echo $riga["art_autore"]; ?></td>
    </tr>
  </tbody>
</table>
 <?php endforeach ?>
 <p><?php echo $link_paginazione?></p>

Grazie mille, mi puoi fare un'esempio?

grazie.

risposto 6 anni fa
luigi
X 0 X

ok, ho risolto ho cambiato idea non faccio più niente siti web. che tanto non sono alla portata mia.

e mi scuso.

risposto 6 anni fa
luigi
X 0 X
ok, ho risolto ho cambiato idea non faccio più niente siti web. che tanto non sono alla portata mia.

E abbandoni così la programmazione web?  :o :o

Ma te la sei presa perchè non ho risposto subito? Sono stato impegnato in questi giorni...

Comunque prima della join direi di rivedere un po' la struttura del database per l'uso corretto delle chiavi primarie e secondarie.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X
ok, ho risolto ho cambiato idea non faccio più niente siti web. che tanto non sono alla portata mia.

E abbandoni così la programmazione web?  :o :o

Ma te la sei presa perchè non ho risposto subito? Sono stato impegnato in questi giorni...

Comunque prima della join direi di rivedere un po' la struttura del database per l'uso corretto delle chiavi primarie e secondarie.

Ciao

no, ma ho cambiato idea  uso joomla, cosi faccio meno fatica.

grazie lo stesso.

risposto 6 anni fa
luigi
X 0 X

Ottima scelta comunque, sviluppare da zero un sito web che magari è già stato costruito da altre persone non è l'ideale. Meglio appoggiarsi a del software già esistente e sviluppare eventualmente su questo  O0

Buon lavoro ciao  :bye:

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda