Creare tabel in mysql cu nume din alt tabel

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
bvlucretiu
Mesaje: 88

Creare tabel in mysql cu nume din alt tabel

Bună!
Lucrez la un site propriu în localhost și aș dori să știu ce cod(php) ar trebui să pun în comandă, pentru a putea crea un tabel într-o bază de date, iar acelui tabel să-i dau numele unei valori care există într-o celulă a unui alt tabel aflat în aceeași bază de date?

Cod: Selectaţi tot

<?php
include 'connect.php';
if(empty($_POST)) {
  if (!$_GET['id']) {
    die('Produsul nu este valid.');
  }
  $id = $_GET['id'];
  $sql = "SELECT * FROM alimentecapitole WHERE id='$id'";
  $result = mysql_query($sql);
  $row = mysql_fetch_assoc($result);
} else {
  $id = $_POST['id'];
  $numecapitol = $_POST['numecapitol'];
  $sql = "UPDATE alimentecapitole SET numecapitol='$numecapitol' WHERE id='$id'";
  mysql_query($sql);
  header('Location: http://localhost/enorm_db/index.php?pagina=alimente_capitole');
}
?>
în loc de "UPDATE" aș dori să am ceva de genul "CREATE TABLE " dar nu știu cum ar trebui să formulez astfel încât să pot introduce numele tabelului care să se creeze să fie cel preluat de variabila $_POST, iar numele câmpurilor create să rămână aceleași!
Nu știu dacă m-am făcut înțeles, însă cei care cunosc programare presupun că își dau seama ceea ce doresc!
Vă mulțumesc anticipat!
Toate bune!

MarPlo
Salut
Incearca asa:
1. Se face un select cu acel id in tabelul de unde vrei sa iei numele nou.

Cod: Selectaţi tot

$sql = "SELECT nume_coloana FROM nume_tabel WHERE id= $id LIMIT 1"; 
2. Se preia valoarea din randul returnat si se adauga la CREATE TABLE.

Cod: Selectaţi tot

$sql = "CREATE TABLE ". $row['nume_coloana'] ." (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, Definire Coloane ..) CHARACTER SET utf8 COLLATE utf8_general_ci"; 

bvlucretiu
Nu știu unde am greșit căci nu-mi afișează nici un răspuns, nici că s-a creat nici că nu s-a creat tabelul, iar în phpmyadmin tabelul nu se crează!
La click pe lincul care mă trimite în pagina de creere tabel, acesta cu codul, mă trimite direct în pagina pe care am specificat-o în "header location" la închiderea comenzii mysql, fără nici un mesaj!

Cod: Selectaţi tot

	include 'connect.php';	
	if (empty($_POST)) {
		if (!$_GET['id']) {
		die('Produsul nu este valid.');		
		}		
		$id = $_GET['id'];		
		$sql = "SELECT numecapitol FROM alimentecapitole WHERE id='$id'";		
		$result = mysql_query($sql);
		$row = mysql_fetch_assoc($result);
	} else {	
		$id = $_POST['id'];
		$tabnouid = $_POST['tabnouid'];
		$sql = "CREATE TABLE ". $row['numecapitol']. " (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
numecapitol VARCHAR(50) NOT NULL) CHARACTER SET utf8 COLLATE utf8_general_ci";
		if (mysql_query($sql))
    echo '<br /><br /><br /><center><h4>Tabelul <u>alimentecapitole</u> a fost creat.</h4></center><br />'; 
else 
  echo '<br /><br /><br /><center><h4>Tabelul <u>alimentecapitole</u> nu a putut fi creat deoarece - '. mysql_errno(). ' : '. mysql_error(). '</h4></center>'; 
	header('Location: http://localhost/enorm_db/index.php?pagina=alimente_capitole');
		}
mysql_close();

MarPlo
Incearca asa:

Cod: Selectaţi tot

include 'connect.php';   
if(isset($_REQUEST['id'])){   
  $id = intval($_REQUEST['id']);
  $sql = "SELECT numecapitol FROM alimentecapitole WHERE id = $id LIMIT 1";      
  $result = mysql_query($sql);
  $row = mysql_fetch_assoc($result);
  if(isset($row['numecapitol'])){
    $sql = "CREATE TABLE ". $row['numecapitol']. " (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, numecapitol VARCHAR(50) NOT NULL) CHARACTER SET utf8 COLLATE utf8_general_ci";
    if(mysql_query($sql)) echo '<br /><br /><br /><center><h4>Tabelul <u>'. $row['numecapitol'] .'</u> a fost creat.</h4></center><br />';
    else echo '<br /><br /><br /><center><h4>Tabelul <u>'. $row['numecapitol'] .'</u> nu a putut fi creat deoarece - '. mysql_errno(). ' : '. mysql_error(). '</h4></center>';
  }
  else echo 'Produsul nu este valid.';
}
else echo 'Not an id'; 

bvlucretiu
Mulțumesc f. mult!
Este ok funcționează însă a apărut o nouă problemă la înregistrările din tabelul din care se crează noul tabel la înregistrările care conțin două cuvinte îmi apare

Cod: Selectaţi tot

Tabelul Ingrijire corporala nu a putut fi creat deoarece - 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'corporala (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, numecapitol VARCHAR(50) N' at line 1
presupun că ar trebui să execute o comandă care să înlocuiască spațiul dintre cuvinte cu "_" , și nu știu cum și unde să inserez funcția respectivă!

MarPlo
Asa ar fi indicat, ca numele de tabele si coloanbe din baza de date sa nu contina spatiu.
Daca vrei sa inlocuiesti spatiu cu "_", se poate cu str_replace() in pp.
Asa in codul dat mai sus:

Cod: Selectaţi tot

$sql = "CREATE TABLE ". str_replace(' ', '_', trim($row['numecapitol'])). " .."; 

bvlucretiu
Este OK, functioneaza!
Multumesc mult!

Subiecte similare