2013-03-08 6 views
1

J'ai une table de la structure du type suivant. Les données de l'URL semblent être bien. Les valeurs de baie (B1 B2 B3) sont définies sur 1 de type entier.Ajout de données à MySQL via PHP

DateToBook   | B1 | B2 | B3 | 
------------------------------------ 
    8March2013   | 1 | 1 | 1 | 

Je n'ai pas pu insérer les valeurs. Le nombre de base pour la structure ci-dessus est 3.

<?php 
    $DB_hostname = "localhost"; 
    $DB_Name = "root"; 
    $DB_pass = "pass123"; 

    if(isset($_GET["tabName"])){ 
     $tableName = $_GET["tabName"]; 
     $dB = $_GET["db"]; 
     $bayCount = $_GET["bayNo"]; 
     $date = $_GET["d"]; 
     $b = '1'; 
    } 

    $con = mysql_connect($DB_Hostname,$DB_Name,$DB_pass) or die(mysql_error()); 


    mysql_select_db($db, $con); 

    $_bayColumn = array(); 
    for ($i = 1; $i <= $bayCount; $i++) { 
     $_bayColumn[] = "B$i"; 
    } 
    echo $_bayColumn[0]; 


    mysql_query("INSERT INTO $tableName (DateToBook) VALUES ($date)"); 


    for ($j =0; $j < $bayCount; $j++) { 

    mysql_query("UPDATE $tableName SET $_bayColumn[$j] = '$b' WHERE DateToBook = '$date'"); 


    } 




    mysql_close($con); 
    ?> 

Y a-t-il un problème avec la syntaxe?

+6

Vous utilisez [une ** API de base de données obsolète **] (http://stackoverflow.com/q/12859942/19068) et vous devez utiliser un [remplacement moderne] (http://php.net/manual/ fr/mysqlinfo.api.choosing.php). Vous êtes également vulnérable aux [attaques par injection SQL] (http://bobby-tables.com/) ** qu'une API moderne rendrait plus facile à [défendre] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

+0

http://stackoverflow.com/tags/pdo/info –

+0

Je pense que vous devez remplacer cette ligne' pour ($ j = 0; $ j <= $ bayCount; $ j ++) {' –

Répondre

1

Votre problème est que $b n'existe que dans l'instruction if ci-dessous. Si $b est toujours 1, pourquoi ne pas vous écrivez simplement 1 dans votre requête au lieu de $b

ou le modifier à ce qui suit:

$b = '1'; //Place it here 
if(isset($_GET["tabName"])){ 
    $tableName = $_GET["tabName"]; 
    $dB = $_GET["db"]; 
    $bayCount = $_GET["bayNo"]; 
    $date = $_GET["d"]; 
    $b = '1'; //You can get rid of this now 
} 

De plus, je suis entièrement d'accord avec les commentaires ci-dessus et vous devriez utilisez MySQLI ou PDO

+0

baycount est de type entier. "B1 INT NOT NULL DEFAULT 1" Est-ce que ça a quelque chose à voir avec ça? – DesperateLearner

+1

Si B1 Par défaut à '1', quel est le point de régler à 1? – AmazingDreams

+0

Oui vrai! même sans la boucle for je ne pouvais pas insérer la date. DateToBook est une clé primaire et de type Varchar (11) – DesperateLearner

0

Vous pouvez utiliser die("INSERT INTO $tableName (DateToBook) VALUES ($date)") pour vérifier si vous avez la bonne valeur.

Questions connexes